]> git.mxchange.org Git - flightgear.git/commitdiff
Merge branch 'jmt/gps' into next
authorTim Moore <timoore33@gmail.com>
Sat, 27 Mar 2010 23:34:51 +0000 (00:34 +0100)
committerTim Moore <timoore33@gmail.com>
Sat, 27 Mar 2010 23:34:51 +0000 (00:34 +0100)
Conflicts:
src/Instrumentation/gps.cxx

1  2 
src/Instrumentation/navradio.cxx

index 0740090ddafb26ca2ccb5ef38c2a4d532ddc6940,4bfe15d48f9fc9071740c3471934c3d671d52dfc..cf748e43f2c0facab9c487f365c59afbed3e09d1
@@@ -129,6 -129,9 +129,9 @@@ FGNavRadio::FGNavRadio(SGPropertyNode *
  // Destructor
  FGNavRadio::~FGNavRadio() 
  {
+     gps_course_node->removeChangeListener(this);
+     nav_slaved_to_gps_node->removeChangeListener(this);
+   
      delete term_tbl;
      delete low_tbl;
      delete high_tbl;
@@@ -220,11 -223,15 +223,15 @@@ FGNavRadio::init (
  
      // gps slaving support
      nav_slaved_to_gps_node = node->getChild("slaved-to-gps", 0, true);
+     nav_slaved_to_gps_node->addChangeListener(this);
+     
      gps_cdi_deflection_node = fgGetNode("/instrumentation/gps/cdi-deflection", true);
      gps_to_flag_node = fgGetNode("/instrumentation/gps/to-flag", true);
      gps_from_flag_node = fgGetNode("/instrumentation/gps/from-flag", true);
      gps_has_gs_node = fgGetNode("/instrumentation/gps/has-gs", true);
-     gps_course_node = fgGetNode("/instrumentation/gps/selected-course-deg", true);
+     gps_course_node = fgGetNode("/instrumentation/gps/desired-course-deg", true);
+     gps_course_node->addChangeListener(this);
+     
      gps_xtrack_error_nm_node = fgGetNode("/instrumentation/gps/wp/wp[1]/course-error-nm", true);
      _magvarNode = fgGetNode("/environment/magnetic-variation-deg", true);
      
@@@ -369,8 -376,6 +376,8 @@@ void FGNavRadio::clearOutputs(
    gs_deflection_deg_node->setDoubleValue(0.0);
    gs_deflection_norm_node->setDoubleValue(0.0);
    gs_inrange_node->setBoolValue( false );
 +  loc_node->setBoolValue( false );
 +  has_gs_node->setBoolValue(false);
    
    to_flag_node->setBoolValue( false );
    from_flag_node->setBoolValue( false );
@@@ -625,6 -630,26 +632,26 @@@ void FGNavRadio::updateDME(const SGVec3
    _dmeInRange =  (dme_distance < _dme->get_range() * SG_NM_TO_METER);
  }
  
+ void FGNavRadio::valueChanged (SGPropertyNode* prop)
+ {
+   if (prop == gps_course_node) {
+     if (!nav_slaved_to_gps_node->getBoolValue()) {
+       return;
+     }
+   
+     // GPS desired course has changed, sync up our selected-course
+     double v = prop->getDoubleValue();
+     if (v != sel_radial_node->getDoubleValue()) {
+       sel_radial_node->setDoubleValue(v);
+     }
+   } else if (prop == nav_slaved_to_gps_node) {
+     if (prop->getBoolValue()) {
+       // slaved-to-GPS activated, sync up selected course
+       sel_radial_node->setDoubleValue(gps_course_node->getDoubleValue());
+     }
+   }
+ }
  void FGNavRadio::updateGPSSlaved()
  {
    has_gs_node->setBoolValue(gps_has_gs_node->getBoolValue());
@@@ -900,9 -925,7 +927,9 @@@ void FGNavRadio::search(
      _gs = NULL;
      _dme = NULL;
      nav_id_node->setStringValue("");
 -
 +    loc_node->setBoolValue(false);
 +    has_gs_node->setBoolValue(false);
 +    
      _sgr->remove( nav_fx_name );
      _sgr->remove( dme_fx_name );
    }
  double FGNavRadio::localizerWidth(FGNavRecord* aLOC)
  {
    FGRunway* rwy = aLOC->runway();
 -  assert(rwy);
 +  if (!rwy) {
 +    return 6.0; // no runway associated, return default value
 +  }
 +  
    
    SGVec3d thresholdCart(SGVec3d::fromGeod(rwy->threshold()));
    double axisLength = dist(aLOC->cart(), thresholdCart);