using std::string;
-
class FGGeneric : public FGProtocol {
public:
~FGGeneric();
bool gen_message();
- bool parse_message(int length);
+ bool parse_message_len(int length);
// open hailing frequencies
bool open();
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 };
+ enum e_type { FG_BOOL=0, FG_INT, FG_FLOAT, FG_DOUBLE, FG_STRING, FG_FIXED, FG_BYTE, FG_WORD };
typedef struct {
// string name;
bool gen_message_binary();
bool parse_message_ascii(int length);
bool parse_message_binary(int length);
- void read_config(SGPropertyNode *root, vector<_serial_prot> &msg);
+ bool read_config(SGPropertyNode *root, vector<_serial_prot> &msg);
bool exitOnError;
+ bool initOk;
+
+ class FGProtocolWrapper * wrapper;
template<class T>
static void updateValue(_serial_prot& prot, const T& val)
if( prot.max > prot.min )
{
if( prot.wrap )
- {
- T range = prot.max - prot.min + 1;
- if( range > 0 )
- {
- while( new_val < prot.min )
- new_val += range;
- while( new_val > prot.max )
- new_val -= range;
- }
- }
+ new_val = SGMisc<double>::normalizePeriodic(prot.min, prot.max, new_val);
else
- new_val = std::min<T>(prot.max, std::max<T>(prot.min, new_val));
+ new_val = SGMisc<T>::clip(new_val, prot.min, prot.max);
}
setValue(prot.prop, new_val);
}
-
- template<class T>
- static const T getValue(SGPropertyNode_ptr& prop);
-
- template<class T>
- static void setValue(SGPropertyNode_ptr& prop, const T& val);
+ // Special handling for bool (relative change = toggle, no min/max, no wrap)
+ static void updateValue(_serial_prot& prot, bool val);
};