X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fgeneric.hxx;h=18493651cb1d3fb64badf305f7ad7d5a666eaab0;hb=cff6b2034de866df70a2b29feb3383ee8ccbbef6;hp=4d4ec7e43d80786dbfc5b9e8603604df22940535;hpb=a9c47a7b789fee91a8fb96cb7f3afe6e0b8a32f2;p=flightgear.git diff --git a/src/Network/generic.hxx b/src/Network/generic.hxx index 4d4ec7e43..18493651c 100644 --- a/src/Network/generic.hxx +++ b/src/Network/generic.hxx @@ -42,11 +42,13 @@ public: ~FGGeneric(); bool gen_message(); - bool parse_message(); + bool parse_message_len(int length); // open hailing frequencies bool open(); + void reinit(); + // process work for this port bool process(); @@ -55,6 +57,7 @@ public: void setExitOnError(bool val) { exitOnError = val; } bool getExitOnError() { return exitOnError; } + bool getInitOk(void) { return initOk; } protected: enum e_type { FG_BOOL=0, FG_INT, FG_FLOAT, FG_DOUBLE, FG_STRING, FG_FIXED }; @@ -65,11 +68,17 @@ protected: e_type type; double offset; double factor; + double min, max; + bool wrap; + bool rel; SGPropertyNode_ptr prop; } _serial_prot; private: + string file_name; + string direction; + int length; char buf[ FG_MAX_MSG_SIZE ]; @@ -90,10 +99,32 @@ private: bool gen_message_ascii(); bool gen_message_binary(); - bool parse_message_ascii(); - bool parse_message_binary(); - void read_config(SGPropertyNode *root, vector<_serial_prot> &msg); + bool parse_message_ascii(int length); + bool parse_message_binary(int length); + bool read_config(SGPropertyNode *root, vector<_serial_prot> &msg); bool exitOnError; + bool initOk; + + template + static void updateValue(_serial_prot& prot, const T& val) + { + T new_val = (prot.rel ? getValue(prot.prop) : 0) + + prot.offset + + prot.factor * val; + + if( prot.max > prot.min ) + { + if( prot.wrap ) + new_val = SGMisc::normalizePeriodic(prot.min, prot.max, new_val); + else + new_val = SGMisc::clip(new_val, prot.min, prot.max); + } + + setValue(prot.prop, new_val); + } + + // Special handling for bool (relative change = toggle, no min/max, no wrap) + static void updateValue(_serial_prot& prot, bool val); };