diff --git a/src/lib/ebus/message.cpp b/src/lib/ebus/message.cpp index ed8aa0a4..107594f4 100644 --- a/src/lib/ebus/message.cpp +++ b/src/lib/ebus/message.cpp @@ -244,7 +244,6 @@ result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& ma return RESULT_ERR_INVALID_ARG; // prepare not possible SymbolString master; - master.clear(); result_t result = master.push_back(srcAddress, false, false); if (result != RESULT_OK) return result; @@ -273,6 +272,24 @@ result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& ma return result; } +result_t Message::prepareSlave(SymbolString& slaveData) +{ + if (m_isPassive == false || m_isSet == true) + return RESULT_ERR_INVALID_ARG; // prepare not possible + + SymbolString slave; + unsigned char addData = m_data->getLength(pt_slaveData); + result_t result = slave.push_back(addData, false, false); + if (result != RESULT_OK) + return result; + istringstream input; + result = m_data->write(input, pt_slaveData, slave, 0); + if (result != RESULT_OK) + return result; + slaveData = SymbolString(slave, true); + return result; +} + result_t Message::decode(const PartType partType, SymbolString& data, ostringstream& output, bool leadingSeparator, char separator) { diff --git a/src/lib/ebus/message.h b/src/lib/ebus/message.h index b26d240b..b949e4cc 100644 --- a/src/lib/ebus/message.h +++ b/src/lib/ebus/message.h @@ -126,8 +126,9 @@ public: * @return the polling priority, or 0 for no polling at all. */ unsigned char getPollPriority() const { return m_pollPriority; } + /** - * @brief Prepare master @a SymbolString for sending to the bus. + * @brief Prepare the master @a SymbolString for sending a query or command to the bus. * @param masterData the master data @a SymbolString for writing symbols to. * @param input the @a istringstream to parse the formatted value(s) from. * @param separator the separator character between multiple fields. @@ -135,6 +136,14 @@ public: */ result_t prepareMaster(const unsigned char srcAddress, SymbolString& masterData, istringstream& input, char separator=';'); + + /** + * @brief Prepare the slave @a SymbolString for sending an answer to the bus. + * @param slaveData the slave data @a SymbolString for writing symbols to. + * @return @a RESULT_OK on success, or an error code. + */ + result_t prepareSlave(SymbolString& masterData); + /** * @brief Decode a received message. * @param partType the @a PartType of the data.