From: curt Date: Thu, 26 Sep 2002 14:13:42 +0000 (+0000) Subject: Work on wiring the dme into the electrical model. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=2a19fc2f53087e64948438caff1cda8f71e20a70;p=flightgear.git Work on wiring the dme into the electrical model. --- diff --git a/src/Cockpit/radiostack.cxx b/src/Cockpit/radiostack.cxx index d4856ace7..075fc6c6e 100644 --- a/src/Cockpit/radiostack.cxx +++ b/src/Cockpit/radiostack.cxx @@ -75,6 +75,7 @@ FGRadioStack::FGRadioStack() : 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), @@ -225,7 +226,7 @@ FGRadioStack::update(double dt) // 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); @@ -319,13 +320,13 @@ void FGRadioStack::search() // 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; diff --git a/src/Cockpit/radiostack.hxx b/src/Cockpit/radiostack.hxx index f939cc4a8..35a08b59e 100644 --- a/src/Cockpit/radiostack.hxx +++ b/src/Cockpit/radiostack.hxx @@ -54,10 +54,12 @@ class FGRadioStack : public FGSubsystem 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; @@ -111,6 +113,10 @@ public: // 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 diff --git a/src/Network/atc610x.cxx b/src/Network/atc610x.cxx index e70c0eff4..181ff570c 100644 --- a/src/Network/atc610x.cxx +++ b/src/Network/atc610x.cxx @@ -398,6 +398,7 @@ bool FGATC610x::open() { 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]", @@ -1112,7 +1113,7 @@ bool FGATC610x::do_radio_display() { char digits[10]; int i; - if ( dme_switch != 0 ) { + if ( dme_has_power() ) { // DME minutes float minutes = dme_min->getFloatValue(); if ( minutes > 999 ) { diff --git a/src/Network/atc610x.hxx b/src/Network/atc610x.hxx index f3561f244..205da95b8 100644 --- a/src/Network/atc610x.hxx +++ b/src/Network/atc610x.hxx @@ -71,9 +71,11 @@ class FGATC610x : public FGProtocol { 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; @@ -113,6 +115,10 @@ class FGATC610x : public FGProtocol { 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();