You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.8 KiB
157 lines
3.8 KiB
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*- |
|
// |
|
// This is free software; you can redistribute it and/or modify it under |
|
// the terms of the GNU Lesser General Public License as published by the |
|
// Free Software Foundation; either version 2.1 of the License, or (at |
|
// your option) any later version. |
|
// |
|
/// The AP variable interface. This allows different types |
|
/// of variables to be passed to blocks for floating point |
|
/// math, memory management, etc. |
|
|
|
#ifndef AP_Var_H |
|
#define AP_Var_H |
|
|
|
#include <inttypes.h> |
|
|
|
class AP_VarI |
|
{ |
|
public: |
|
|
|
/// Set the variable value as a float |
|
virtual void setF(const float & val) = 0; |
|
|
|
/// Get the variable value as a float |
|
virtual const float getF() = 0; |
|
|
|
/// Set the variable value as an int16 |
|
virtual void setI(const int16_t & val) = 0; |
|
|
|
/// Get the variable value as an int16 |
|
virtual const int16_t getI() = 0; |
|
|
|
/// Set the variable value as a bool |
|
virtual void setB(const bool & val) = 0; |
|
|
|
/// Get the variable value as an bool |
|
virtual const bool getB() = 0; |
|
|
|
/// Save a variable to eeprom |
|
virtual void save() = 0; |
|
|
|
/// Load a variable from eeprom |
|
virtual void load() = 0; |
|
|
|
/// Get the name. This is useful for ground stations. |
|
virtual const char * getName() = 0; |
|
|
|
/// If sync is true the a load will always occure before a get and a save will always |
|
/// occure before a set. |
|
virtual const bool & getSync() = 0; |
|
|
|
/// Set the sync property |
|
virtual void setSync(const bool & sync) = 0; |
|
}; |
|
|
|
/// The variable template class. This class |
|
/// implements get/set/save/load etc for the |
|
/// abstract template type. |
|
template <class type> |
|
class AP_Var : public AP_VarI |
|
{ |
|
public: |
|
/// The default constrcutor |
|
AP_Var(const type & data, const char * name = "", const char * parentName = "", const bool & sync=false) : |
|
_data(data), _name(name), _parentName(parentName), _sync(sync) |
|
{ |
|
} |
|
|
|
/// float copy constructor |
|
AP_Var(AP_VarI & v) |
|
{ |
|
setF(v.getF()); |
|
} |
|
|
|
/// Set the variable value |
|
void set(const type & val) { |
|
_data = val; |
|
if (_sync) save(); |
|
} |
|
|
|
/// Get the variable value. |
|
const type & get() { |
|
if (_sync) load(); |
|
return _data; |
|
} |
|
|
|
/// Set the variable value as a float |
|
virtual void setF(const float & val) { |
|
set(val); |
|
} |
|
|
|
/// Get the variable as a float |
|
virtual const float getF() { |
|
return get(); |
|
} |
|
|
|
/// Set the variable value as an Int16 |
|
virtual void setI(const int16_t & val) { |
|
set(val); |
|
} |
|
|
|
/// Get the variable value as an Int16 |
|
virtual const int16_t getI() { |
|
return get(); |
|
} |
|
|
|
/// Set the variable value as an Int16 |
|
virtual void setB(const bool & val) { |
|
set(val); |
|
} |
|
|
|
/// Get the variable value as an Int16 |
|
virtual const bool getB() { |
|
return get(); |
|
} |
|
|
|
/// Save a variable to eeprom |
|
virtual void save() |
|
{ |
|
} |
|
|
|
/// Load a variable from eeprom |
|
virtual void load() |
|
{ |
|
} |
|
|
|
/// Get the name. This is useful for ground stations. |
|
virtual const char * getName() { return _name; } |
|
|
|
/// Get the parent name. This is also useful for ground stations. |
|
virtual const char * getParentName() { return _parentName; } |
|
|
|
/// If sync is true the a load will always occure before a get and a save will always |
|
/// occure before a set. |
|
virtual const bool & getSync() { return _sync; } |
|
virtual void setSync(const bool & sync) { _sync = sync; } |
|
|
|
protected: |
|
type _data; /// The data that is stored on the heap */ |
|
const char * _name; /// The variable name, useful for gcs and terminal output |
|
const char * _parentName; /// The variable parent name, useful for gcs and terminal output |
|
bool _sync; /// Whether or not to call save/load on get/set |
|
}; |
|
|
|
typedef AP_Var<float> AP_Float; |
|
typedef AP_Var<int8_t> AP_Int8; |
|
typedef AP_Var<uint8_t> AP_Uint8; |
|
typedef AP_Var<int16_t> AP_Int16; |
|
typedef AP_Var<uint16_t> AP_Uint16; |
|
typedef AP_Var<int32_t> AP_Int32; |
|
typedef AP_Var<uint32_t> AP_Unt32; |
|
typedef AP_Var<bool> AP_Bool; |
|
|
|
extern AP_Int8 AP_unity; |
|
extern AP_Int8 AP_negativeUnity; |
|
|
|
#endif // AP_Var_H
|
|
|