X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FNetwork%2FATC-Inputs.cxx;h=2cd849b43573f774bd0872348dd479321f08aadb;hb=e653ed4598dfcfea634470d16b49b97fc87e1840;hp=378f215c8df4fabc8bdc2115375cd1c7a29401e7;hpb=667e64e1ebc86a0c53112b92b53475898f315c36;p=flightgear.git diff --git a/src/Network/ATC-Inputs.cxx b/src/Network/ATC-Inputs.cxx index 378f215c8..2cd849b43 100644 --- a/src/Network/ATC-Inputs.cxx +++ b/src/Network/ATC-Inputs.cxx @@ -42,6 +42,7 @@ #include #include +#include #include
@@ -419,6 +420,7 @@ bool FGATCInput::do_analog_in() { int min = 0; int max = 1023; int deadband = 0; + int hysteresis = 0; float offset = 0.0; float factor = 1.0; if ( cname == "channel" ) { @@ -458,6 +460,10 @@ bool FGATCInput::do_analog_in() { if ( prop != NULL ) { deadband = prop->getIntValue(); } + prop = child->getChild( "hysteresis" ); + if ( prop != NULL ) { + hysteresis = prop->getIntValue(); + } prop = child->getChild( "offset" ); if ( prop != NULL ) { offset = prop->getFloatValue(); @@ -482,6 +488,22 @@ bool FGATCInput::do_analog_in() { { // "Cook" the raw value float scaled_value = 0.0f; + + if ( hysteresis > 0 ) { + int last_raw_value = 0; + prop = child->getChild( "last-raw-value", 0, true ); + last_raw_value = prop->getIntValue(); + + if ( abs(raw_value - last_raw_value) < hysteresis ) + { + // not enough movement stay put + raw_value = last_raw_value; + } else { + // update last raw value + prop->setIntValue( raw_value ); + } + } + if ( center >= 0 ) { scaled_value = scale( center, deadband, min, max, raw_value ); @@ -637,9 +659,13 @@ static void update_switch_matrix( unsigned char switches = switch_data[row]; for( int column = 0; column < ATC_NUM_COLS; ++column ) { - switch_matrix[board][column][row] = switches & 1; - switches = switches >> 1; - } + if ( row < 8 ) { + switch_matrix[board][column][row] = switches & 1; + } else { + switch_matrix[board][row-8][8+column] = switches & 1; + } + switches = switches >> 1; + } } }