]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/mag_compass.cxx
Make hardcoded error values configurable.
[flightgear.git] / src / Instrumentation / mag_compass.cxx
index d3d15e5c10e3d1759c5b1be5d9da86c03ced14f8..223c777087e79fe36b46ebdf17d06775c512779d 100644 (file)
 MagCompass::MagCompass ( SGPropertyNode *node )
     : _error_deg(0.0),
       _rate_degps(0.0),
-      name("magnetic-compass"),
-      num(0)
-{
-    int i;
-    for ( i = 0; i < node->nChildren(); ++i ) {
-        SGPropertyNode *child = node->getChild(i);
-        string cname = child->getName();
-        string cval = child->getStringValue();
-        if ( cname == "name" ) {
-            name = cval;
-        } else if ( cname == "number" ) {
-            num = child->getIntValue();
-        } else {
-            SG_LOG( SG_INSTR, SG_WARN, "Error in magnetic-compass config logic" );
-            if ( name.length() ) {
-                SG_LOG( SG_INSTR, SG_WARN, "Section = " << name );
-            }
-        }
-    }
-}
-
-MagCompass::MagCompass ()
-    : _error_deg(0.0),
-      _rate_degps(0.0)
+      _name(node->getStringValue("name", "magnetic-compass")),
+      _num(node->getIntValue("number", 0))
 {
 }
 
@@ -56,26 +34,18 @@ void
 MagCompass::init ()
 {
     string branch;
-    branch = "/instrumentation/" + name;
+    branch = "/instrumentation/" + _name;
 
-    SGPropertyNode *node = fgGetNode(branch.c_str(), num, true );
+    SGPropertyNode *node = fgGetNode(branch.c_str(), _num, true );
     _serviceable_node = node->getChild("serviceable", 0, true);
-    _roll_node =
-        fgGetNode("/orientation/roll-deg", true);
-    _pitch_node =
-        fgGetNode("/orientation/pitch-deg", true);
-    _heading_node =
-        fgGetNode("/orientation/heading-magnetic-deg", true);
-    _beta_node =
-        fgGetNode("/orientation/side-slip-deg", true);
-    _dip_node =
-        fgGetNode("/environment/magnetic-dip-deg", true);
-    _x_accel_node =
-        fgGetNode("/accelerations/pilot/x-accel-fps_sec", true);
-    _y_accel_node =
-        fgGetNode("/accelerations/pilot/y-accel-fps_sec", true);
-    _z_accel_node =
-        fgGetNode("/accelerations/pilot/z-accel-fps_sec", true);
+    _roll_node = fgGetNode("/orientation/roll-deg", true);
+    _pitch_node = fgGetNode("/orientation/pitch-deg", true);
+    _heading_node = fgGetNode("/orientation/heading-magnetic-deg", true);
+    _beta_node = fgGetNode("/orientation/side-slip-deg", true);
+    _dip_node = fgGetNode("/environment/magnetic-dip-deg", true);
+    _x_accel_node = fgGetNode("/accelerations/pilot/x-accel-fps_sec", true);
+    _y_accel_node = fgGetNode("/accelerations/pilot/y-accel-fps_sec", true);
+    _z_accel_node = fgGetNode("/accelerations/pilot/z-accel-fps_sec", true);
     _out_node = node->getChild("indicated-heading-deg", 0, true);
 }
 
@@ -94,11 +64,19 @@ MagCompass::update (double delta_time_sec)
     if (!_serviceable_node->getBoolValue())
         return;
 
-                                // jam on excessive sideslip
+    /*
+     * Vassilii: commented out because this way, even when parked,
+     * w/o any accelerations and level, the compass is jammed.
+     * If somebody wants to model jamming, real forces (i.e. accelerations)
+     * and not sideslip angle must be considered.
+     */
+#if 0
+                               // jam on excessive sideslip
     if (fabs(_beta_node->getDoubleValue()) > 12.0) {
         _rate_degps = 0.0;
         return;
     }
+#endif
 
 
     /*