]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/navradio.cxx
Add normalised heading deflection property to navradio.
[flightgear.git] / src / Instrumentation / navradio.cxx
index d270b98f1eef77f3b57e84fdaf62aaad8fb510a6..b99c539e0d7b0246cdf78f4232593e202c1f0b64 100644 (file)
@@ -74,12 +74,14 @@ FGNavRadio::FGNavRadio(SGPropertyNode *node) :
     inrange_node(NULL),
     signal_quality_norm_node(NULL),
     cdi_deflection_node(NULL),
+    cdi_deflection_norm_node(NULL),
     cdi_xtrack_error_node(NULL),
     cdi_xtrack_hdg_err_node(NULL),
     has_gs_node(NULL),
     loc_node(NULL),
     loc_dist_node(NULL),
     gs_deflection_node(NULL),
+    gs_deflection_norm_node(NULL),
     gs_rate_of_climb_node(NULL),
     gs_dist_node(NULL),
     nav_id_node(NULL),
@@ -181,6 +183,7 @@ FGNavRadio::init ()
     inrange_node = node->getChild("in-range", 0, true);
     signal_quality_norm_node = node->getChild("signal-quality-norm", 0, true);
     cdi_deflection_node = node->getChild("heading-needle-deflection", 0, true);
+    cdi_deflection_norm_node = node->getChild("heading-needle-deflection-norm", 0, true);
     cdi_xtrack_error_node = node->getChild("crosstrack-error-m", 0, true);
     cdi_xtrack_hdg_err_node
         = node->getChild("crosstrack-heading-error-deg", 0, true);
@@ -188,6 +191,7 @@ FGNavRadio::init ()
     loc_node = node->getChild("nav-loc", 0, true);
     loc_dist_node = node->getChild("nav-distance", 0, true);
     gs_deflection_node = node->getChild("gs-needle-deflection", 0, true);
+    gs_deflection_norm_node = node->getChild("gs-needle-deflection-norm", 0, true);
     gs_rate_of_climb_node = node->getChild("gs-rate-of-climb", 0, true);
     gs_dist_node = node->getChild("gs-distance", 0, true);
     nav_id_node = node->getChild("nav-id", 0, true);
@@ -333,10 +337,13 @@ void FGNavRadio::clearOutputs()
 {
   inrange_node->setBoolValue( false );
   cdi_deflection_node->setDoubleValue( 0.0 );
+  cdi_deflection_norm_node->setDoubleValue( 0.0 );
   cdi_xtrack_error_node->setDoubleValue( 0.0 );
   cdi_xtrack_hdg_err_node->setDoubleValue( 0.0 );
   time_to_intercept->setDoubleValue( 0.0 );
   gs_deflection_node->setDoubleValue( 0.0 );
+  gs_deflection_norm_node->setDoubleValue(0.0);
+  
   to_flag_node->setBoolValue( false );
   from_flag_node->setBoolValue( false );
 }
@@ -356,6 +363,7 @@ void FGNavRadio::updateReceiver(double dt)
     _cdiCrossTrackErrorM = 0.0;
     _toFlag = _fromFlag = false;
     _gsNeedleDeflection = 0.0;
+    _gsNeedleDeflectionNorm = 0.0;
     inrange_node->setBoolValue(false);
     return;
   }
@@ -508,6 +516,8 @@ void FGNavRadio::updateGlideSlope(double dt, const SGVec3d& aircraft, double sig
   //SG_CLAMP_RANGE(deflectionAngle, -0.7, 0.7);
   _gsNeedleDeflection = deflectionAngle * 5.0;
   _gsNeedleDeflection *= signal_quality_norm;
+  _gsNeedleDeflectionNorm = (deflectionAngle / 0.7) * signal_quality_norm;
+  SG_CLAMP_RANGE(_gsNeedleDeflectionNorm, -1.0, 1.0);
   
   //////////////////////////////////////////////////////////
   // Calculate desired rate of climb for intercepting the GS
@@ -564,6 +574,7 @@ void FGNavRadio::updateCDI(double dt)
   }
   
   cdi_deflection_node->setDoubleValue(_cdiDeflection);
+  cdi_deflection_norm_node->setDoubleValue(_cdiDeflection * 0.1);
   cdi_xtrack_error_node->setDoubleValue(_cdiCrossTrackErrorM);
 
   //////////////////////////////////////////////////////////
@@ -634,9 +645,11 @@ void FGNavRadio::updateCDI(double dt)
 
   if (!gs_serviceable_node->getBoolValue() ) {
     _gsNeedleDeflection = 0.0;
+    _gsNeedleDeflectionNorm = 0.0;
   }
   gs_deflection_node->setDoubleValue(_gsNeedleDeflection);
-
+  gs_deflection_norm_node->setDoubleValue(_gsNeedleDeflectionNorm);
+  
   last_xtrack_error = _cdiCrossTrackErrorM;
 }