From 34ed0b818356b785120b8242ed97f4d2df479113 Mon Sep 17 00:00:00 2001 From: "james.goppert" Date: Tue, 28 Dec 2010 18:50:22 +0000 Subject: [PATCH] Fixed include problem in AP_RcChannel. git-svn-id: https://arducopter.googlecode.com/svn/trunk@1316 f9c3cf11-9bcb-44bc-f272-b75c42450872 --- libraries/AP_Common/AP_Common.h | 101 ++++++++++-------- libraries/AP_EEProm/AP_EEProm.cpp | 2 +- libraries/AP_EEProm/AP_EEProm.h | 12 +-- .../examples/AP_RcChannel/AP_RcChannel.pde | 1 + 4 files changed, 63 insertions(+), 53 deletions(-) diff --git a/libraries/AP_Common/AP_Common.h b/libraries/AP_Common/AP_Common.h index 3ba51201dd..4577ed23b7 100644 --- a/libraries/AP_Common/AP_Common.h +++ b/libraries/AP_Common/AP_Common.h @@ -83,84 +83,93 @@ struct Location { int32_t lng; ///< param 4 - Longitude * 10**7 }; -/** - * The parameter template class. This class - * implements get/set/save/load etc for the - * abstract template type. - */ -template -class AP_Var +/// The AP variable interface. This allows different types +/// of variables to be passed to blocks for floating point +/// math, memory management, etc. +class AP_VarI { public: - /** - * The default constrcutor - */ + + /// Set the variable value as a float + virtual void setF(const float & val) = 0; + + /// Get the variable as a float + virtual const float & getF() = 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(bool sync) = 0; +}; + +/// The variable template class. This class +/// implements get/set/save/load etc for the +/// abstract template type. +template +class AP_Var : public AP_VarI +{ +public: + /// The default constrcutor AP_Var(const type & data, const char * name = "", const bool & sync=false) : _data(data), _name(name), _sync(sync) { } - /** - * Set the variable value - */ - void set(const type & val) { + /// Set the variable value + virtual void set(const type & val) { _data = val; if (_sync) save(); } - /** - * Get the variable value. - */ - const type & get() { + /// Get the variable value. + virtual const type & get() { if (_sync) load(); return _data; } - /** - * Set the variable value as a float - */ - void setAsFloat(const float & val) { + /// Set the variable value as a float + virtual void setF(const float & val) { set(val); } - /** - * Get the variable as a float - */ - const float & getAsFloat() { + /// Get the variable as a float + virtual const float & getF() { return get(); } - - /** - * Save a variable to eeprom - */ + /// Save a variable to eeprom virtual void save() { } - /** - * Load a variable from eeprom - */ + /// Load a variable from eeprom virtual void load() { } - /** - * Get the name. This is useful for ground stations. - */ - const char * getName() { return _name; } + /// Get the name. This is useful for ground stations. + virtual const char * getName() { return _name; } - /** - * If sync is true the a load will always occure before a get and a save will always - * occure before a set. - */ - const bool & getSync() { return _sync; } - void setSync(bool sync) { _sync = sync; } + /// 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(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 */ - bool _sync; /** Whether or not to call save/load on get/set */ + type _data; /// The data that is stored on the heap */ + const char * _name; /// The variable name, useful for gcs and terminal output + bool _sync; /// Whether or not to call save/load on get/set }; //@} diff --git a/libraries/AP_EEProm/AP_EEProm.cpp b/libraries/AP_EEProm/AP_EEProm.cpp index af94053d60..a5e57fcfd9 100644 --- a/libraries/AP_EEProm/AP_EEProm.cpp +++ b/libraries/AP_EEProm/AP_EEProm.cpp @@ -18,7 +18,7 @@ #include -void AP_EEPromRegistry::add(AP_EEPromEntry * entry, uint16_t & id, uint16_t & address, size_t size) +void AP_EEPromRegistry::add(AP_EEPromEntryI * entry, uint16_t & id, uint16_t & address, size_t size) { if (_newAddress + size > _maxSize) return; address = _newAddress; diff --git a/libraries/AP_EEProm/AP_EEProm.h b/libraries/AP_EEProm/AP_EEProm.h index 9b130ae0b7..4f9ade3b24 100644 --- a/libraries/AP_EEProm/AP_EEProm.h +++ b/libraries/AP_EEProm/AP_EEProm.h @@ -25,7 +25,7 @@ #include /// The interface for data entries in the eeprom registry -class AP_EEPromEntry +class AP_EEPromEntryI { public: /// Pure virtual function for setting the data value @@ -49,7 +49,7 @@ public: }; ///The main EEProm Registry class. -class AP_EEPromRegistry : public Vector +class AP_EEPromRegistry : public Vector { public: @@ -60,7 +60,7 @@ public: } /// Add an entry to the registry - void add(AP_EEPromEntry * entry, uint16_t & id, uint16_t & address, size_t size); + void add(AP_EEPromEntryI * entry, uint16_t & id, uint16_t & address, size_t size); private: uint16_t _newAddress; /// the address for the next new variable @@ -75,7 +75,7 @@ extern AP_EEPromRegistry eepromRegistry; /// This class implements get/set/save/load etc for the /// abstract template type. template -class AP_EEPromVar : public AP_EEPromEntry, public AP_Var +class AP_EEPromVar : public AP_EEPromEntryI, public AP_Var { public: /// The default constrcutor @@ -85,8 +85,8 @@ public: eepromRegistry.add(this,_id,_address,sizeof(type)); } - virtual void setEntry(float val) { this->setAsFloat(val); } - virtual float getEntry() { return this->getAsFloat(); } + virtual void setEntry(float val) { this->setF(val); } + virtual float getEntry() { return this->getF(); } virtual const char * getEntryName() { return this->getName(); } /// Get the id of the variable. diff --git a/libraries/AP_RcChannel/examples/AP_RcChannel/AP_RcChannel.pde b/libraries/AP_RcChannel/examples/AP_RcChannel/AP_RcChannel.pde index 59751737a8..0a51f9810e 100644 --- a/libraries/AP_RcChannel/examples/AP_RcChannel/AP_RcChannel.pde +++ b/libraries/AP_RcChannel/examples/AP_RcChannel/AP_RcChannel.pde @@ -9,6 +9,7 @@ #include #include // ArduPilot Mega RC Library #include +#include AP_EEPromVar scale(45.0,"RC1_SCALE"); AP_EEPromVar pwmMin(1000,"RC1_PWMMIN");