From 1a878694d2d582611d8608faf08e74abb5aa0a28 Mon Sep 17 00:00:00 2001 From: john30 Date: Sun, 26 Feb 2017 16:31:32 +0100 Subject: [PATCH] made SymbolString master/slave aware and contain only unescaped data, moved CRC tracking and escpaing/enscaping to BusHandler, moved parseInt/parseSignedInt from datatype.h to symbol.h, added new error code for retrival of unexpted symbol after a send to the bus --- src/ebusd/bushandler.cpp | 357 +++++++++++++++---------- src/ebusd/bushandler.h | 48 ++-- src/ebusd/mainloop.cpp | 69 +++-- src/ebusd/states.png | Bin 117631 -> 94330 bytes src/lib/ebus/contrib/test/test_tem.cpp | 20 +- src/lib/ebus/data.h | 8 +- src/lib/ebus/datatype.cpp | 44 --- src/lib/ebus/datatype.h | 40 +-- src/lib/ebus/message.cpp | 88 ++---- src/lib/ebus/message.h | 10 +- src/lib/ebus/result.cpp | 1 + src/lib/ebus/result.h | 5 +- src/lib/ebus/symbol.cpp | 211 +++++++-------- src/lib/ebus/symbol.h | 157 ++++++----- src/lib/ebus/test/test_data.cpp | 22 +- src/lib/ebus/test/test_message.cpp | 14 +- src/lib/ebus/test/test_symbol.cpp | 57 ++-- 17 files changed, 586 insertions(+), 565 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 3d972038..1366ba90 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -46,13 +46,17 @@ const char* getStateCode(BusState state) { case bs_skip: return "skip"; case bs_ready: return "ready"; case bs_sendCmd: return "send command"; + case bs_recvCmdCrc: return "receive command CRC"; case bs_recvCmdAck: return "receive command ACK"; case bs_recvRes: return "receive response"; + case bs_recvResCrc: return "receive response CRC"; case bs_sendResAck: return "send response ACK"; case bs_recvCmd: return "receive command"; case bs_recvResAck: return "receive response ACK"; + case bs_sendCmdCrc: return "send command CRC"; case bs_sendCmdAck: return "send command ACK"; case bs_sendRes: return "send response"; + case bs_sendResCrc: return "send response CRC"; case bs_sendSyn: return "send SYN"; default: return "unknown"; } @@ -181,22 +185,22 @@ bool ActiveBusRequest::notify(result_t result, SymbolString& slave) { logDebug(lf_bus, "read res: %s", slave.getDataStr().c_str()); } m_result = result; - m_slave.addAll(slave, true); + m_slave = slave; return false; } void GrabbedMessage::setLastData(SymbolString& master, SymbolString& slave) { - m_lastMaster.clear(false); - m_lastMaster.addAll(master); - m_lastSlave.clear(false); - m_lastSlave.addAll(slave); + m_lastMaster.clear(); + m_lastMaster = master; + m_lastSlave.clear(); + m_lastSlave = slave; m_count++; } /** * Decode the input @a SymbolString with the specified @a DataType and length. * @param type the @a DataType. - * @param input the unescaped @a SymbolString to read the binary value from. + * @param input the @a SymbolString to read the binary value from. * @param isMaster whether the @a SymbolString is the master part. * @param baseOffset the base offset in the @a SymbolString. * @param length the number of symbols to read. @@ -208,7 +212,7 @@ void GrabbedMessage::setLastData(SymbolString& master, SymbolString& slave) { bool decodeType(DataType* type, SymbolString *input, bool isMaster, unsigned char baseOffset, unsigned char length, unsigned char offsets, ostringstream& output, bool firstOnly = false) { bool first = true; - string in = input->getDataStr(true, true, baseOffset); + string in = input->getDataStr(baseOffset); for (unsigned char offset = 0; offset <= offsets; offset++) { ostringstream out; result_t result = type->readSymbols(*input, isMaster, (unsigned char)(baseOffset+offset), (unsigned char)length, @@ -352,7 +356,7 @@ result_t BusHandler::readFromBus(Message* message, string inputStr, const unsign unsigned char masterAddress = srcAddress == SYN ? m_ownMasterAddress : srcAddress; result_t ret = RESULT_EMPTY; SymbolString master(true); - SymbolString slave(false); + SymbolString slave; for (unsigned char index = 0; index < message->getCount(); index++) { istringstream input(inputStr); ret = message->prepareMaster(masterAddress, master, input, UI_FIELD_SEPARATOR, dstAddress, index); @@ -463,11 +467,13 @@ result_t BusHandler::handleSymbol() { break; case bs_recvCmd: + case bs_recvCmdCrc: case bs_recvCmdAck: timeout = m_slaveRecvTimeout; break; case bs_recvRes: + case bs_recvResCrc: if (m_response.size() > 0 || m_slaveRecvTimeout > SYN_TIMEOUT) { timeout = m_slaveRecvTimeout; } else { @@ -481,28 +487,42 @@ result_t BusHandler::handleSymbol() { case bs_sendCmd: if (m_currentRequest != NULL) { - sendSymbol = m_currentRequest->m_master[m_nextSendPos]; // escaped command + sendSymbol = m_currentRequest->m_master[m_nextSendPos]; // unescaped command + sending = true; + } + break; + + case bs_sendCmdCrc: + if (m_currentRequest != NULL) { + sendSymbol = m_crc; sending = true; } break; case bs_sendResAck: if (m_currentRequest != NULL) { - sendSymbol = m_responseCrcValid ? ACK : NAK; + sendSymbol = m_crcValid ? ACK : NAK; sending = true; } break; case bs_sendCmdAck: if (m_answer) { - sendSymbol = m_commandCrcValid ? ACK : NAK; + sendSymbol = m_crcValid ? ACK : NAK; sending = true; } break; case bs_sendRes: if (m_answer) { - sendSymbol = m_response[m_nextSendPos]; // escaped response + sendSymbol = m_response[m_nextSendPos]; // unescaped response + sending = true; + } + break; + + case bs_sendResCrc: + if (m_currentRequest != NULL) { + sendSymbol = m_crc; sending = true; } break; @@ -516,6 +536,14 @@ result_t BusHandler::handleSymbol() { // send symbol if necessary result_t result; if (sending) { + if (m_state != bs_sendSyn && (sendSymbol == ESC || sendSymbol == SYN)) { + if (m_escape) { + sendSymbol = sendSymbol == ESC ? 0x00 : 0x01; + } else { + m_escape = sendSymbol; + sendSymbol = ESC; + } + } result = m_device->send(sendSymbol); if (result == RESULT_OK) { if (m_state == bs_ready) { @@ -587,7 +615,39 @@ result_t BusHandler::handleSymbol() { return setState(bs_ready, m_state == bs_skip ? RESULT_OK : RESULT_ERR_SYN); } - unsigned int headerLen, crcPos; + switch (m_state) { + case bs_ready: + case bs_recvCmd: + case bs_recvRes: + case bs_sendCmd: + case bs_sendRes: + SymbolString::updateCrc(m_crc, recvSymbol); + break; + default: + break; + } + + if (m_escape) { + // check escape/unescape state + if (sending) { + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + if (sendSymbol == ESC) { + return RESULT_OK; + } + sendSymbol = recvSymbol = m_escape; + } else { + if (recvSymbol > 0x01) { + return setState(bs_skip, RESULT_ERR_ESC); + } + recvSymbol = recvSymbol == 0x00 ? ESC : SYN; + } + m_escape = 0; + } else if (!sending && recvSymbol == ESC) { + m_escape = ESC; + return RESULT_OK; + } switch (m_state) { case bs_noSignal: @@ -617,59 +677,55 @@ result_t BusHandler::handleSymbol() { } setState(m_state, RESULT_ERR_BUS_LOST); // try again later } - result = m_command.push_back(recvSymbol, false); // expect no escaping for master address - if (result < RESULT_OK) { - return setState(bs_skip, result); - } + m_command.push_back(recvSymbol); m_repeat = false; return setState(bs_recvCmd, RESULT_OK); case bs_recvCmd: - headerLen = 4; - // header symbols are never escaped - crcPos = m_command.size() > headerLen ? headerLen + 1 + m_command[headerLen] : 0xff; - result = m_command.push_back(recvSymbol, true, m_command.size() < crcPos); - if (result < RESULT_OK) { - return setState(bs_skip, result); - } - if (result == RESULT_OK && crcPos != 0xff && m_command.size() == crcPos + 1) { // CRC received - unsigned char dstAddress = m_command[1]; - // header symbols are never escaped - m_commandCrcValid = m_command[headerLen + 1 + m_command[headerLen]] == m_command.getCRC(); - if (m_commandCrcValid) { - if (dstAddress == BROADCAST) { - receiveCompleted(); - return setState(bs_skip, RESULT_OK); - } - addSeenAddress(m_command[0]); - if (m_answer && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) { - return setState(bs_sendCmdAck, RESULT_OK); - } - return setState(bs_recvCmdAck, RESULT_OK); - } - if (dstAddress == BROADCAST) { - return setState(bs_skip, RESULT_ERR_CRC); - } - if (m_answer && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) { - return setState(bs_sendCmdAck, RESULT_ERR_CRC); - } - if (m_repeat) { - return setState(bs_skip, RESULT_ERR_CRC); - } - return setState(bs_recvCmdAck, RESULT_ERR_CRC); + m_command.push_back(recvSymbol); + if (m_command.isComplete()) { // all data received + return setState(bs_recvCmdCrc, RESULT_OK); } return RESULT_OK; + case bs_recvCmdCrc: + m_crcValid = recvSymbol == m_crc; + if (m_command[1] == BROADCAST) { + if (m_crcValid) { + receiveCompleted(); + return setState(bs_skip, RESULT_OK); + } + return setState(bs_skip, RESULT_ERR_CRC); + } + if (m_answer) { + unsigned char dstAddress = m_command[1]; + if (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress) { + if (m_crcValid) { + addSeenAddress(m_command[0]); + return setState(bs_sendCmdAck, RESULT_OK); + } + return setState(bs_sendCmdAck, RESULT_ERR_CRC); + } + } + if (m_crcValid) { + addSeenAddress(m_command[0]); + return setState(bs_recvCmdAck, RESULT_OK); + } + if (m_repeat) { + return setState(bs_skip, RESULT_ERR_CRC); + } + return setState(bs_recvCmdAck, RESULT_ERR_CRC); + case bs_recvCmdAck: if (recvSymbol == ACK) { - if (!m_commandCrcValid) { + if (!m_crcValid) { return setState(bs_skip, RESULT_ERR_ACK); } if (m_currentRequest != NULL) { if (isMaster(m_currentRequest->m_master[1])) { return setState(bs_sendSyn, RESULT_OK); } - } else if (isMaster(m_command[1])) { // header symbols are never escaped + } else if (isMaster(m_command[1])) { receiveCompleted(); return setState(bs_skip, RESULT_OK); } @@ -680,6 +736,7 @@ result_t BusHandler::handleSymbol() { if (recvSymbol == NAK) { if (!m_repeat) { m_repeat = true; + m_crc = 0; m_nextSendPos = 0; m_command.clear(); if (m_currentRequest != NULL) { @@ -692,36 +749,34 @@ result_t BusHandler::handleSymbol() { return setState(bs_skip, RESULT_ERR_ACK); case bs_recvRes: - headerLen = 0; - crcPos = m_response.size() > headerLen ? headerLen + 1 + m_response[headerLen] : 0xff; - result = m_response.push_back(recvSymbol, true, m_response.size() < crcPos); - if (result < RESULT_OK) { - return setState(bs_skip, result); - } - if (result == RESULT_OK && crcPos != 0xff && m_response.size() == crcPos + 1) { // CRC received - m_responseCrcValid = m_response[headerLen + 1 + m_response[headerLen]] == m_response.getCRC(); - if (m_responseCrcValid) { - if (m_currentRequest != NULL) { - return setState(bs_sendResAck, RESULT_OK); - } - return setState(bs_recvResAck, RESULT_OK); - } - if (m_repeat) { - if (m_currentRequest != NULL) { - return setState(bs_sendSyn, RESULT_ERR_CRC); - } - return setState(bs_skip, RESULT_ERR_CRC); - } - if (m_currentRequest != NULL) { - return setState(bs_sendResAck, RESULT_ERR_CRC); - } - return setState(bs_recvResAck, RESULT_ERR_CRC); + m_response.push_back(recvSymbol); + if (m_response.isComplete()) { // all data received + return setState(bs_recvResCrc, RESULT_OK); } return RESULT_OK; + case bs_recvResCrc: + m_crcValid = recvSymbol == m_crc; + if (m_crcValid) { + if (m_currentRequest != NULL) { + return setState(bs_sendResAck, RESULT_OK); + } + return setState(bs_recvResAck, RESULT_OK); + } + if (m_repeat) { + if (m_currentRequest != NULL) { + return setState(bs_sendSyn, RESULT_ERR_CRC); + } + return setState(bs_skip, RESULT_ERR_CRC); + } + if (m_currentRequest != NULL) { + return setState(bs_sendResAck, RESULT_ERR_CRC); + } + return setState(bs_recvResAck, RESULT_ERR_CRC); + case bs_recvResAck: if (recvSymbol == ACK) { - if (!m_responseCrcValid) { + if (!m_crcValid) { return setState(bs_skip, RESULT_ERR_ACK); } receiveCompleted(); @@ -738,54 +793,66 @@ result_t BusHandler::handleSymbol() { return setState(bs_skip, RESULT_ERR_ACK); case bs_sendCmd: - if (m_currentRequest != NULL && sending && recvSymbol == sendSymbol) { - // successfully sent - m_nextSendPos++; - if (m_nextSendPos >= m_currentRequest->m_master.size()) { - // master data completely sent - if (m_currentRequest->m_master[1] == BROADCAST) { - return setState(bs_sendSyn, RESULT_OK); - } - m_commandCrcValid = true; - return setState(bs_recvCmdAck, RESULT_OK); - } - return RESULT_OK; + if (!sending || m_currentRequest == NULL) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); } - return setState(bs_skip, RESULT_ERR_INVALID_ARG); + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + m_nextSendPos++; + if (m_nextSendPos >= m_currentRequest->m_master.size()) { + return setState(bs_sendCmdCrc, RESULT_OK); + } + return RESULT_OK; - case bs_sendResAck: - if (m_currentRequest != NULL && sending && recvSymbol == sendSymbol) { - // successfully sent - if (!m_responseCrcValid) { - if (!m_repeat) { - m_repeat = true; - m_response.clear(); - return setState(bs_recvRes, RESULT_ERR_NAK, true); - } - return setState(bs_sendSyn, RESULT_ERR_ACK); - } + case bs_sendCmdCrc: + if (m_currentRequest->m_master[1] == BROADCAST) { return setState(bs_sendSyn, RESULT_OK); } - return setState(bs_skip, RESULT_ERR_INVALID_ARG); + m_crcValid = true; + return setState(bs_recvCmdAck, RESULT_OK); + + case bs_sendResAck: + if (!sending || m_currentRequest == NULL) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); + } + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + if (!m_crcValid) { + if (!m_repeat) { + m_repeat = true; + m_response.clear(); + return setState(bs_recvRes, RESULT_ERR_NAK, true); + } + return setState(bs_sendSyn, RESULT_ERR_ACK); + } + return setState(bs_sendSyn, RESULT_OK); case bs_sendCmdAck: - if (sending && m_answer && recvSymbol == sendSymbol) { - // successfully sent - if (!m_commandCrcValid) { - if (!m_repeat) { - m_repeat = true; - m_command.clear(); - return setState(bs_recvCmd, RESULT_ERR_NAK, true); - } - return setState(bs_skip, RESULT_ERR_ACK); - } - if (isMaster(m_command[1])) { - receiveCompleted(); // decode command and store value - return setState(bs_skip, RESULT_OK); + if (!sending || !m_answer) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); + } + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + if (!m_crcValid) { + if (!m_repeat) { + m_repeat = true; + m_crc = 0; + m_command.clear(); + return setState(bs_recvCmd, RESULT_ERR_NAK, true); } + return setState(bs_skip, RESULT_ERR_ACK); + } + if (isMaster(m_command[1])) { + receiveCompleted(); // decode command and store value + return setState(bs_skip, RESULT_OK); + } - m_nextSendPos = 0; - m_repeat = false; + m_nextSendPos = 0; + m_repeat = false; + { Message* message; istringstream input; // TODO create input from database of internal variables message = m_messages->find(m_command); @@ -803,33 +870,45 @@ result_t BusHandler::handleSymbol() { input.str(SCAN_ANSWER); } // build response and store in m_response for sending back to requesting master - m_response.clear(true); // escape while sending response + m_response.clear(); result = message->prepareSlave(input, m_response); if (result != RESULT_OK) { return setState(bs_skip, result); } - return setState(bs_sendRes, RESULT_OK); } - return setState(bs_skip, RESULT_ERR_INVALID_ARG); + return setState(bs_sendRes, RESULT_OK); case bs_sendRes: - if (sending && m_answer && recvSymbol == sendSymbol) { - // successfully sent - m_nextSendPos++; - if (m_nextSendPos >= m_response.size()) { - // slave data completely sent - return setState(bs_recvResAck, RESULT_OK); - } - return RESULT_OK; + if (!sending || !m_answer) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); } - return setState(bs_skip, RESULT_ERR_INVALID_ARG); + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + m_nextSendPos++; + if (m_nextSendPos >= m_response.size()) { + // slave data completely sent + return setState(bs_sendResCrc, RESULT_OK); + } + return RESULT_OK; + + case bs_sendResCrc: + if (!sending || m_currentRequest == NULL) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); + } + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + return setState(bs_recvResAck, RESULT_OK); case bs_sendSyn: - if (sending && recvSymbol == sendSymbol) { - // successfully sent - return setState(bs_skip, RESULT_OK); + if (!sending) { + return setState(bs_skip, RESULT_ERR_INVALID_ARG); } - return setState(bs_skip, RESULT_ERR_INVALID_ARG); + if (recvSymbol != sendSymbol) { + return setState(bs_skip, RESULT_ERR_SYMBOL); + } + return setState(bs_skip, RESULT_OK); } return RESULT_OK; } @@ -863,7 +942,7 @@ result_t BusHandler::setState(BusState state, result_t result, bool firstRepetit } if (state == bs_noSignal) { // notify all requests - m_response.clear(false); // notify with empty response + m_response.clear(); // notify with empty response while ((m_currentRequest = m_nextRequests.pop()) != NULL) { bool restart = m_currentRequest->notify(RESULT_ERR_NO_SIGNAL, m_response); if (restart) { // should not occur with no signal @@ -877,6 +956,7 @@ result_t BusHandler::setState(BusState state, result_t result, bool firstRepetit } } + m_escape = 0; if (state == m_state) { return result; } @@ -895,12 +975,13 @@ result_t BusHandler::setState(BusState state, result_t result, bool firstRepetit if (state == bs_ready || state == bs_skip) { m_command.clear(); - m_commandCrcValid = false; - m_response.clear(false); // unescape while receiving response - m_responseCrcValid = false; + m_crc = 0; + m_crcValid = false; + m_response.clear(); m_nextSendPos = 0; + } else if (state == bs_recvRes || state == bs_sendRes) { + m_crc = 0; } - return result; } @@ -1182,7 +1263,7 @@ result_t BusHandler::scanAndWait(unsigned char dstAddress, SymbolString& slave) return RESULT_ERR_NOTFOUND; } istringstream input; - SymbolString master; + SymbolString master(true); result_t result = scanMessage->prepareMaster(m_ownMasterAddress, master, input, UI_FIELD_SEPARATOR, dstAddress); if (result == RESULT_OK) { result = sendAndWait(master, slave); diff --git a/src/ebusd/bushandler.h b/src/ebusd/bushandler.h index 95944c45..58d91c01 100644 --- a/src/ebusd/bushandler.h +++ b/src/ebusd/bushandler.h @@ -66,13 +66,17 @@ enum BusState { bs_skip, //!< skip all symbols until next @a SYN bs_ready, //!< ready for next master (after @a SYN symbol, send/receive QQ) bs_recvCmd, //!< receive command (ZZ, PBSB, master data) [passive set] + bs_recvCmdCrc, //!< receive command CRC [passive set] bs_recvCmdAck, //!< receive command ACK/NACK [passive set + active set+get] bs_recvRes, //!< receive response (slave data) [passive set + active get] + bs_recvResCrc, //!< receive response CRC [passive set + active get] bs_recvResAck, //!< receive response ACK/NACK [passive set] bs_sendCmd, //!< send command (ZZ, PBSB, master data) [active set+get] + bs_sendCmdCrc, //!< send command CRC [active set+get] bs_sendResAck, //!< send response ACK/NACK [active get] bs_sendCmdAck, //!< send command ACK/NACK [passive get] bs_sendRes, //!< send response (slave data) [passive get] + bs_sendResCrc, //!< send response CRC [passive get] bs_sendSyn, //!< send SYN for completed transfer [active set+get] }; @@ -102,7 +106,7 @@ class BusRequest { public: /** * Constructor. - * @param master the escaped master data @a SymbolString to send. + * @param master the master data @a SymbolString to send. * @param deleteOnFinish whether to automatically delete this @a BusRequest when finished. */ BusRequest(SymbolString& master, const bool deleteOnFinish) @@ -124,7 +128,7 @@ class BusRequest { protected: - /** the escaped master data @a SymbolString to send. */ + /** the master data @a SymbolString to send. */ SymbolString& m_master; /** the number of times a send is repeated due to lost arbitration. */ @@ -166,8 +170,8 @@ class PollRequest : public BusRequest { private: - /** the escaped master data @a SymbolString. */ - SymbolString m_master; + /** the master data @a SymbolString. */ + SymbolString m_master{true}; /** the associated @a Message. */ Message* m_message; @@ -218,8 +222,8 @@ class ScanRequest : public BusRequest { /** the @a MessageMap instance. */ MessageMap* m_messageMap; - /** the escaped master data @a SymbolString. */ - SymbolString m_master; + /** the master data @a SymbolString. */ + SymbolString m_master{true}; /** the currently queried @a Message. */ Message* m_message; @@ -253,7 +257,7 @@ class ActiveBusRequest : public BusRequest { public: /** * Constructor. - * @param master the escaped master data @a SymbolString to send. + * @param master the master data @a SymbolString to send. * @param slave reference to @a SymbolString for filling in the received slave data. */ ActiveBusRequest(SymbolString& master, SymbolString& slave) @@ -292,8 +296,8 @@ class GrabbedMessage { * @param other the @a GrabbedMessage to copy from. */ GrabbedMessage(const GrabbedMessage& other) : m_count(other.m_count) { - m_lastMaster.addAll(other.m_lastMaster); - m_lastSlave.addAll(other.m_lastSlave); + m_lastMaster = other.m_lastMaster; + m_lastSlave = other.m_lastSlave; } /** @@ -364,8 +368,7 @@ class BusHandler : public WaitThread { m_pollInterval(pollInterval), m_lastReceive(0), m_lastPoll(0), m_currentRequest(NULL), m_runningScans(0), m_nextSendPos(0), m_symPerSec(0), m_maxSymPerSec(0), - m_state(bs_noSignal), m_repeat(false), - m_command(false), m_commandCrcValid(false), m_response(false), m_responseCrcValid(false), + m_state(bs_noSignal), m_escape(0), m_crc(0), m_crcValid(false), m_repeat(false), m_grabMessages(true) { memset(m_seenAddresses, 0, sizeof(m_seenAddresses)); } @@ -398,7 +401,7 @@ class BusHandler : public WaitThread { /** * Send a message on the bus and wait for the answer. - * @param master the escaped @a SymbolString with the master data to send. + * @param master the @a SymbolString with the master data to send. * @param slave the @a SymbolString that will be filled with retrieved slave data. * @return the result code. */ @@ -632,21 +635,24 @@ class BusHandler : public WaitThread { /** the current @a BusState. */ BusState m_state; + /** 0 when not escaping/unescaping, or @a ESC when receiving, or the original value when sending. */ + unsigned char m_escape; + + /** the calculated CRC. */ + unsigned char m_crc; + + /** whether the CRC matched. */ + bool m_crcValid; + /** whether the current message part is being repeated. */ bool m_repeat; - /** the unescaped received command. */ - SymbolString m_command; + /** the received command. */ + SymbolString m_command{true}; - /** whether the command CRC is valid. */ - bool m_commandCrcValid; - - /** the unescaped received response or escaped response to send. */ + /** the received response or response to send. */ SymbolString m_response; - /** whether the response CRC is valid. */ - bool m_responseCrcValid; - /** the participating bus addresses seen so far (0 if not seen yet, or combination of @a SEEN bits). */ unsigned char m_seenAddresses[256]; diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index adead1ca..a4a02c51 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -233,7 +233,7 @@ void MainLoop::run() { result = m_busHandler->startScan(true, "*"); } else { logNotice(lf_main, "starting initial scan for %2.2x", m_initialScan); - SymbolString slave(false); + SymbolString slave; result = m_busHandler->scanAndWait(m_initialScan, slave); Message* message = m_messages->getScanMessage(m_initialScan); if (result == RESULT_OK && message != NULL) { @@ -257,7 +257,7 @@ void MainLoop::run() { taskDelay = 5; lastScanAddress = 0; } else { - SymbolString slave(false); + SymbolString slave; if (scanned) { Message* message = m_messages->getScanMessage(lastScanAddress); slave = message->getLastSlaveData(); @@ -486,13 +486,14 @@ result_t MainLoop::parseHexMaster(vector &args, size_t argPos, SymbolStr } result_t ret; unsigned int length = parseInt(msg.str().substr(3*2, 2).c_str(), 16, 0, MAX_POS, ret); - if (ret == RESULT_OK && (4+length)*2 != msg.str().size()) { + if (ret != RESULT_OK) { + return ret; + } + if ((4+length)*2 != msg.str().size()) { return RESULT_ERR_INVALID_ARG; } - ret = master.push_back(srcAddress == SYN ? m_address : srcAddress, false); - if (ret == RESULT_OK) { - ret = master.parseHex(msg.str()); - } + master.push_back(srcAddress == SYN ? m_address : srcAddress); + ret = master.parseHex(msg.str()); if (ret == RESULT_OK && !isValidAddress(master[1])) { ret = RESULT_ERR_INVALID_ADDR; } @@ -613,18 +614,18 @@ string MainLoop::executeRead(vector &args, const string levels) { time(&now); if (hex && argPos > 0) { - SymbolString cacheMaster(false); - result_t ret = parseHexMaster(args, argPos, cacheMaster, srcAddress); + SymbolString master(true); + result_t ret = parseHexMaster(args, argPos, master, srcAddress); if (ret != RESULT_OK) { return getResultCode(ret); } - if (cacheMaster[1] == BROADCAST || isMaster(cacheMaster[1])) { + if (master[1] == BROADCAST || isMaster(master[1])) { return getResultCode(RESULT_ERR_INVALID_ARG); } - logNotice(lf_main, "read hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); + logNotice(lf_main, "read hex cmd: %s", master.getDataStr().c_str()); // find message - Message* message = m_messages->find(cacheMaster, false, true, false, false); + Message* message = m_messages->find(master, false, true, false, false); if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); @@ -643,17 +644,15 @@ string MainLoop::executeRead(vector &args, const string levels) { || (message->isPassive() && message->getLastUpdateTime() != 0))) { SymbolString& slave = message->getLastSlaveData(); logNotice(lf_main, "hex read %s %s from cache", message->getCircuit().c_str(), message->getName().c_str()); - return slave.getDataStr(true, false); + return slave.getDataStr(); } // send message - SymbolString master(true); - master.addAll(cacheMaster); - SymbolString slave(false); + SymbolString slave; ret = m_busHandler->sendAndWait(master, slave); if (ret == RESULT_OK) { - ret = message->storeLastData(cacheMaster, slave); + ret = message->storeLastData(master, slave); ostringstream result; if (ret == RESULT_OK) { ret = message->decodeLastData(result); @@ -665,7 +664,7 @@ string MainLoop::executeRead(vector &args, const string levels) { logError(lf_main, "read hex %s %s cache update: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); } - return slave.getDataStr(true, false); + return slave.getDataStr(); } logError(lf_main, "read hex %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); @@ -822,15 +821,15 @@ string MainLoop::executeWrite(vector &args, const string levels) { } if (hex && argPos > 0) { - SymbolString cacheMaster(false); - result_t ret = parseHexMaster(args, argPos, cacheMaster, srcAddress); + SymbolString master(true); + result_t ret = parseHexMaster(args, argPos, master, srcAddress); if (ret != RESULT_OK) { return getResultCode(ret); } - logNotice(lf_main, "write hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); + logNotice(lf_main, "write hex cmd: %s", master.getDataStr().c_str()); // find message - Message* message = m_messages->find(cacheMaster, false, false, true, false); + Message* message = m_messages->find(master, false, false, true, false); if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); @@ -845,14 +844,12 @@ string MainLoop::executeWrite(vector &args, const string levels) { return getResultCode(RESULT_ERR_INVALID_ARG); // non-matching circuit } // send message - SymbolString master(true); - master.addAll(cacheMaster); - SymbolString slave(false); + SymbolString slave; ret = m_busHandler->sendAndWait(master, slave); if (ret == RESULT_OK) { // also update read messages - ret = message->storeLastData(cacheMaster, slave); + ret = message->storeLastData(master, slave); ostringstream result; if (ret == RESULT_OK) { ret = message->decodeLastData(result); @@ -870,7 +867,7 @@ string MainLoop::executeWrite(vector &args, const string levels) { if (isMaster(master[1])) { return getResultCode(RESULT_OK); } - return slave.getDataStr(true, false); + return slave.getDataStr(); } logError(lf_main, "write hex %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); @@ -959,17 +956,15 @@ string MainLoop::executeHex(vector &args) { } if (argPos > 0) { - SymbolString cacheMaster(false); - result_t ret = parseHexMaster(args, argPos, cacheMaster, srcAddress); + SymbolString master(true); + result_t ret = parseHexMaster(args, argPos, master, srcAddress); if (ret != RESULT_OK) { return getResultCode(ret); } - logNotice(lf_main, "hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); + logNotice(lf_main, "hex cmd: %s", master.getDataStr().c_str()); // send message - SymbolString master(true); - master.addAll(cacheMaster); - SymbolString slave(false); + SymbolString slave; ret = m_busHandler->sendAndWait(master, slave); if (ret == RESULT_OK) { @@ -979,7 +974,7 @@ string MainLoop::executeHex(vector &args) { if (isMaster(master[1])) { return getResultCode(RESULT_OK); } - return slave.getDataStr(true, false); + return slave.getDataStr(); } logError(lf_main, "hex: %s", getResultCode(ret)); return getResultCode(ret); @@ -1171,13 +1166,13 @@ string MainLoop::executeFind(vector &args, string levels) { result << "no data stored"; } else if (hexFormat) { result << message->getLastMasterData().getDataStr() - << " / " << message->getLastSlaveData().getDataStr(true, false); + << " / " << message->getLastSlaveData().getDataStr(); } else { result_t ret = message->decodeLastData(result, verbosity); if (ret != RESULT_OK) { result << " (" << getResultCode(ret) << " for " << message->getLastMasterData().getDataStr() - << " / " << message->getLastSlaveData().getDataStr(true, false) << ")"; + << " / " << message->getLastSlaveData().getDataStr() << ")"; } } if (verbosity == (OF_NAMES|OF_UNITS|OF_COMMENTS)) { @@ -1310,7 +1305,7 @@ string MainLoop::executeScan(vector &args, string levels) { if (result != RESULT_OK) { return getResultCode(result); } - SymbolString slave(false); + SymbolString slave; result = m_busHandler->scanAndWait(dstAddress, slave); if (result != RESULT_OK) { return getResultCode(result); diff --git a/src/ebusd/states.png b/src/ebusd/states.png index 1a9cc6e7e8c724b8c7181a581c4761dbc0f33854..e6f172a0e5b9ae51ee8b7562dd333198acba952a 100644 GIT binary patch literal 94330 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
#z%QkE3; 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 ret || ret > maxValue) { - result = RESULT_ERR_OUT_OF_RANGE; // invalid value - return 0; - } - if (length != NULL) { - *length = (unsigned int)(strEnd - str); - } - result = RESULT_OK; - return (unsigned int)ret; -} - -int parseSignedInt(const char* str, int base, const int minValue, const int maxValue, result_t& result, - unsigned int* length) { - char* strEnd = NULL; - - long ret = strtol(str, &strEnd, base); - - if (strEnd == NULL || *strEnd != 0) { - result = RESULT_ERR_INVALID_NUM; // invalid value - return 0; - } - - if (minValue > ret || ret > maxValue) { - result = RESULT_ERR_OUT_OF_RANGE; // invalid value - return 0; - } - if (length != NULL) { - *length = (unsigned int)(strEnd - str); - } - result = RESULT_OK; - return static_cast(ret); -} - void printErrorPos(ostream& out, vector::iterator begin, const vector::iterator end, vector::iterator pos, string filename, size_t lineNo, result_t result) { if (pos > begin) { diff --git a/src/lib/ebus/datatype.h b/src/lib/ebus/datatype.h index 658d51c6..59e9e639 100644 --- a/src/lib/ebus/datatype.h +++ b/src/lib/ebus/datatype.h @@ -123,7 +123,8 @@ enum PartType { /** bit flag for @a DataType: value may not be NULL. */ #define REQ 0x40 -/** bit flag for @a DataType: binary representation is hex converted to decimal and interpreted as 2 digits (also requires #BCD). */ +/** bit flag for @a DataType: binary representation is hex converted to decimal and interpreted as 2 digits + * (also requires #BCD). */ #define HCD 0x80 /** bit flag for @a DataType: exponential numeric representation. */ @@ -142,32 +143,6 @@ enum PartType { #define CON 0x1000 -/** - * Parse an unsigned int value. - * @param str the string to parse. - * @param base the numerical base. - * @param minValue the minimum resulting value. - * @param maxValue the maximum resulting value. - * @param result the variable in which to store an error code when parsing failed or the value is out of bounds. - * @param length the optional variable in which to store the number of read characters. - * @return the parsed value. - */ -unsigned int parseInt(const char* str, int base, const unsigned int minValue, const unsigned int maxValue, - result_t& result, unsigned int* length = NULL); - -/** - * Parse a signed int value. - * @param str the string to parse. - * @param base the numerical base. - * @param minValue the minimum resulting value. - * @param maxValue the maximum resulting value. - * @param result the variable in which to store an error code when parsing failed or the value is out of bounds. - * @param length the optional variable in which to store the number of read characters. - * @return the parsed value. - */ -int parseSignedInt(const char* str, int base, const int minValue, const int maxValue, result_t& result, - unsigned int* length = NULL); - /** * Print the error position of the iterator. * @param out the @a ostream to print to. @@ -253,7 +228,7 @@ class DataType { /** * Internal method for reading the numeric raw value from a @a SymbolString. - * @param input the unescaped @a SymbolString to read the binary value from. + * @param input the @a SymbolString to read the binary value from. * @param offset the offset in the @a SymbolString. * @param length the number of symbols to read. * @param value the variable in which to store the numeric raw value. @@ -265,7 +240,7 @@ class DataType { /** * Internal method for reading the field from a @a SymbolString. - * @param input the unescaped @a SymbolString to read the binary value from. + * @param input the @a SymbolString to read the binary value from. * @param isMaster whether the @a SymbolString is the master part. * @param offset the offset in the @a SymbolString. * @param length the number of symbols to read. @@ -282,7 +257,7 @@ class DataType { * @param input the @a istringstream to parse the formatted value from. * @param offset the offset in the @a SymbolString. * @param length the number of symbols to write, or @a REMAIN_LEN. - * @param output the unescaped @a SymbolString to write the binary value to. + * @param output the @a SymbolString to write the binary value to. * @param isMaster whether the @a SymbolString is the master part. * @param usedLength the variable in which to store the used length in bytes, or NULL. * @return @a RESULT_OK on success, or an error code. @@ -369,7 +344,8 @@ class DateTimeDataType : public DataType { */ DateTimeDataType(const string id, const unsigned char bitCount, const uint16_t flags, const unsigned int replacement, const bool hasDate, const bool hasTime, const int16_t resolution) - : DataType(id, bitCount, flags, replacement), m_hasDate(hasDate), m_hasTime(hasTime), m_resolution(resolution == 0 ? 1 : resolution) {} + : DataType(id, bitCount, flags, replacement), m_hasDate(hasDate), m_hasTime(hasTime), + m_resolution(resolution == 0 ? 1 : resolution) {} /** * Destructor. @@ -521,7 +497,7 @@ class NumberDataType : public DataType { * @param value the numeric raw value to write. * @param offset the offset in the @a SymbolString. * @param length the number of symbols to write, or @a REMAIN_LEN. - * @param output the unescaped @a SymbolString to write the binary value to. + * @param output the @a SymbolString to write the binary value to. * @param usedLength the variable in which to store the used length in bytes, * or NULL. * @return @a RESULT_OK on success, or an error code. diff --git a/src/lib/ebus/message.cpp b/src/lib/ebus/message.cpp index 00c2155b..12103252 100644 --- a/src/lib/ebus/message.cpp +++ b/src/lib/ebus/message.cpp @@ -590,43 +590,29 @@ bool Message::hasField(const char* fieldName, bool numeric) { return m_data->hasField(fieldName, numeric); } -result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& masterData, +result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& master, istringstream& input, char separator, const unsigned char dstAddress, unsigned char index) { if (m_isPassive) { return RESULT_ERR_INVALID_ARG; // prepare not possible } - SymbolString master(false); - result_t result = master.push_back(srcAddress, false, false); - if (result != RESULT_OK) { - return result; - } + master.clear(); + master.push_back(srcAddress); if (dstAddress == SYN) { if (m_dstAddress == SYN) { return RESULT_ERR_INVALID_ADDR; } - result = master.push_back(m_dstAddress, false, false); + master.push_back(m_dstAddress); } else { - result = master.push_back(dstAddress, false, false); + master.push_back(dstAddress); } + master.push_back(m_id[0]); + master.push_back(m_id[1]); + result_t result = prepareMasterPart(master, input, separator, index); if (result != RESULT_OK) { return result; } - result = master.push_back(m_id[0], false, false); - if (result != RESULT_OK) { - return result; - } - result = master.push_back(m_id[1], false, false); - if (result != RESULT_OK) { - return result; - } - result = prepareMasterPart(master, input, separator, index); - if (result != RESULT_OK) { - return result; - } - masterData.clear(); - masterData.addAll(master); - result = storeLastData(pt_masterData, masterData, index); + result = storeLastData(pt_masterData, master, index); if (result < RESULT_OK) { return result; } @@ -638,17 +624,11 @@ result_t Message::prepareMasterPart(SymbolString& master, istringstream& input, return RESULT_ERR_NOTFOUND; } unsigned char pos = master.size(); - result_t result = master.push_back(0, false, false); // length, will be set later - if (result != RESULT_OK) { - return result; - } + master.push_back(0); // length, will be set later for (size_t i = 2; i < m_id.size(); i++) { - result = master.push_back(m_id[i], false, false); - if (result != RESULT_OK) { - return result; - } + master.push_back(m_id[i]); } - result = m_data->write(input, pt_masterData, master, getIdLength(), separator); + result_t result = m_data->write(input, pt_masterData, master, getIdLength(), separator); if (result != RESULT_OK) { return result; } @@ -656,16 +636,13 @@ result_t Message::prepareMasterPart(SymbolString& master, istringstream& input, return result; } -result_t Message::prepareSlave(istringstream& input, SymbolString& slaveData) { +result_t Message::prepareSlave(istringstream& input, SymbolString& slave) { if (m_isWrite) { return RESULT_ERR_INVALID_ARG; // prepare not possible } - SymbolString slave(false); - result_t result = slave.push_back(0, false, false); // length, will be set later - if (result != RESULT_OK) { - return result; - } - result = m_data->write(input, pt_slaveData, slave, 0); + slave.clear(); + slave.push_back(0); // length, will be set later + result_t result = m_data->write(input, pt_slaveData, slave, 0); if (result != RESULT_OK) { return result; } @@ -675,8 +652,6 @@ result_t Message::prepareSlave(istringstream& input, SymbolString& slaveData) { m_lastChangeTime = m_lastUpdateTime; m_lastSlaveData = slave; } - slaveData.clear(); - slaveData.addAll(slave); return result; } @@ -695,7 +670,7 @@ result_t Message::storeLastData(const PartType partType, SymbolString& data, uns time(&m_lastUpdateTime); } if (partType == pt_masterData) { - switch (data.compareMaster(m_lastMasterData)) { + switch (data.compareTo(m_lastMasterData)) { case 1: // completely different m_lastChangeTime = m_lastUpdateTime; m_lastMasterData = data; @@ -903,7 +878,7 @@ ChainedMessage::ChainedMessage(const string circuit, const string level, const s m_lastMasterUpdateTimes = reinterpret_cast(calloc(cnt, sizeof(time_t))); m_lastSlaveUpdateTimes = reinterpret_cast(calloc(cnt, sizeof(time_t))); for (size_t index = 0; index < cnt; index++) { - m_lastMasterDatas[index] = new SymbolString(); + m_lastMasterDatas[index] = new SymbolString(true); m_lastSlaveDatas[index] = new SymbolString(); } } @@ -1000,7 +975,7 @@ result_t ChainedMessage::prepareMasterPart(SymbolString& master, istringstream& if (index >= cnt) { return RESULT_ERR_NOTFOUND; } - SymbolString allData(false); + SymbolString allData(true); result_t result = m_data->write(input, pt_masterData, allData, 0, separator); if (result != RESULT_OK) { return result; @@ -1017,21 +992,12 @@ result_t ChainedMessage::prepareMasterPart(SymbolString& master, istringstream& return RESULT_ERR_INVALID_POS; } vector id = m_ids[index]; - result = master.push_back((unsigned char)(id.size()-2+addData), false, false); // NN - if (result != RESULT_OK) { - return result; - } + master.push_back((unsigned char)(id.size()-2+addData)); // NN for (size_t i = 2; i < id.size(); i++) { - result = master.push_back(id[i], false, false); - if (result != RESULT_OK) { - return result; - } + master.push_back(id[i]); } for (size_t i = 0; i < addData; i++) { - result = master.push_back(allData[pos+i], false, false); - if (result != RESULT_OK) { - return result; - } + master.push_back(allData[pos+i]); } if (index == 0) { for (size_t i = 0; i < cnt; i++) { @@ -1059,7 +1025,7 @@ result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& da return RESULT_ERR_INVALID_ARG; } if (partType == pt_masterData) { - switch (data.compareMaster(*m_lastMasterDatas[index])) { + switch (data.compareTo(*m_lastMasterDatas[index])) { case 1: // completely different *m_lastMasterDatas[index] = data; break; @@ -1098,19 +1064,19 @@ result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& da } } // everything was completely retrieved in short time - SymbolString master(false); - SymbolString slave(false); + SymbolString master(true); + SymbolString slave; size_t offset = 5+(m_ids[0].size()-2); // skip QQ, ZZ, PB, SB, NN for (index = 0; index < m_ids.size(); index++) { SymbolString* add = m_lastMasterDatas[index]; size_t end = 5+(*add)[4]; for (size_t pos = index == 0 ? 0 : offset; pos < end; pos++) { - master.push_back((*add)[pos], false, false); + master.push_back((*add)[pos]); } add = m_lastSlaveDatas[index]; end = 1+(*add)[0]; for (size_t pos = index == 0 ? 0 : 1; pos < end; pos++) { - slave.push_back((*add)[pos], false, false); + slave.push_back((*add)[pos]); } } // adjust NN diff --git a/src/lib/ebus/message.h b/src/lib/ebus/message.h index 297fd5f3..e54817bf 100644 --- a/src/lib/ebus/message.h +++ b/src/lib/ebus/message.h @@ -421,14 +421,14 @@ class Message { /** * 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 master 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. * @param dstAddress the destination address to set, or @a SYN to keep the address defined during construction. * @param index the index of the part to prepare. * @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& master, istringstream& input, char separator = UI_FIELD_SEPARATOR, const unsigned char dstAddress = SYN, unsigned char index = 0); @@ -449,10 +449,10 @@ class Message { /** * Prepare the slave @a SymbolString for sending an answer to the bus. * @param input the @a istringstream to parse the formatted value(s) from. - * @param slaveData the slave data @a SymbolString for writing symbols to. + * @param slave the slave data @a SymbolString for writing symbols to. * @return @a RESULT_OK on success, or an error code. */ - virtual result_t prepareSlave(istringstream& input, SymbolString& slaveData); + virtual result_t prepareSlave(istringstream& input, SymbolString& slave); /** * Store the last seen master and slave data. @@ -631,7 +631,7 @@ class Message { Condition* m_condition; /** the last seen master data. */ - SymbolString m_lastMasterData; + SymbolString m_lastMasterData{true}; /** the last seen slave data. */ SymbolString m_lastSlaveData; diff --git a/src/lib/ebus/result.cpp b/src/lib/ebus/result.cpp index 5acd5676..1489e23b 100644 --- a/src/lib/ebus/result.cpp +++ b/src/lib/ebus/result.cpp @@ -49,6 +49,7 @@ const char* getResultCode(result_t resultCode) { case RESULT_ERR_NAK: return "ERR: NAK received"; case RESULT_ERR_NO_SIGNAL: return "ERR: no signal"; case RESULT_ERR_SYN: return "ERR: SYN received"; + case RESULT_ERR_SYMBOL: return "ERR: wrong symbol received"; case RESULT_ERR_NOTAUTHORIZED: return "ERR: not authorized"; default: diff --git a/src/lib/ebus/result.h b/src/lib/ebus/result.h index c28041ed..a54ef3fc 100644 --- a/src/lib/ebus/result.h +++ b/src/lib/ebus/result.h @@ -33,7 +33,7 @@ namespace ebusd { enum result_t { RESULT_OK = 0, //!< success - RESULT_CONTINUE = 1, //!< more input data is needed (e.g. start of escape sequence received) + RESULT_CONTINUE = 1, //!< more input data is needed RESULT_EMPTY = 2, //!< empty result RESULT_ERR_GENERIC_IO = -1, //!< generic I/O error (usually fatal) @@ -62,8 +62,9 @@ enum result_t { RESULT_ERR_NO_SIGNAL = -22, //!< no signal found on the bus RESULT_ERR_SYN = -23, //!< SYN received instead of answer + RESULT_ERR_SYMBOL = -24, //!< wrong symbol received instead of sent symbol - RESULT_ERR_NOTAUTHORIZED = -24 //!< not authorized for this action + RESULT_ERR_NOTAUTHORIZED = -25 //!< not authorized for this action }; diff --git a/src/lib/ebus/symbol.cpp b/src/lib/ebus/symbol.cpp index 28bd23f9..935b9edd 100644 --- a/src/lib/ebus/symbol.cpp +++ b/src/lib/ebus/symbol.cpp @@ -54,64 +54,103 @@ static const unsigned char CRC_LOOKUP_TABLE[] = { }; -void SymbolString::addAll(const SymbolString& str, bool skipLastSymbol) { - bool addCrc = m_unescapeState == 0; - bool isEscaped = str.m_unescapeState == 0; - vector data = str.m_data; - size_t end = data.size(); - if (end > 0 && skipLastSymbol) { - end--; +unsigned int parseInt(const char* str, int base, const unsigned int minValue, const unsigned int maxValue, + result_t& result, unsigned int* length) { + char* strEnd = NULL; + + unsigned long ret = strtoul(str, &strEnd, base); + + if (strEnd == NULL || strEnd == str || *strEnd != 0) { + result = RESULT_ERR_INVALID_NUM; // invalid value + return 0; } - for (size_t i = 0; i < end; i++) { - push_back(data[i], isEscaped, addCrc); + + if (minValue > ret || ret > maxValue) { + result = RESULT_ERR_OUT_OF_RANGE; // invalid value + return 0; } - if (addCrc) { - push_back(m_crc, false, false); // add CRC + if (length != NULL) { + *length = (unsigned int)(strEnd - str); } + result = RESULT_OK; + return (unsigned int)ret; } -result_t SymbolString::parseHex(const string& str, const bool isEscaped) { - bool addCrc = m_unescapeState == 0; - for (size_t i = 0; i < str.size(); i += 2) { - char* strEnd = NULL; - const char* strBegin = str.substr(i, 2).c_str(); - unsigned long value = strtoul(strBegin, &strEnd, 16); +int parseSignedInt(const char* str, int base, const int minValue, const int maxValue, result_t& result, + unsigned int* length) { + char* strEnd = NULL; - if (strEnd == NULL || strEnd != strBegin+2 || value > 0xff) { - return RESULT_ERR_INVALID_NUM; // invalid value - } - push_back((unsigned char)value, isEscaped, addCrc); + long ret = strtol(str, &strEnd, base); + + if (strEnd == NULL || *strEnd != 0) { + result = RESULT_ERR_INVALID_NUM; // invalid value + return 0; } - if (addCrc) { - push_back(m_crc, false, false); // add CRC + + if (minValue > ret || ret > maxValue) { + result = RESULT_ERR_OUT_OF_RANGE; // invalid value + return 0; + } + if (length != NULL) { + *length = (unsigned int)(strEnd - str); + } + result = RESULT_OK; + return static_cast(ret); +} + + +void SymbolString::updateCrc(unsigned char& crc, const unsigned char value) { + crc = CRC_LOOKUP_TABLE[crc]^value; +} + +result_t SymbolString::parseHex(const string& str) { + result_t result; + for (size_t i = 0; i < str.size(); i += 2) { + unsigned char value = (unsigned char)parseInt(str.substr(i, 2).c_str(), 16, 0, 0xff, result); + if (result != RESULT_OK) { + return result; + } + m_data.push_back(value); } return RESULT_OK; } -const string SymbolString::getDataStr(const bool unescape, const bool skipLastSymbol, - unsigned char skipFirstSymbols) { - bool previousEscape = false; +result_t SymbolString::parseHexEscaped(const string& str) { + result_t result; + bool inEscape = false; + for (size_t i = 0; i < str.size(); i += 2) { + unsigned char value = (unsigned char)parseInt(str.substr(i, 2).c_str(), 16, 0, 0xff, result); + if (result != RESULT_OK) { + return result; + } + if (inEscape) { + if (value == 0x00) { + m_data.push_back(ESC); + inEscape = false; + } else if (value == 0x01) { + m_data.push_back(SYN); + inEscape = false; + } else { + return RESULT_ERR_ESC; // invalid escape sequence + } + } else if (value == ESC) { + inEscape = true; + } else if (value == SYN) { + return RESULT_ERR_ESC; // invalid escape sequence + } else { + m_data.push_back(value); + } + } + return inEscape ? RESULT_ERR_ESC : RESULT_OK; +} + +const string SymbolString::getDataStr(unsigned char skipFirstSymbols) { ostringstream sstr; for (size_t i = 0; i < m_data.size(); i++) { - unsigned char value = m_data[i]; - if (m_unescapeState == 0 && unescape && previousEscape) { - if (skipFirstSymbols > 0) { - skipFirstSymbols--; - } else if (!skipLastSymbol || i+1 < m_data.size()) { - if (value == 0x00) { - sstr << "a9"; // ESC - } else if (value == 0x01) { - sstr << "aa"; // SYN - } else { - sstr << "XX"; // invalid escape sequence - } - } - previousEscape = false; - } else if (m_unescapeState == 0 && unescape && value == ESC) { - previousEscape = true; // escape sequence not yet finished - } else if (skipFirstSymbols > 0) { + if (skipFirstSymbols > 0) { skipFirstSymbols--; - } else if (!skipLastSymbol || i+1 < m_data.size()) { + } else { + unsigned char value = m_data[i]; sstr << nouppercase << setw(2) << hex << setfill('0') << static_cast(value); } @@ -119,83 +158,23 @@ const string SymbolString::getDataStr(const bool unescape, const bool skipLastSy return sstr.str(); } -result_t SymbolString::push_back(const unsigned char value, const bool isEscaped, const bool updateCRC) { - if (m_unescapeState == 0) { // store escaped data - if (!isEscaped && value == ESC) { - m_data.push_back(ESC); - m_data.push_back(0x00); - if (updateCRC) { - addCRC(ESC); - addCRC(0x00); - } - } else if (!isEscaped && value == SYN) { - m_data.push_back(ESC); - m_data.push_back(0x01); - if (updateCRC) { - addCRC(ESC); - addCRC(0x01); - } +unsigned char SymbolString::calcCrc() const { + unsigned char crc = 0; + for (size_t i = 0; i < m_data.size(); i++) { + unsigned char value = m_data[i]; + if (value == ESC) { + updateCrc(crc, ESC); + updateCrc(crc, 0x00); + } else if (value == SYN) { + updateCrc(crc, ESC); + updateCrc(crc, 0x01); } else { - m_data.push_back(value); - if (updateCRC) { - addCRC(value); - } + updateCrc(crc, value); } - return RESULT_OK; } - if (!isEscaped) { - if (m_unescapeState != 1) { - return RESULT_ERR_ESC; // invalid unescape state - } - m_data.push_back(value); - if (updateCRC) { - if (value == ESC) { - addCRC(ESC); - addCRC(0x00); - } else if (value == SYN) { - addCRC(ESC); - addCRC(0x01); - } else { - addCRC(value); - } - } - return RESULT_OK; - } - if (m_unescapeState != 1) { - if (updateCRC) { - addCRC(value); - } - if (value == 0x00) { - m_data.push_back(ESC); - m_unescapeState = 1; - return RESULT_OK; - } - if (value == 0x01) { - m_data.push_back(SYN); - m_unescapeState = 1; - return RESULT_OK; - } - return RESULT_ERR_ESC; // invalid escape sequence - } - if (value == ESC) { - if (updateCRC) { - addCRC(value); - } - m_unescapeState = 2; - return RESULT_CONTINUE; - } - if (updateCRC) { - addCRC(value); - } - m_data.push_back(value); - return RESULT_OK; + return crc; } -void SymbolString::addCRC(const unsigned char value) { - m_crc = CRC_LOOKUP_TABLE[m_crc]^value; -} - - /** * Return the index of the upper or lower 4 bits of a master address. diff --git a/src/lib/ebus/symbol.h b/src/lib/ebus/symbol.h index ecb39162..88436cf7 100644 --- a/src/lib/ebus/symbol.h +++ b/src/lib/ebus/symbol.h @@ -32,9 +32,9 @@ namespace ebusd { /** @file lib/ebus/symbol.h * Classes, functions, and constants related to symbols on the eBUS. * - * The @a SymbolString class is used for escaping or unescaping a sequence of - * bytes in preparation for sending to the bus or after reception of bytes from - * the bus, as well as calculating and verifying the CRC of a message part. + * The @a SymbolString class is used for holding a sequence of bytes received + * from or sent to the bus, as well as calculating and verifying the CRC of a + * message part. * * A message on the bus always consists of a command part, i.e. the data sent * from a master to the bus. The command part starts with the sending master @@ -70,51 +70,83 @@ using std::vector; /** escape symbol, either followed by 0x00 for the value 0xA9, or 0x01 for the value 0xAA. */ #define ESC 0xA9 + /** synchronization symbol. */ #define SYN 0xAA + /** positive acknowledge symbol. */ #define ACK 0x00 + /** negative acknowledge symbol. */ #define NAK 0xFF + /** the broadcast destination address. */ #define BROADCAST 0xFE +/** + * Parse an unsigned int value. + * @param str the string to parse. + * @param base the numerical base. + * @param minValue the minimum resulting value. + * @param maxValue the maximum resulting value. + * @param result the variable in which to store an error code when parsing failed or the value is out of bounds. + * @param length the optional variable in which to store the number of read characters. + * @return the parsed value. + */ +unsigned int parseInt(const char* str, int base, const unsigned int minValue, const unsigned int maxValue, + result_t& result, unsigned int* length = NULL); /** - * A string of escaped or unescaped bus symbols. + * Parse a signed int value. + * @param str the string to parse. + * @param base the numerical base. + * @param minValue the minimum resulting value. + * @param maxValue the maximum resulting value. + * @param result the variable in which to store an error code when parsing failed or the value is out of bounds. + * @param length the optional variable in which to store the number of read characters. + * @return the parsed value. + */ +int parseSignedInt(const char* str, int base, const int minValue, const int maxValue, result_t& result, + unsigned int* length = NULL); + +/** + * A string of unescaped bus symbols. */ class SymbolString { public: /** - * Creates a new empty escaped or unescaped instance. - * @param escaped whether to create an escaped instance. + * Creates a new empty instance. + * @param isMaster whether this instance if for the master part. */ - explicit SymbolString(const bool escaped = true) : m_unescapeState(escaped ? 0 : 1), m_crc(0) {} + explicit SymbolString(const bool isMaster = false) { m_isMaster = isMaster; } /** - * Add all symbols from the other @a SymbolString and the calculated CRC if escaped. - * @param str the @a SymbolString to copy from. - * @param skipLastSymbol whether to skip the last symbol (probably the CRC). + * Update the CRC by adding a value. + * @param crc the current CRC to update. + * @param value the escaped value to add to the current CRC. */ - void addAll(const SymbolString& str, const bool skipLastSymbol = false); + static void updateCrc(unsigned char& crc, const unsigned char value); /** - * Parse the escaped or unescaped hex @a string, add all symbols, and add the calculated CRC if escaped. + * Parse the hex @a string and add all symbols. * @param str the hex @a string. - * @param isEscaped whether the hex string is escaped. * @return @a RESULT_OK on success, or an error code. */ - result_t parseHex(const string& str, const bool isEscaped = false); + result_t parseHex(const string& str); + + /** + * Parse the escaped hex @a string and add all symbols. + * @param str the hex @a string. + * @return @a RESULT_OK on success, or an error code. + */ + result_t parseHexEscaped(const string& str); /** * Return the symbols as hex string. - * @param unescape whether to unescape an escaped instance. - * @param skipLastSymbol whether to skip the last symbol (probably the CRC). * @param skipFirstSymbols the number of first symbols to skip. * @return the symbols as hex string. */ - const string getDataStr(const bool unescape = true, const bool skipLastSymbol = true, - unsigned char skipFirstSymbols = 0); + const string getDataStr(unsigned char skipFirstSymbols = 0); /** * Return a reference to the symbol at the specified index. @@ -131,11 +163,10 @@ class SymbolString { /** * Return whether this instance is equal to the other instance. * @param other the other instance. - * @return true if this instance is equal to the other instance (i.e. both escaped or both unescaped and same - * symbols). + * @return true if this instance is equal to the other instance. */ bool operator == (SymbolString& other) { - return m_unescapeState == other.m_unescapeState && m_data == other.m_data; + return m_isMaster == other.m_isMaster && m_data == other.m_data; } /** @@ -144,24 +175,26 @@ class SymbolString { * @return true if this instance is different from the other instance. */ bool operator != (SymbolString& other) { - return m_unescapeState != other.m_unescapeState || m_data != other.m_data; + return m_isMaster != other.m_isMaster || m_data != other.m_data; } /** - * Compares this instance to the other instance while treating both as master data (i.e. starting with the master - * address and ending with the CRC). + * Compare the data in this instance to that of the other instance. * @param other the other instance. - * @return 0 if this instance is equal to the other instance (i.e. both escaped or both unescaped and same symbols), - * 1 if this instance is completely different to the other instance, - * 2 if this instance only differs from the other instance in the first byte (the master address). + * @return 0 if the data is equal, + * 1 if the data is completely different, + * 2 if both instances are a master part and the data only differs in the first byte (the master address). */ - int compareMaster(SymbolString& other) { - if (m_unescapeState != other.m_unescapeState || m_data.size() != other.m_data.size()) { + int compareTo(SymbolString& other) { + if (m_data.size() != other.m_data.size()) { return 1; } if (m_data == other.m_data) { return 0; } + if (!m_isMaster) { + return 1; + } if (m_data.size() == 1) { return 2; } @@ -172,15 +205,10 @@ class SymbolString { } /** - * Appends a the symbol to the end of the symbol string and escapes/unescapes it if necessary. + * Append a symbol to the end of the symbol string. * @param value the symbol to append. - * @param isEscaped whether the symbol is escaped. - * @param updateCRC whether to update the calculated CRC in @a m_crc. - * @return RESULT_OK if another symbol was appended, - * RESULT_IN_ESC if this is an unescaped instance and the symbol is escaped and the start of the escape sequence was - * received, RESULT_ERR_ESC if this is an unescaped instance and an invalid escaped sequence was detected. */ - result_t push_back(const unsigned char value, const bool isEscaped = true, const bool updateCRC = true); + void push_back(const unsigned char value) { m_data.push_back(value); } /** * Return the number of symbols in this symbol string. @@ -189,21 +217,39 @@ class SymbolString { unsigned char size() const { return (unsigned char)m_data.size(); } /** - * Return the calculated CRC. + * Return the offset to the first data byte DD. + * @return the offset to the first data byte DD. + */ + unsigned char getDataOffset() const { return m_isMaster ? 5 : 1; } + + /** + * Return the number of data bytes DD. + * @return the number of data bytes DD. + */ + unsigned char getDataSize() const { return m_data.size() > (m_isMaster ? 4 : 0) ? m_data[m_isMaster ? 4 : 0] : 0; } + + /** + * Return whether the byte sequence is complete with regard to the header and length field. + * @return true if the sequence is complete. + */ + bool isComplete() { + size_t lengthOffset = (m_isMaster ? 4 : 0); + if (m_data.size() < lengthOffset + 1) { + return false; + } + return m_data.size() >= lengthOffset + 1 + m_data[lengthOffset]; + } + + /** + * Calculate the CRC. * @return the calculated CRC. */ - unsigned char getCRC() const { return m_crc; } + unsigned char calcCrc() const; /** * Clear the symbols. */ - void clear() { m_data.clear(); m_unescapeState = m_unescapeState == 0 ? 0 : 1; m_crc = 0; } - - /** - * Clear the symbols and adjust the escape mode. - * @param escape true to set to an escaped instance, false to set to an unescaped instance. - */ - void clear(const bool escape) { m_data.clear(); m_unescapeState = escape ? 0 : 1; m_crc = 0; } + void clear() { m_data.clear(); } private: @@ -212,26 +258,13 @@ class SymbolString { * @param str the @a SymbolString to copy from. */ SymbolString(const SymbolString& str) - : m_data(str.m_data), m_unescapeState(str.m_unescapeState), m_crc(str.m_crc) {} + : m_data(str.m_data), m_isMaster(str.m_isMaster) {} - /** - * Update the calculated CRC in @a m_crc by adding a value. - * @param value the (escaped) value to add to the calculated CRC in @a m_crc. - */ - void addCRC(const unsigned char value); - - /** the string of bus symbols. */ + /** the string of unescaped symbols. */ vector m_data; - /** - * 0 if the symbols in @a m_data are escaped, - * 1 if the symbols in @a m_data are unescaped and the last symbol passed to @a push_back was a normal symbol, - * 2 if the symbols in @a m_data are unescaped and the last symbol passed to @a push_back was the escape symbol. - */ - int m_unescapeState; - - /** the calculated CRC. */ - unsigned char m_crc; + /** whether this instance if for the master part. */ + bool m_isMaster; }; diff --git a/src/lib/ebus/test/test_data.cpp b/src/lib/ebus/test/test_data.cpp index d9fbe216..361d3e52 100644 --- a/src/lib/ebus/test/test_data.cpp +++ b/src/lib/ebus/test/test_data.cpp @@ -473,14 +473,14 @@ int main() { string check[5] = checks[i]; istringstream isstr(check[0]); string expectStr = check[1]; - SymbolString mstr(false); + SymbolString mstr(true); result_t result = mstr.parseHex(check[2]); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << check[2] << "\" error: " << getResultCode(result) << endl; error = true; continue; } - SymbolString sstr(false); + SymbolString sstr; result = sstr.parseHex(check[3]); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << check[3] << "\" error: " << getResultCode(result) << endl; @@ -563,17 +563,17 @@ int main() { } ostringstream output; - SymbolString writeMstr(false); - result = writeMstr.parseHex(mstr.getDataStr(true, false).substr(0, 10)); + SymbolString writeMstr(true); + result = writeMstr.parseHex(mstr.getDataStr().substr(0, 10)); if (result != RESULT_OK) { - cout << " parse \"" << mstr.getDataStr(true, false).substr(0, 10) << "\" error: " << getResultCode(result) + cout << " parse \"" << mstr.getDataStr().substr(0, 10) << "\" error: " << getResultCode(result) << endl; error = true; } - SymbolString writeSstr(false); - result = writeSstr.parseHex(sstr.getDataStr(true, false).substr(0, 2)); + SymbolString writeSstr; + result = writeSstr.parseHex(sstr.getDataStr().substr(0, 2)); if (result != RESULT_OK) { - cout << " parse \"" << sstr.getDataStr(true, false).substr(0, 2) << "\" error: " << getResultCode(result) + cout << " parse \"" << sstr.getDataStr().substr(0, 2) << "\" error: " << getResultCode(result) << endl; error = true; } @@ -621,9 +621,9 @@ int main() { error = true; } else { bool match = mstr == writeMstr && sstr == writeSstr; - verify(failedWriteMatch, "write", expectStr, match, mstr.getDataStr(true, false) + " " - + sstr.getDataStr(true, false), writeMstr.getDataStr(true, false) + " " - + writeSstr.getDataStr(true, false)); + verify(failedWriteMatch, "write", expectStr, match, mstr.getDataStr() + " " + + sstr.getDataStr(), writeMstr.getDataStr() + " " + + writeSstr.getDataStr()); } } delete fields; diff --git a/src/lib/ebus/test/test_message.cpp b/src/lib/ebus/test/test_message.cpp index 95e3ee6e..107a3772 100644 --- a/src/lib/ebus/test/test_message.cpp +++ b/src/lib/ebus/test/test_message.cpp @@ -260,7 +260,7 @@ int main() { } else if (mstrs[pos] != NULL) { delete mstrs[pos]; } - mstrs[pos] = new SymbolString(false); + mstrs[pos] = new SymbolString(true); result = mstrs[pos]->parseHex(token); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << token << "\" error: " << getResultCode(result) << endl; @@ -277,7 +277,7 @@ int main() { } else if (sstrs[pos] != NULL) { delete sstrs[pos]; } - sstrs[pos] = new SymbolString(false); + sstrs[pos] = new SymbolString(); result = sstrs[pos]->parseHex(token); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << token << "\" error: " << getResultCode(result) << endl; @@ -292,7 +292,7 @@ int main() { if (mstrs[0] != NULL) { delete mstrs[0]; } - mstrs[0] = new SymbolString(false); + mstrs[0] = new SymbolString(true); result = mstrs[0]->parseHex(check[2]); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << check[2] << "\" error: " << getResultCode(result) << endl; @@ -301,7 +301,7 @@ int main() { if (sstrs[0] != NULL) { delete sstrs[0]; } - sstrs[0] = new SymbolString(false); + sstrs[0] = new SymbolString(); result = sstrs[0]->parseHex(check[3]); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << check[3] << "\" error: " << getResultCode(result) << endl; @@ -419,7 +419,7 @@ int main() { } if (!message->isPassive() && (withInput || !decode)) { istringstream input(inputStr); - SymbolString writeMstr(false); + SymbolString writeMstr(true); result = message->prepareMaster(0xff, writeMstr, input); if (failedPrepare) { if (result == RESULT_OK) { @@ -438,8 +438,8 @@ int main() { cout << " \"" << inputStr << "\": prepare OK" << endl; bool match = writeMstr == *mstrs[0]; - verify(failedPrepareMatch, "prepare", inputStr, match, mstrs[0]->getDataStr(true, false), - writeMstr.getDataStr(true, false)); + verify(failedPrepareMatch, "prepare", inputStr, match, mstrs[0]->getDataStr(), + writeMstr.getDataStr()); } } diff --git a/src/lib/ebus/test/test_symbol.cpp b/src/lib/ebus/test/test_symbol.cpp index 0ee67f63..2ae51aac 100644 --- a/src/lib/ebus/test/test_symbol.cpp +++ b/src/lib/ebus/test/test_symbol.cpp @@ -50,26 +50,32 @@ int main(int argc, char** argv) { SymbolString sstr(true); if (argc > 1) { - result_t result = sstr.parseHex(argv[1], true); + result_t result; + if (argc > 2 && strcmp("escaped", argv[1]) == 0) { + result = sstr.parseHexEscaped(argv[2]); + } else { + result = sstr.parseHex(argv[1]); + } if (result != RESULT_OK) { cout << "parse escaped error: " << getResultCode(result) << endl; } else { - unsigned char gotCrc = sstr.getCRC(); + unsigned char gotCrc = sstr.calcCrc(); cout << "calculated CRC: 0x" << nouppercase << setw(2) << hex << setfill('0') << static_cast(gotCrc) << endl; } return 0; } + string gotStr, expectStr; - result_t result = sstr.parseHex("10feb5050427a915aa", false); + result_t result = sstr.parseHex("10feb5050427a915aa"); if (result != RESULT_OK) { - cout << "parse escaped error: " << getResultCode(result) << endl; + cout << "parse unescaped error: " << getResultCode(result) << endl; error = true; } else { - gotStr = sstr.getDataStr(false, false), expectStr = "10feb5050427a90015a90177"; - verify(false, "parse escaped", "10feb5050427a915aa", true, expectStr, gotStr); - unsigned char gotCrc = sstr.getCRC(), expectCrc = 0x77; + gotStr = sstr.getDataStr(), expectStr = "10feb5050427a915aa"; + verify(false, "parse unescaped", "10feb5050427a915aa", true, expectStr, gotStr); + unsigned char gotCrc = sstr.calcCrc(), expectCrc = 0x77; ostringstream ostr; ostr << nouppercase << setw(2) << hex << setfill('0') << static_cast(expectCrc); expectStr = ostr.str(); @@ -77,19 +83,40 @@ int main(int argc, char** argv) { ostr << nouppercase << setw(2) << hex << setfill('0') << static_cast(gotCrc); gotStr = ostr.str(); verify(false, "CRC", "10feb5050427a915aa", gotCrc == expectCrc, expectStr, gotStr); - - gotStr = sstr.getDataStr(true, false), expectStr = "10feb5050427a915aa77"; - verify(false, "unescape", "10feb5050427a915aa", true, expectStr, gotStr); } - sstr = SymbolString(false); - result = sstr.parseHex("10feb5050427a90015a90177", true); + sstr.clear(); + result = sstr.parseHexEscaped("10feb5050427a90015a901"); if (result != RESULT_OK) { - cout << "parse unescaped error: " << getResultCode(result) << endl; + cout << "parse escaped error: " << getResultCode(result) << endl; error = true; } else { - gotStr = sstr.getDataStr(true, false), expectStr = "10feb5050427a915aa77"; - verify(false, "parse unescaped", "10feb5050427a90015a90177", true, expectStr, gotStr); + gotStr = sstr.getDataStr(), expectStr = "10feb5050427a915aa"; + verify(false, "parse escaped", "10feb5050427a90015a901", true, expectStr, gotStr); + ostringstream ostr; + ostr << dec << static_cast(4); + expectStr = ostr.str(); + ostr.str(""); + ostr << dec << static_cast(sstr.getDataSize()); + gotStr = ostr.str(); + verify(false, "data size", "10feb5050427a90015a901", sstr.getDataSize() == 4, expectStr, gotStr); + } + + sstr = SymbolString(); // slave + result = sstr.parseHexEscaped("0427a90015a901"); + if (result != RESULT_OK) { + cout << "parse escaped error: " << getResultCode(result) << endl; + error = true; + } else { + gotStr = sstr.getDataStr(), expectStr = "0427a915aa"; + verify(false, "parse escaped", "0427a90015a901", true, expectStr, gotStr); + ostringstream ostr; + ostr << dec << static_cast(4); + expectStr = ostr.str(); + ostr.str(""); + ostr << dec << static_cast(sstr.getDataSize()); + gotStr = ostr.str(); + verify(false, "data size", "0427a90015a901", sstr.getDataSize() == 4, expectStr, gotStr); } return error ? 1 : 0;