X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2FATC-Inputs.cxx;h=4c6164928d1474ce6b6f41727b17a821975f56d2;hb=c1f250fd3340acb6b74603ba71771b441d7e7bb3;hp=2f63b1be462098884fb150f2cc7bb33cfc6337fe;hpb=bf4aa941be99604a0e45d8c940cab7e0c1cc115e;p=flightgear.git diff --git a/src/Network/ATC-Inputs.cxx b/src/Network/ATC-Inputs.cxx index 2f63b1be4..4c6164928 100644 --- a/src/Network/ATC-Inputs.cxx +++ b/src/Network/ATC-Inputs.cxx @@ -31,11 +31,17 @@ # include # include # include +# include +# include #endif +#include +#include + #include STL_STRING #include +#include #include
@@ -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 ); }