lon_node(fgGetNode("/position/longitude-deg", true)),
lat_node(fgGetNode("/position/latitude-deg", true)),
alt_node(fgGetNode("/position/altitude-ft", true)),
+ dme_bus_power(fgGetNode("/systems/electrical/outputs/dme", true)),
need_update(true),
dme_freq(0.0),
dme_dist(0.0),
// DME.
////////////////////////////////////////////////////////////////////////
- if ( dme_valid ) {
+ if ( dme_valid && dme_has_power() ) {
station = Point3D( dme_x, dme_y, dme_z );
dme_dist = aircraft.distance3D( station ) * SG_METER_TO_NM;
dme_effective_range = kludgeRange(dme_elev, elev, dme_range);
// FIXME: the panel should handle this
// don't worry about overhead for now,
// since this is handled only periodically
- int dme_switch_pos = fgGetInt("/radios/dme/switch-position");
- if ( dme_switch_pos == 1 && navcom1.has_power() ) {
+ dme_switch_pos = fgGetInt("/radios/dme/switch-position", 2);
+ if ( dme_switch_pos == 1 && dme_has_power() && navcom1.has_power() ) {
if ( dme_freq != navcom1.get_nav_freq() ) {
dme_freq = navcom1.get_nav_freq();
need_update = true;
}
- } else if ( dme_switch_pos == 3 && navcom2.has_power() ) {
+ } else if ( dme_switch_pos == 3 && dme_has_power() && navcom2.has_power() ){
if ( dme_freq != navcom2.get_nav_freq() ) {
dme_freq = navcom2.get_nav_freq();
need_update = true;
SGPropertyNode *lon_node;
SGPropertyNode *lat_node;
SGPropertyNode *alt_node;
+ SGPropertyNode *dme_bus_power;
bool need_update;
bool dme_valid;
+ int dme_switch_pos;
bool dme_inrange;
double dme_freq;
double dme_lon;
// DME Accessors
+ inline bool dme_has_power() const {
+ return (dme_switch_pos == 1 || dme_switch_pos == 3)
+ && (dme_bus_power->getDoubleValue() > 1.0);
+ }
inline double get_dme_freq () const { return dme_freq; }
// Marker Beacon Accessors
dme_kt = fgGetNode( "/radios/dme/speed-kt", true );
dme_nm = fgGetNode( "/radios/dme/distance-nm", true );
+ dme_bus_power = fgGetNode( "/systems/electrical/outputs/dme", true );
navcom1_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[0]",
true );
navcom2_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[1]",
char digits[10];
int i;
- if ( dme_switch != 0 ) {
+ if ( dme_has_power() ) {
// DME minutes
float minutes = dme_min->getFloatValue();
if ( minutes > 999 ) {
float compass_position;
+ SGPropertyNode *dme_bus_power;
+ SGPropertyNode *navcom1_bus_power, *navcom2_bus_power;
+
SGPropertyNode *mag_compass;
SGPropertyNode *dme_min, *dme_kt, *dme_nm;
- SGPropertyNode *navcom1_bus_power, *navcom2_bus_power;
SGPropertyNode *navcom1_power_btn, *navcom2_power_btn;
SGPropertyNode *com1_freq, *com1_stby_freq;
SGPropertyNode *com2_freq, *com2_stby_freq;
bool do_switches();
// convenience
+ inline bool dme_has_power() const {
+ return (dme_bus_power->getDoubleValue() > 1.0)
+ && dme_switch;
+ }
inline bool navcom1_has_power() const {
return (navcom1_bus_power->getDoubleValue() > 1.0)
&& navcom1_power_btn->getBoolValue();