]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/ATC-Inputs.cxx
IRIX fixes.
[flightgear.git] / src / Network / ATC-Inputs.cxx
index 2f63b1be462098884fb150f2cc7bb33cfc6337fe..4c6164928d1474ce6b6f41727b17a821975f56d2 100644 (file)
 #  include <sys/types.h>
 #  include <sys/stat.h>
 #  include <fcntl.h>
+#  include <unistd.h>
+#  include <istream>
 #endif
 
+#include <errno.h>
+#include <math.h>
+
 #include STL_STRING
 
 #include <simgear/debug/logstream.hxx>
+#include <simgear/misc/sg_path.hxx>
 
 #include <Main/fg_props.hxx>
 
@@ -218,18 +224,21 @@ bool FGATCInput::open() {
 /////////////////////////////////////////////////////////////////////
 
 // scale a number between min and max (with center defined) to a scale
-// from -1.0 to 1.0
-static double scale( int center, int min, int max, int value ) {
+// from -1.0 to 1.0.  The deadband value is symmetric, so specifying
+// '1' will give you a deadband of +/-1
+static double scale( int center, int deadband, int min, int max, int value ) {
     // cout << center << " " << min << " " << max << " " << value << " ";
     double result;
     double range;
 
-    if ( value <= center ) {
-        range = center - min;
-        result = (value - center) / range;
+    if ( value <= (center - deadband) ) {
+        range = (center - deadband) - min;
+        result = (value - (center - deadband)) / range;
+    } else if ( value >= (center + deadband) ) {
+        range = max - (center + deadband);
+        result = (value - (center + deadband)) / range;            
     } else {
-        range = max - center;
-        result = (value - center) / range;            
+        result = 0.0;
     }
 
     if ( result < -1.0 ) result = -1.0;
@@ -397,6 +406,7 @@ bool FGATCInput::do_analog_in() {
             int center = -1;
             int min = 0;
             int max = 1023;
+           int deadband = 0;
             float factor = 1.0;
             if ( cname == "channel" ) {
                 SGPropertyNode *prop;
@@ -431,6 +441,10 @@ bool FGATCInput::do_analog_in() {
                 if ( prop != NULL ) {
                     max = prop->getIntValue();
                 }
+                prop = child->getChild( "deadband" );
+                if ( prop != NULL ) {
+                    deadband = prop->getIntValue();
+                }
                 prop = child->getChild( "factor" );
                 if ( prop != NULL ) {
                     factor = prop->getFloatValue();
@@ -452,7 +466,8 @@ bool FGATCInput::do_analog_in() {
                         // "Cook" the raw value
                         float scaled_value = 0.0f;
                         if ( center >= 0 ) {
-                            scaled_value = scale( center, min, max, raw_value );
+                            scaled_value = scale( center, deadband,
+                                                 min, max, raw_value );
                         } else {
                             scaled_value = scale( min, max, raw_value );
                         }
@@ -467,7 +482,8 @@ bool FGATCInput::do_analog_in() {
                     // "Cook" the raw value
                     float scaled_value = 0.0f;
                     if ( center >= 0 ) {
-                        scaled_value = scale( center, min, max, raw_value );
+                        scaled_value = scale( center, deadband,
+                                             min, max, raw_value );
                     } else {
                         scaled_value = scale( min, max, raw_value );
                     }