#include <errno.h>
#include <math.h>
-#include STL_STRING
+#include <string>
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/sg_path.hxx>
+#include <simgear/props/props_io.hxx>
#include <Main/fg_props.hxx>
#include "ATC-Inputs.hxx"
-SG_USING_STD(string);
-
+using std::string;
+using std::vector;
// Constructor: The _board parameter specifies which board to
string name = "";
string type = "";
string subtype = "";
- vector <SGPropertyNode *> output_nodes; output_nodes.clear();
+ vector <SGPropertyNode *> output_nodes;
int center = -1;
int min = 0;
int max = 1023;
int deadband = 0;
+ int hysteresis = 0;
float offset = 0.0;
float factor = 1.0;
if ( cname == "channel" ) {
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();
{
// "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 );
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;
+ }
}
}
string cname = child->getName();
string name = "";
string type = "";
- vector <SGPropertyNode *> output_nodes; output_nodes.clear();
+ vector <SGPropertyNode *> output_nodes;
int row = -1;
int col = -1;
float factor = 1.0;
if ( cname == "switch" ) {
string name = "";
string type = "";
- vector <SGPropertyNode *> output_nodes; output_nodes.clear();
+ vector <SGPropertyNode *> output_nodes;
int byte_num = -1;
int right_shift = 0;
int mask = 0xff;