]> git.mxchange.org Git - flightgear.git/commitdiff
Begin interfacing the navcom's to the electrical model.
authorcurt <curt>
Thu, 26 Sep 2002 04:47:29 +0000 (04:47 +0000)
committercurt <curt>
Thu, 26 Sep 2002 04:47:29 +0000 (04:47 +0000)
src/Cockpit/navcom.cxx
src/Cockpit/navcom.hxx
src/Cockpit/radiostack.cxx

index 8371966ffd2262fbed398553cf45f14ae2622454..75aa78f9f2fc9e81f558c9b6d02134a4ee5497a5 100644 (file)
 SG_USING_STD(string);
 
 
-/**
- * Boy, this is ugly!  Make the VOR range vary by altitude difference.
- */
-static double kludgeRange ( double stationElev, double aircraftElev,
-                           double nominalRange)
-{
-    // Assume that the nominal range (usually 50nm) applies at a 5,000
-    // ft difference.  Just a wild guess!
-    double factor = ((aircraftElev*SG_METER_TO_FEET) - stationElev) / 5000.0;
-    double range = fabs(nominalRange * factor);
-
-    // Clamp the range to keep it sane; for now, never less than 25%
-    // or more than 500% of nominal range.
-    if (range < nominalRange/4.0) {
-        range = nominalRange/4.0;
-    } else if (range > nominalRange*5.0) {
-        range = nominalRange*5.0;
-    }
-
-    return range;
-}
-
-
 // Constructor
 FGNavCom::FGNavCom() :
     lon_node(fgGetNode("/position/longitude-deg", true)),
@@ -123,6 +100,13 @@ FGNavCom::bind ()
 {
     char propname[256];
 
+    // we know index is valid now so lets bind to the bus property
+    // here.
+    sprintf( propname, "/systems/electrical/outputs/navcomm[%d]", index );
+    // default to true in case no electrical system defined.
+    fgSetDouble( propname, 60.0 );
+    bus_power = fgGetNode( propname, true );
+
                                // User inputs
     sprintf( propname, "/radios/comm[%d]/inputs/power-btn", index );
     fgTie( propname, this,
@@ -304,7 +288,7 @@ FGNavCom::update(double dt)
     // Nav.
     ////////////////////////////////////////////////////////////////////////
 
-    if ( nav_valid && power_btn ) {
+    if ( nav_valid && power_btn && (bus_power->getDoubleValue() > 1.0) ) {
        station = Point3D( nav_x, nav_y, nav_z );
        nav_loc_dist = aircraft.distance3D( station );
 
@@ -359,7 +343,9 @@ FGNavCom::update(double dt)
     if ( nav_valid && nav_inrange ) {
        // play station ident via audio system if on + ident,
        // otherwise turn it off
-       if ( power_btn && nav_ident_btn ) {
+       if ( power_btn && (bus_power->getDoubleValue() > 1.0)
+             && nav_ident_btn )
+        {
            FGSimpleSound *sound;
            sound = globals->get_soundmgr()->find( nav_fx_name );
             if ( sound != NULL ) {
index 0f1eb0667c43c26053d7eb10440fffb94b3c4dbb..6eb52d1f04fc2a67d58e6079cc5125b30ff88f65 100644 (file)
@@ -48,6 +48,7 @@ class FGNavCom : public FGSubsystem
     SGPropertyNode *lon_node;
     SGPropertyNode *lat_node;
     SGPropertyNode *alt_node;
+    SGPropertyNode *bus_power;
 
     string last_nav_id;
     bool last_nav_vor;
@@ -171,6 +172,9 @@ public:
     inline void set_nav_ident_btn( bool val ) { nav_ident_btn = val; }
 
     // NavCom Accessors
+    inline bool has_power() const {
+        return power_btn && (bus_power->getDoubleValue() > 1.0);
+    }
     inline bool get_power_btn() const { return power_btn; }
 
     // COMM Accessors
index ff3fcd11959e7cde9ec5136f74d23e7bc0fa140d..d4856ace721c5d242f54bdcdf9c85355301d68e3 100644 (file)
@@ -320,12 +320,12 @@ void FGRadioStack::search()
                                // 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.get_power_btn() ) {
+    if ( dme_switch_pos == 1 && 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.get_power_btn() ) {
+    } else if ( dme_switch_pos == 3 && navcom2.has_power() ) {
         if ( dme_freq != navcom2.get_nav_freq() ) {
             dme_freq = navcom2.get_nav_freq();
             need_update = true;
@@ -440,8 +440,6 @@ void FGRadioStack::search()
     }
     last_beacon = beacon_type;
 
-    navcom1.search();
-    navcom2.search();
     adf.search();
     xponder.search();
 }