added simple ctor, added override dstAddress to prepareMaster()

This commit is contained in:
john30
2014-12-12 23:58:18 +01:00
parent 3ba98c1fba
commit 67549fd787
2 changed files with 40 additions and 8 deletions
+23 -6
View File
@@ -28,10 +28,10 @@
using namespace std; using namespace std;
Message::Message(const string clazz, const string name, const bool isSet, Message::Message(const string clazz, const string name, const bool isSet,
const bool isPassive, const string comment, const bool isPassive, const string comment,
const unsigned char srcAddress, const unsigned char dstAddress, const unsigned char srcAddress, const unsigned char dstAddress,
const vector<unsigned char> id, DataField* data, const vector<unsigned char> id, DataField* data,
const unsigned int pollPriority) const unsigned int pollPriority)
: m_class(clazz), m_name(name), m_isSet(isSet), : m_class(clazz), m_name(name), m_isSet(isSet),
m_isPassive(isPassive), m_comment(comment), m_isPassive(isPassive), m_comment(comment),
m_srcAddress(srcAddress), m_dstAddress(dstAddress), m_srcAddress(srcAddress), m_dstAddress(dstAddress),
@@ -50,6 +50,20 @@ Message::Message(const string clazz, const string name, const bool isSet,
m_key = key; m_key = key;
} }
Message::Message(const bool isSet, const bool isPassive,
const unsigned char pb, const unsigned char sb,
DataField* data)
: m_class(), m_name(), m_isSet(isSet),
m_isPassive(isPassive), m_comment(),
m_srcAddress(SYN), m_dstAddress(SYN),
m_data(data), m_pollPriority(0),
m_lastUpdateTime(0), m_pollCount(0), m_lastPollTime(0)
{
m_id.push_back(pb);
m_id.push_back(sb);
m_key = 0;
}
/** /**
* @brief Helper method for getting a default if the value is empty. * @brief Helper method for getting a default if the value is empty.
* @param value the value to check. * @param value the value to check.
@@ -223,7 +237,7 @@ result_t Message::create(vector<string>::iterator& it, const vector<string>::ite
return RESULT_OK; return RESULT_OK;
} }
result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& masterData, istringstream& input, char separator) result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& masterData, istringstream& input, char separator, const unsigned char dstAddress)
{ {
if (m_isPassive == true) if (m_isPassive == true)
return RESULT_ERR_INVALID_ARG; // prepare not possible return RESULT_ERR_INVALID_ARG; // prepare not possible
@@ -232,7 +246,10 @@ result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& ma
result_t result = master.push_back(srcAddress, false, false); result_t result = master.push_back(srcAddress, false, false);
if (result != RESULT_OK) if (result != RESULT_OK)
return result; return result;
result = master.push_back(m_dstAddress, false, false); if (dstAddress == SYN)
result = master.push_back(m_dstAddress, false, false);
else
result = master.push_back(dstAddress, false, false);
if (result != RESULT_OK) if (result != RESULT_OK)
return result; return result;
result = master.push_back(m_id[0], false, false); result = master.push_back(m_id[0], false, false);
+17 -2
View File
@@ -58,6 +58,18 @@ public:
const unsigned char srcAddress, const unsigned char dstAddress, const unsigned char srcAddress, const unsigned char dstAddress,
const vector<unsigned char> id, DataField* data, const vector<unsigned char> id, DataField* data,
const unsigned int pollPriority); const unsigned int pollPriority);
/**
* @brief Construct a new temporary instance.
* @param isSet whether this is a set message.
* @param isPassive true if message can only be initiated by a participant other than us,
* false if message can be initiated by any participant.
* @param pb the primary ID byte.
* @param sb the secondary ID byte.
* @param data the @a DataField for encoding/decoding the message.
*/
Message(const bool isSet, const bool isPassive,
const unsigned char pb, const unsigned char sb,
DataField* data);
/** /**
* @brief Destructor. * @brief Destructor.
*/ */
@@ -129,13 +141,16 @@ public:
/** /**
* @brief Prepare the master @a SymbolString for sending a query or command to the bus. * @brief Prepare the master @a SymbolString for sending a query or command to the bus.
* @param srcAddress the source address to set.
* @param masterData the master data @a SymbolString for writing symbols to. * @param masterData the master data @a SymbolString for writing symbols to.
* @param input the @a istringstream to parse the formatted value(s) from. * @param input the @a istringstream to parse the formatted value(s) from.
* @param separator the separator character between multiple fields. * @param separator the separator character between multiple fields.
* @param dstAddress the destination address to set, or @a SYN to keep the address defined during construction.
* @return @a RESULT_OK on success, or an error code. * @return @a RESULT_OK on success, or an error code.
*/ */
result_t prepareMaster(const unsigned char srcAddress, SymbolString& masterData, result_t prepareMaster(const unsigned char srcAddress, SymbolString& masterData,
istringstream& input, char separator=UI_FIELD_SEPARATOR); istringstream& input, char separator=UI_FIELD_SEPARATOR,
const unsigned char dstAddress=SYN);
/** /**
* @brief Prepare the slave @a SymbolString for sending an answer to the bus. * @brief Prepare the slave @a SymbolString for sending an answer to the bus.
@@ -199,7 +214,7 @@ private:
/** the destination address. */ /** the destination address. */
const unsigned char m_dstAddress; const unsigned char m_dstAddress;
/** the primary, secondary, and optionally further command ID bytes. */ /** the primary, secondary, and optionally further command ID bytes. */
const vector<unsigned char> m_id; vector<unsigned char> m_id;
/** the key for storing in @a MessageSet. */ /** the key for storing in @a MessageSet. */
unsigned long long m_key; unsigned long long m_key;
/** the @a DataField for encoding/decoding the message. */ /** the @a DataField for encoding/decoding the message. */