From b3bb2e08ac4c55f3f14292baf2bcfc79014c4829 Mon Sep 17 00:00:00 2001 From: john30 Date: Sat, 14 Jan 2017 13:00:04 +0100 Subject: [PATCH] code style --- src/ebusd/bushandler.cpp | 375 +++++----- src/ebusd/bushandler.h | 31 +- src/ebusd/datahandler.cpp | 16 +- src/ebusd/datahandler.h | 10 +- src/ebusd/main.cpp | 178 +++-- src/ebusd/main.h | 20 +- src/ebusd/mainloop.cpp | 452 +++++++------ src/ebusd/mainloop.h | 27 +- src/ebusd/mqtthandler.cpp | 124 ++-- src/ebusd/mqtthandler.h | 15 +- src/ebusd/network.cpp | 24 +- src/ebusd/network.h | 32 +- src/lib/ebus/contrib/contrib.cpp | 1 + src/lib/ebus/contrib/contrib.h | 6 +- src/lib/ebus/contrib/tem.cpp | 13 +- src/lib/ebus/contrib/tem.h | 12 +- src/lib/ebus/contrib/test/test_tem.cpp | 28 +- src/lib/ebus/data.cpp | 388 ++++++----- src/lib/ebus/data.h | 66 +- src/lib/ebus/datatype.cpp | 119 ++-- src/lib/ebus/datatype.h | 22 +- src/lib/ebus/device.cpp | 67 +- src/lib/ebus/device.h | 12 +- src/lib/ebus/filereader.h | 77 ++- src/lib/ebus/message.cpp | 903 +++++++++++++------------ src/lib/ebus/message.h | 102 +-- src/lib/ebus/result.cpp | 3 +- src/lib/ebus/result.h | 6 +- src/lib/ebus/symbol.cpp | 26 +- src/lib/ebus/symbol.h | 50 +- src/lib/ebus/test/test_data.cpp | 39 +- src/lib/ebus/test/test_device.cpp | 16 +- src/lib/ebus/test/test_filereader.cpp | 10 +- src/lib/ebus/test/test_message.cpp | 118 ++-- src/lib/ebus/test/test_symbol.cpp | 13 +- src/lib/utils/clock.cpp | 3 +- src/lib/utils/clock.h | 6 +- src/lib/utils/log.cpp | 38 +- src/lib/utils/log.h | 30 +- src/lib/utils/notify.h | 6 +- src/lib/utils/queue.h | 26 +- src/lib/utils/rotatefile.cpp | 24 +- src/lib/utils/rotatefile.h | 13 +- src/lib/utils/tcpsocket.cpp | 17 +- src/lib/utils/tcpsocket.h | 8 +- src/lib/utils/thread.cpp | 27 +- src/lib/utils/thread.h | 6 +- src/tools/ebusctl.cpp | 71 +- src/tools/ebusfeed.cpp | 35 +- 49 files changed, 1853 insertions(+), 1858 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 5940c8b3..94da903d 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -16,22 +16,23 @@ * along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include "bushandler.h" +#include +#include +#include +#include +#include +#include +#include #include "message.h" #include "data.h" #include "result.h" #include "symbol.h" #include "log.h" -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include -#include -#include -#include using namespace std; @@ -62,20 +63,19 @@ const char* getStateCode(BusState state) { } } -result_t PollRequest::prepare(unsigned char ownMasterAddress) -{ +result_t PollRequest::prepare(unsigned char ownMasterAddress) { istringstream input; result_t result = m_message->prepareMaster(ownMasterAddress, m_master, input, UI_FIELD_SEPARATOR, SYN, m_index); - if (result == RESULT_OK) + if (result == RESULT_OK) { logInfo(lf_bus, "poll cmd: %s", m_master.getDataStr().c_str()); + } return result; } -bool PollRequest::notify(result_t result, SymbolString& slave) -{ +bool PollRequest::notify(result_t result, SymbolString& slave) { if (result == RESULT_OK) { result = m_message->storeLastData(pt_slaveData, slave, m_index); - if (result>=RESULT_OK && m_index+1 < m_message->getCount()) { + if (result >= RESULT_OK && m_index+1 < m_message->getCount()) { m_index++; result = prepare(m_master[0]); if (result >= RESULT_OK) { @@ -84,73 +84,79 @@ bool PollRequest::notify(result_t result, SymbolString& slave) } } ostringstream output; - if (result==RESULT_OK) + if (result == RESULT_OK) { result = m_message->decodeLastData(output); // decode data - if (result < RESULT_OK) + } + if (result < RESULT_OK) { logError(lf_bus, "poll %s %s failed: %s", m_message->getCircuit().c_str(), m_message->getName().c_str(), getResultCode(result)); - else + } else { logNotice(lf_bus, "poll %s %s: %s", m_message->getCircuit().c_str(), m_message->getName().c_str(), output.str().c_str()); - + } return false; } -result_t ScanRequest::prepare(unsigned char ownMasterAddress) -{ - if (m_slaves.empty()) +result_t ScanRequest::prepare(unsigned char ownMasterAddress) { + if (m_slaves.empty()) { return RESULT_ERR_EOF; + } unsigned char dstAddress = m_slaves.front(); - if (m_index==0 && m_messages.size()==m_allMessages.size()) // first message for this address + if (m_index == 0 && m_messages.size() == m_allMessages.size()) { // first message for this address m_busHandler->setScanResult(dstAddress, ""); - + } istringstream input; result_t result = m_message->prepareMaster(ownMasterAddress, m_master, input, UI_FIELD_SEPARATOR, dstAddress, m_index); - if (result >= RESULT_OK) + if (result >= RESULT_OK) { logInfo(lf_bus, "scan %2.2x cmd: %s", dstAddress, m_master.getDataStr().c_str()); + } return result; } -bool ScanRequest::notify(result_t result, SymbolString& slave) -{ +bool ScanRequest::notify(result_t result, SymbolString& slave) { unsigned char dstAddress = m_master[1]; if (result == RESULT_OK) { - if (m_message==m_messageMap->getScanMessage()) { + if (m_message == m_messageMap->getScanMessage()) { Message* message = m_messageMap->getScanMessage(dstAddress); - if (message!=NULL) { + if (message != NULL) { m_message = message; m_message->storeLastData(pt_masterData, m_master, m_index); // expected to work since this is a clone } - } else if (m_message->getDstAddress()==SYN) { + } else if (m_message->getDstAddress() == SYN) { m_message = m_message->derive(dstAddress, true); m_messageMap->add(m_message); m_message->storeLastData(pt_masterData, m_master, m_index); // expected to work since this is a clone } result = m_message->storeLastData(pt_slaveData, slave, m_index); - if (result>=RESULT_OK && m_index+1 < m_message->getCount()) { + if (result >= RESULT_OK && m_index+1 < m_message->getCount()) { m_index++; result = prepare(m_master[0]); - if (result >= RESULT_OK) + if (result >= RESULT_OK) { return true; + } } - if (result==RESULT_OK) + if (result == RESULT_OK) { result = m_message->decodeLastData(m_scanResult, 0, true); // decode data + } } if (result < RESULT_OK) { - if (!m_slaves.empty()) + if (!m_slaves.empty()) { m_slaves.pop_front(); - if (result == RESULT_ERR_TIMEOUT) + } + if (result == RESULT_ERR_TIMEOUT) { logNotice(lf_bus, "scan %2.2x timed out (%d slaves left)", dstAddress, m_slaves.size()); - else + } else { logError(lf_bus, "scan %2.2x failed (%d slaves left): %s", dstAddress, m_slaves.size(), getResultCode(result)); + } m_messages.clear(); // skip remaining secondary messages } else if (m_messages.empty()) { - if (!m_slaves.empty()) + if (!m_slaves.empty()) { m_slaves.pop_front(); + } logNotice(lf_bus, "scan %2.2x completed (%d slaves left)", dstAddress, m_slaves.size()); } - if (m_messages.empty()) // last message for this address + if (m_messages.empty()) { // last message for this address m_busHandler->setScanResult(dstAddress, m_scanResult.str()); - + } if (m_slaves.empty()) { logNotice(lf_bus, "scan finished"); m_busHandler->setScanFinished(); @@ -172,19 +178,16 @@ bool ScanRequest::notify(result_t result, SymbolString& slave) } -bool ActiveBusRequest::notify(result_t result, SymbolString& slave) -{ - if (result == RESULT_OK) +bool ActiveBusRequest::notify(result_t result, SymbolString& slave) { + if (result == RESULT_OK) { logDebug(lf_bus, "read res: %s", slave.getDataStr().c_str()); - + } m_result = result; m_slave.addAll(slave, true); - return false; } -void GrabbedMessage::setLastData(SymbolString& master, SymbolString& slave) -{ +void GrabbedMessage::setLastData(SymbolString& master, SymbolString& slave) { m_lastMaster.clear(false); m_lastMaster.addAll(master); m_lastSlave.clear(false); @@ -192,8 +195,7 @@ void GrabbedMessage::setLastData(SymbolString& master, SymbolString& slave) m_count++; } -bool GrabbedMessage::dump(const bool unknown, MessageMap* messages, bool first, ostringstream& output) -{ +bool GrabbedMessage::dump(const bool unknown, MessageMap* messages, bool first, ostringstream& output) { Message* message = messages->find(m_lastMaster); if (unknown && message) { return false; @@ -214,15 +216,13 @@ bool GrabbedMessage::dump(const bool unknown, MessageMap* messages, bool first, } -void BusHandler::clear() -{ +void BusHandler::clear() { memset(m_seenAddresses, 0, sizeof(m_seenAddresses)); m_masterCount = 1; m_scanResults.clear(); } -result_t BusHandler::sendAndWait(SymbolString& master, SymbolString& slave) -{ +result_t BusHandler::sendAndWait(SymbolString& master, SymbolString& slave) { result_t result = RESULT_ERR_NO_SIGNAL; slave.clear(); ActiveBusRequest request(master, slave); @@ -232,31 +232,28 @@ result_t BusHandler::sendAndWait(SymbolString& master, SymbolString& slave) m_nextRequests.push(&request); bool success = m_finishedRequests.remove(&request, true); result = success ? request.m_result : RESULT_ERR_TIMEOUT; - if (result == RESULT_OK) { Message* message = m_messages->find(master); - if (message != NULL) + if (message != NULL) { m_messages->invalidateCache(message); + } break; } if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) { logError(lf_bus, "send to %2.2x: %s, give up", master[1], getResultCode(result)); break; } - logError(lf_bus, "send to %2.2x: %s%s", master[1], getResultCode(result), sendRetries>0 ? ", retry" : ""); - + logError(lf_bus, "send to %2.2x: %s%s", master[1], getResultCode(result), sendRetries > 0 ? ", retry" : ""); request.m_busLostRetries = 0; } - return result; } -result_t BusHandler::readFromBus(Message* message, string inputStr, const unsigned char dstAddress) -{ +result_t BusHandler::readFromBus(Message* message, string inputStr, const unsigned char dstAddress) { result_t ret = RESULT_EMPTY; SymbolString master(true); SymbolString slave(false); - for (unsigned char index=0; indexgetCount(); index++) { + for (unsigned char index = 0; index < message->getCount(); index++) { istringstream input(inputStr); ret = message->prepareMaster(m_ownMasterAddress, master, input, UI_FIELD_SEPARATOR, dstAddress, index); if (ret != RESULT_OK) { @@ -278,16 +275,16 @@ result_t BusHandler::readFromBus(Message* message, string inputStr, const unsign return ret; } -void BusHandler::run() -{ +void BusHandler::run() { unsigned int symCount = 0; time_t lastTime; time(&lastTime); do { if (m_device->isValid() && !m_reconnect) { result_t result = handleSymbol(); - if (result != RESULT_ERR_TIMEOUT) + if (result != RESULT_ERR_TIMEOUT) { symCount++; + } time_t now; time(&now); if (now > lastTime) { @@ -318,8 +315,7 @@ void BusHandler::run() } while (isRunning()); } -result_t BusHandler::handleSymbol() -{ +result_t BusHandler::handleSymbol() { long timeout = SYN_TIMEOUT; unsigned char sendSymbol = ESC; bool sending = false; @@ -329,7 +325,7 @@ result_t BusHandler::handleSymbol() switch (m_state) { case bs_noSignal: - timeout = m_generateSynInterval>0 ? m_generateSynInterval : SIGNAL_TIMEOUT; + timeout = m_generateSynInterval > 0 ? m_generateSynInterval : SIGNAL_TIMEOUT; break; case bs_skip: @@ -373,10 +369,11 @@ result_t BusHandler::handleSymbol() break; case bs_recvRes: - if (m_response.size() > 0 || m_slaveRecvTimeout > SYN_TIMEOUT) + if (m_response.size() > 0 || m_slaveRecvTimeout > SYN_TIMEOUT) { timeout = m_slaveRecvTimeout; - else + } else { timeout = SYN_TIMEOUT; + } break; case bs_recvResAck: @@ -422,10 +419,11 @@ result_t BusHandler::handleSymbol() if (sending) { result = m_device->send(sendSymbol); if (result == RESULT_OK) { - if (m_state == bs_ready) + if (m_state == bs_ready) { timeout = m_transferLatency+m_busAcquireTimeout; - else + } else { timeout = m_transferLatency+SEND_TIMEOUT; + } } else { sending = false; timeout = SYN_TIMEOUT; @@ -450,9 +448,9 @@ result_t BusHandler::handleSymbol() if (result == RESULT_ERR_TIMEOUT) { return setState(bs_noSignal, result); } - if (result != RESULT_OK) + if (result != RESULT_OK) { logError(lf_bus, "unable to receive sent AUTO-SYN symbol: %s", getResultCode(result)); - else if (recvSymbol != SYN) { + } else if (recvSymbol != SYN) { logError(lf_bus, "received %2.2x instead of AUTO-SYN symbol", recvSymbol); } else { if (m_generateSynInterval != SYN_TIMEOUT) { @@ -473,19 +471,19 @@ result_t BusHandler::handleSymbol() m_currentRequest = startRequest; // force the failed request to be notified } if ((m_generateSynInterval != SYN_TIMEOUT && difftime(now, m_lastReceive) > 1) // at least one full second has passed since last received symbol - || m_state == bs_noSignal) + || m_state == bs_noSignal) { return setState(bs_noSignal, result); - + } return setState(bs_skip, result); } m_lastReceive = now; if ((recvSymbol == SYN) && (m_state != bs_sendSyn)) { - if (!sending && m_remainLockCount > 0 && m_command.size() != 1) + if (!sending && m_remainLockCount > 0 && m_command.size() != 1) { m_remainLockCount--; - else if (!sending && m_remainLockCount == 0 && m_command.size() == 1) + } else if (!sending && m_remainLockCount == 0 && m_command.size() == 1) { m_remainLockCount = 1; // wait for next AUTO-SYN after SYN / address / SYN (bus locked for own priority) - + } return setState(bs_ready, m_state == bs_skip ? RESULT_OK : RESULT_ERR_SYN); } @@ -514,15 +512,16 @@ result_t BusHandler::handleSymbol() } // arbitration lost. if same priority class found, try again after next AUTO-SYN m_remainLockCount = isMaster(recvSymbol) ? 2 : 1; // number of SYN to wait for before next send try - if ((recvSymbol & 0x0f) != (sendSymbol & 0x0f) && m_lockCount > m_remainLockCount) + if ((recvSymbol & 0x0f) != (sendSymbol & 0x0f) && m_lockCount > m_remainLockCount) { // if different priority class found, try again after N AUTO-SYN symbols (at least next AUTO-SYN) m_remainLockCount = m_lockCount; + } 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) + if (result < RESULT_OK) { return setState(bs_skip, result); - + } m_repeat = false; return setState(bs_recvCmd, RESULT_OK); @@ -530,9 +529,9 @@ result_t BusHandler::handleSymbol() headerLen = 4; crcPos = m_command.size() > headerLen ? headerLen + 1 + m_command[headerLen] : 0xff; // header symbols are never escaped result = m_command.push_back(recvSymbol, true, m_command.size() < crcPos); - if (result < RESULT_OK) + 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]; m_commandCrcValid = m_command[headerLen + 1 + m_command[headerLen]] == m_command.getCRC(); // header symbols are never escaped @@ -542,36 +541,34 @@ result_t BusHandler::handleSymbol() return setState(bs_skip, RESULT_OK); } addSeenAddress(m_command[0]); - if (m_answer - && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) + if (m_answer && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) { return setState(bs_sendCmdAck, RESULT_OK); - + } return setState(bs_recvCmdAck, RESULT_OK); } - if (dstAddress == BROADCAST) + if (dstAddress == BROADCAST) { return setState(bs_skip, RESULT_ERR_CRC); - - if (m_answer - && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) { + } + if (m_answer && (dstAddress == m_ownMasterAddress || dstAddress == m_ownSlaveAddress)) { return setState(bs_sendCmdAck, RESULT_ERR_CRC); } - if (m_repeat) + if (m_repeat) { return setState(bs_skip, RESULT_ERR_CRC); + } return setState(bs_recvCmdAck, RESULT_ERR_CRC); } return RESULT_OK; case bs_recvCmdAck: if (recvSymbol == ACK) { - if (!m_commandCrcValid) + if (!m_commandCrcValid) { 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])) { // header symbols are never escaped receiveCompleted(); return setState(bs_skip, RESULT_OK); } @@ -584,50 +581,48 @@ result_t BusHandler::handleSymbol() m_repeat = true; m_nextSendPos = 0; m_command.clear(); - if (m_currentRequest != NULL) + if (m_currentRequest != NULL) { return setState(bs_sendCmd, RESULT_ERR_NAK, true); - + } return setState(bs_recvCmd, RESULT_ERR_NAK); } - return setState(bs_skip, RESULT_ERR_NAK); } - 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) + 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) + if (m_currentRequest != NULL) { return setState(bs_sendResAck, RESULT_OK); - + } return setState(bs_recvResAck, RESULT_OK); } if (m_repeat) { - if (m_currentRequest != NULL) + if (m_currentRequest != NULL) { return setState(bs_sendSyn, RESULT_ERR_CRC); - + } return setState(bs_skip, RESULT_ERR_CRC); } - if (m_currentRequest != NULL) + if (m_currentRequest != NULL) { return setState(bs_sendResAck, RESULT_ERR_CRC); - + } return setState(bs_recvResAck, RESULT_ERR_CRC); } return RESULT_OK; case bs_recvResAck: if (recvSymbol == ACK) { - if (!m_responseCrcValid) + if (!m_responseCrcValid) { return setState(bs_skip, RESULT_ERR_ACK); - + } receiveCompleted(); return setState(bs_skip, RESULT_OK); } @@ -647,9 +642,9 @@ result_t BusHandler::handleSymbol() m_nextSendPos++; if (m_nextSendPos >= m_currentRequest->m_master.size()) { // master data completely sent - if (m_currentRequest->m_master[1] == BROADCAST) + if (m_currentRequest->m_master[1] == BROADCAST) { return setState(bs_sendSyn, RESULT_OK); - + } m_commandCrcValid = true; return setState(bs_recvCmdAck, RESULT_OK); } @@ -695,20 +690,22 @@ result_t BusHandler::handleSymbol() message = m_messages->find(m_command); if (message == NULL) { message = m_messages->find(m_command, true); - if (message!=NULL && message->getSrcAddress()!=SYN) + if (message != NULL && message->getSrcAddress() != SYN) { message = NULL; + } } - if (message == NULL || message->isWrite()) + if (message == NULL || message->isWrite()) { return setState(bs_skip, RESULT_ERR_INVALID_ARG); // don't know this request or definition has wrong direction, deny + } if (message == m_messages->getScanMessage(m_ownSlaveAddress)) { 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 result = message->prepareSlave(input, m_response); - if (result != RESULT_OK) + if (result != RESULT_OK) { return setState(bs_skip, result); + } return setState(bs_sendRes, RESULT_OK); } return setState(bs_skip, RESULT_ERR_INVALID_ARG); @@ -733,12 +730,10 @@ result_t BusHandler::handleSymbol() return setState(bs_skip, RESULT_ERR_INVALID_ARG); } - return RESULT_OK; } -result_t BusHandler::setState(BusState state, result_t result, bool firstRepetition) -{ +result_t BusHandler::setState(BusState state, result_t result, bool firstRepetition) { if (m_currentRequest != NULL) { if (result == RESULT_ERR_BUS_LOST && m_currentRequest->m_busLostRetries < m_busLostRetries) { logDebug(lf_bus, "%s during %s, retry", getResultCode(result), getStateCode(m_state)); @@ -808,13 +803,12 @@ result_t BusHandler::setState(BusState state, result_t result, bool firstRepetit return result; } -void BusHandler::addSeenAddress(unsigned char address) -{ +void BusHandler::addSeenAddress(unsigned char address) { if (!isValidAddress(address, false)) { return; } if (!isMaster(address)) { - if (!m_device->isReadOnly() && address==m_ownSlaveAddress) { + if (!m_device->isReadOnly() && address == m_ownSlaveAddress) { if (!m_addressConflict) { m_addressConflict = true; logError(lf_bus, "own slave address %2.2x is used by another participant", address); @@ -822,19 +816,19 @@ void BusHandler::addSeenAddress(unsigned char address) } m_seenAddresses[address] |= SEEN; address = getMasterAddress(address); - if (address==SYN) { + if (address == SYN) { return; } } - if ((m_seenAddresses[address]&SEEN)==0) { - if (!m_device->isReadOnly() && address==m_ownMasterAddress) { + if ((m_seenAddresses[address]&SEEN) == 0) { + if (!m_device->isReadOnly() && address == m_ownMasterAddress) { if (!m_addressConflict) { m_addressConflict = true; logError(lf_bus, "own master address %2.2x is used by another participant", address); } } else { m_masterCount++; - if (m_autoLockCount && m_masterCount>m_lockCount) { + if (m_autoLockCount && m_masterCount > m_lockCount) { m_lockCount = m_masterCount; } logNotice(lf_bus, "new master %2.2x, master count %d", address, m_masterCount); @@ -843,8 +837,7 @@ void BusHandler::addSeenAddress(unsigned char address) } } -void BusHandler::receiveCompleted() -{ +void BusHandler::receiveCompleted() { unsigned char srcAddress = m_command[0], dstAddress = m_command[1]; if (srcAddress == dstAddress) { logError(lf_bus, "invalid self-addressed message from %2.2x", srcAddress); @@ -856,17 +849,17 @@ void BusHandler::receiveCompleted() bool master = isMaster(dstAddress); if (dstAddress == BROADCAST) { logInfo(lf_update, "update BC cmd: %s", m_command.getDataStr().c_str()); - if (m_command.size()>=5+9 && m_command[2]==0x07 && m_command[3]==0x04) { + if (m_command.size() >= 5+9 && m_command[2] == 0x07 && m_command[3] == 0x04) { unsigned char slaveAddress = (unsigned char)((srcAddress+5)&0xff); addSeenAddress(slaveAddress); Message* message = m_messages->getScanMessage(slaveAddress); - if (message && (message->getLastUpdateTime()==0 || message->getLastSlaveData().size()<10)) { + if (message && (message->getLastUpdateTime() == 0 || message->getLastSlaveData().size() < 10)) { // e.g. 10fe07040a b5564149303001248901 m_seenAddresses[slaveAddress] |= SCAN_INIT; SymbolString idData; istringstream input; result_t result = message->prepareMaster(m_ownMasterAddress, idData, input); - if (result==RESULT_OK) { + if (result == RESULT_OK) { idData.clear(); idData.push_back(9); for (size_t i = 5; i <= 5+9; i++) { @@ -874,7 +867,7 @@ void BusHandler::receiveCompleted() } result = message->storeLastData(pt_slaveData, idData, 0); } - if (result==RESULT_OK) { + if (result == RESULT_OK) { m_seenAddresses[slaveAddress] |= SCAN_DONE; } logNotice(lf_update, "store BC ident: %s", getResultCode(result)); @@ -909,7 +902,7 @@ void BusHandler::receiveCompleted() string name = message->getName(); result_t result = message->storeLastData(m_command, m_response); ostringstream output; - if (result==RESULT_OK) { + if (result == RESULT_OK) { result = message->decodeLastData(output); } if (result < RESULT_OK) { @@ -933,29 +926,31 @@ void BusHandler::receiveCompleted() } } -result_t BusHandler::startScan(bool full) -{ +result_t BusHandler::startScan(bool full) { deque messages = m_messages->findAll("scan", "", true); for (deque::iterator it = messages.begin(); it < messages.end(); it++) { Message* message = *it; - if (message->getPrimaryCommand() == 0x07 && message->getSecondaryCommand() == 0x04) + if (message->getPrimaryCommand() == 0x07 && message->getSecondaryCommand() == 0x04) { messages.erase(it--); // query pb 0x07 / sb 0x04 only once + } } Message* scanMessage = m_messages->getScanMessage(); - if (scanMessage==NULL) + if (scanMessage == NULL) { return RESULT_ERR_NOTFOUND; - + } m_scanResults.clear(); deque slaves; for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master - if (!isValidAddress(slave, false) || isMaster(slave)) + if (!isValidAddress(slave, false) || isMaster(slave)) { continue; - if (!full && (m_seenAddresses[slave]&SEEN)==0) { + } + if (!full && (m_seenAddresses[slave]&SEEN) == 0) { unsigned char master = getMasterAddress(slave); // check if we saw the corresponding master already - if (master == SYN || (m_seenAddresses[master]&SEEN)==0) + if (master == SYN || (m_seenAddresses[master]&SEEN) == 0) { continue; + } } slaves.push_back(slave); } @@ -964,55 +959,55 @@ result_t BusHandler::startScan(bool full) result_t result = request->prepare(m_ownMasterAddress); if (result < RESULT_OK) { delete request; - return result==RESULT_ERR_EOF ? RESULT_EMPTY : result; + return result == RESULT_ERR_EOF ? RESULT_EMPTY : result; } m_runningScans++; m_nextRequests.push(request); return RESULT_OK; } -void BusHandler::setScanResult(unsigned char dstAddress, string str) -{ +void BusHandler::setScanResult(unsigned char dstAddress, string str) { m_seenAddresses[dstAddress] |= SCAN_INIT; - if (str.length()>0) { + if (str.length() > 0) { m_seenAddresses[dstAddress] |= SCAN_DONE; m_scanResults[dstAddress] = str; logNotice(lf_bus, "scan %2.2x: %s", dstAddress, str.c_str()); } } -void BusHandler::setScanFinished() -{ - if (m_runningScans>0) +void BusHandler::setScanFinished() { + if (m_runningScans > 0) { m_runningScans--; + } } -void BusHandler::formatScanResult(ostringstream& output) -{ - if (m_runningScans>0) { +void BusHandler::formatScanResult(ostringstream& output) { + if (m_runningScans > 0) { output << static_cast(m_runningScans) << " scan(s) still running" << endl; } bool first = true; for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master map::iterator it = m_scanResults.find(slave); if (it != m_scanResults.end()) { - if (first) + if (first) { first = false; - else + } else { output << endl; + } output << hex << setw(2) << setfill('0') << static_cast(slave) << it->second; } } if (first) { // fallback to autoscan results for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master - if (isValidAddress(slave, false) && !isMaster(slave) && (m_seenAddresses[slave]&SCAN_DONE)!=0) { + if (isValidAddress(slave, false) && !isMaster(slave) && (m_seenAddresses[slave]&SCAN_DONE) != 0) { Message* message = m_messages->getScanMessage(slave); - if (message!=NULL && message->getLastUpdateTime()>0) { - if (first) + if (message != NULL && message->getLastUpdateTime() > 0) { + if (first) { first = false; - else + } else { output << endl; + } output << hex << setw(2) << setfill('0') << static_cast(slave); message->decodeLastData(output, 0, true); } @@ -1021,12 +1016,11 @@ void BusHandler::formatScanResult(ostringstream& output) } } -void BusHandler::formatSeenInfo(ostringstream& output) -{ +void BusHandler::formatSeenInfo(ostringstream& output) { unsigned char address = 0; - for (int index=0; index<256; index++, address++) { + for (int index = 0; index < 256; index++, address++) { if (isValidAddress(address, false) - && ((m_seenAddresses[address]&SEEN)!=0 || (!m_device->isReadOnly() && (address==m_ownMasterAddress || address==m_ownSlaveAddress)))) { + && ((m_seenAddresses[address]&SEEN) != 0 || (!m_device->isReadOnly() && (address == m_ownMasterAddress || address == m_ownSlaveAddress)))) { output << endl << "address " << setfill('0') << setw(2) << hex << static_cast(address); unsigned char master; if (isMaster(address)) { @@ -1036,25 +1030,26 @@ void BusHandler::formatSeenInfo(ostringstream& output) output << ": slave"; master = getMasterAddress(address); } - if (master != SYN) + if (master != SYN) { output << " #" << setw(0) << dec << static_cast(getMasterNumber(master)); - if (!m_device->isReadOnly() && (address==m_ownMasterAddress || address==m_ownSlaveAddress)) { + } + if (!m_device->isReadOnly() && (address == m_ownMasterAddress || address == m_ownSlaveAddress)) { output << ", ebusd"; if (m_answer) { output << " (answering)"; } - if (m_addressConflict && (m_seenAddresses[address]&SEEN)!=0) { + if (m_addressConflict && (m_seenAddresses[address]&SEEN) != 0) { output << ", conflict"; } } - if ((m_seenAddresses[address]&SCAN_DONE)!=0) { + if ((m_seenAddresses[address]&SCAN_DONE) != 0) { output << ", scanned"; Message* message = m_messages->getScanMessage(address); - if (message!=NULL && message->getLastUpdateTime()>0) { + if (message != NULL && message->getLastUpdateTime() > 0) { // add detailed scan info: Manufacturer ID SW HW output << " \""; result_t result = message->decodeLastData(output, OF_NAMES); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { output << "\" error: " << getResultCode(result); } else { output << "\""; @@ -1062,45 +1057,46 @@ void BusHandler::formatSeenInfo(ostringstream& output) } } string loadedFiles = m_messages->getLoadedFiles(address); - if (!loadedFiles.empty()) + if (!loadedFiles.empty()) { output << ", loaded " << loadedFiles; + } } } } -result_t BusHandler::scanAndWait(unsigned char dstAddress, SymbolString& slave) -{ - if (!isValidAddress(dstAddress) || isMaster(dstAddress)) +result_t BusHandler::scanAndWait(unsigned char dstAddress, SymbolString& slave) { + if (!isValidAddress(dstAddress) || isMaster(dstAddress)) { return RESULT_ERR_INVALID_ADDR; + } m_seenAddresses[dstAddress] |= SCAN_INIT; Message* scanMessage = m_messages->getScanMessage(); - if (scanMessage==NULL) { + if (scanMessage == NULL) { return RESULT_ERR_NOTFOUND; } istringstream input; SymbolString master; result_t result = scanMessage->prepareMaster(m_ownMasterAddress, master, input, UI_FIELD_SEPARATOR, dstAddress); - if (result==RESULT_OK) { + if (result == RESULT_OK) { result = sendAndWait(master, slave); - if (result==RESULT_OK) { + if (result == RESULT_OK) { Message* message = m_messages->getScanMessage(dstAddress); - if (message!=NULL && message!=scanMessage) { + if (message != NULL && message != scanMessage) { scanMessage = message; scanMessage->storeLastData(pt_masterData, master, 0); // update the cache, expected to work since this is a clone } } - if (result!=RESULT_ERR_NO_SIGNAL) + if (result != RESULT_ERR_NO_SIGNAL) { m_seenAddresses[dstAddress] |= SCAN_DONE; + } } - if (result != RESULT_OK || slave.size() == 0) // avoid "invalid position" during decode + if (result != RESULT_OK || slave.size() == 0) { // avoid "invalid position" during decode return result; - + } return scanMessage->storeLastData(pt_slaveData, slave, 0); // update the cache } -bool BusHandler::enableGrab(bool enable) -{ - if (enable==m_grabMessages) { +bool BusHandler::enableGrab(bool enable) { + if (enable == m_grabMessages) { return false; } if (!enable) { @@ -1110,8 +1106,7 @@ bool BusHandler::enableGrab(bool enable) return true; } -void BusHandler::formatGrabResult(const bool unknown, ostringstream& output) -{ +void BusHandler::formatGrabResult(const bool unknown, ostringstream& output) { if (!m_grabMessages) { output << "grab disabled"; } else { @@ -1125,18 +1120,20 @@ void BusHandler::formatGrabResult(const bool unknown, ostringstream& output) } unsigned char BusHandler::getNextScanAddress(unsigned char lastAddress, bool& scanned) { - if (lastAddress==SYN) + if (lastAddress == SYN) { return SYN; - while (++lastAddress!=0) { // 0 is known to be a master - if (!isValidAddress(lastAddress, false) || isMaster(lastAddress)) + } + while (++lastAddress != 0) { // 0 is known to be a master + if (!isValidAddress(lastAddress, false) || isMaster(lastAddress)) { continue; - if ((m_seenAddresses[lastAddress]&(SEEN|LOAD_INIT))==SEEN) { - scanned = (m_seenAddresses[lastAddress]&SCAN_INIT)!=0; + } + if ((m_seenAddresses[lastAddress]&(SEEN|LOAD_INIT)) == SEEN) { + scanned = (m_seenAddresses[lastAddress]&SCAN_INIT) != 0; return lastAddress; } unsigned char master = getMasterAddress(lastAddress); - if (master!=SYN && (m_seenAddresses[master]&SEEN)!=0 && (m_seenAddresses[lastAddress]&LOAD_INIT)==0) { - scanned = (m_seenAddresses[lastAddress]&SCAN_INIT)!=0; + if (master != SYN && (m_seenAddresses[master]&SEEN) != 0 && (m_seenAddresses[lastAddress]&LOAD_INIT) == 0) { + scanned = (m_seenAddresses[lastAddress]&SCAN_INIT) != 0; return lastAddress; } } diff --git a/src/ebusd/bushandler.h b/src/ebusd/bushandler.h index 974f7ab7..c4780718 100644 --- a/src/ebusd/bushandler.h +++ b/src/ebusd/bushandler.h @@ -16,9 +16,14 @@ * along with this program. If not, see . */ -#ifndef BUSHANDLER_H_ -#define BUSHANDLER_H_ +#ifndef EBUSD_BUSHANDLER_H_ +#define EBUSD_BUSHANDLER_H_ +#include +#include +#include +#include +#include #include "message.h" #include "data.h" #include "symbol.h" @@ -26,10 +31,6 @@ #include "device.h" #include "queue.h" #include "thread.h" -#include -#include -#include -#include /** @file bushandler.h * Classes, functions, and constants related to handling of symbols on the eBUS. @@ -367,7 +368,7 @@ public: m_answer(answer), m_addressConflict(false), m_busLostRetries(busLostRetries), m_failedSendRetries(failedSendRetries), m_transferLatency(transferLatency), m_busAcquireTimeout(busAcquireTimeout), m_slaveRecvTimeout(slaveRecvTimeout), - m_masterCount(device->isReadOnly()?0:1), m_autoLockCount(lockCount==0), m_lockCount(lockCount<=3 ? 3 : lockCount), m_remainLockCount(m_autoLockCount), + m_masterCount(device->isReadOnly()?0:1), m_autoLockCount(lockCount == 0), m_lockCount(lockCount <= 3 ? 3 : lockCount), m_remainLockCount(m_autoLockCount), m_generateSynInterval(generateSyn ? SYN_TIMEOUT*getMasterNumber(ownAddress)+SYMBOL_DURATION : 0), m_pollInterval(pollInterval), m_lastReceive(0), m_lastPoll(0), m_currentRequest(NULL), m_runningScans(0), m_nextSendPos(0), @@ -386,15 +387,15 @@ public: stop(); join(); BusRequest* req; - while ((req = m_finishedRequests.pop())!=NULL) { + while ((req = m_finishedRequests.pop()) != NULL) { delete req; } - while ((req = m_nextRequests.pop())!=NULL) { + while ((req = m_nextRequests.pop()) != NULL) { if (req->m_deleteOnFinish) { delete req; } } - if (m_currentRequest!=NULL) { + if (m_currentRequest != NULL) { delete m_currentRequest; m_currentRequest = NULL; } @@ -420,7 +421,7 @@ public: * @param dstAddress the destination address to set, or @a SYN to keep the address defined during construction. * @return the result code. */ - result_t readFromBus(Message* message, string inputStr, const unsigned char dstAddress=SYN); + result_t readFromBus(Message* message, string inputStr, const unsigned char dstAddress = SYN); /** * Main thread entry. @@ -432,7 +433,7 @@ public: * @param full true for a full scan (all slaves), false for scanning only already seen slaves. * @return the result code. */ - result_t startScan(bool full=false); + result_t startScan(bool full = false); /** * Set the scan result @a string for a scanned slave address. @@ -471,7 +472,7 @@ public: * @param enable true to enable grabbing, false to disable it. * @return true when the grabbing was changed. */ - bool enableGrab(bool enable=true); + bool enableGrab(bool enable = true); /** * Format the grabbed messages to the @a ostringstream. @@ -539,7 +540,7 @@ private: * @param firstRepetition true if the first repetition of a message part is being started. * @return the result code. */ - result_t setState(BusState state, result_t result, bool firstRepetition=false); + result_t setState(BusState state, result_t result, bool firstRepetition = false); /** * Add a seen bus address. @@ -666,4 +667,4 @@ private: }; -#endif // BUSHANDLER_H_ +#endif // EBUSD_BUSHANDLER_H_ diff --git a/src/ebusd/datahandler.cpp b/src/ebusd/datahandler.cpp index a14fb2a1..f9b24be5 100644 --- a/src/ebusd/datahandler.cpp +++ b/src/ebusd/datahandler.cpp @@ -16,11 +16,12 @@ * along with this program. If not, see . */ -#include "datahandler.h" -#include #ifdef HAVE_CONFIG_H # include #endif + +#include "datahandler.h" +#include #ifdef HAVE_MQTT # include "mqtthandler.h" #endif @@ -38,21 +39,19 @@ static struct argp_child g_argp_children[ +1 ]; -const struct argp_child* datahandler_getargs() -{ +const struct argp_child* datahandler_getargs() { size_t count = 0; #ifdef HAVE_MQTT g_argp_children[count++] = *mqtthandler_getargs(); #endif - if (count>0) { + if (count > 0) { g_argp_children[count] = g_last_argp_child; return g_argp_children; } return NULL; } -bool datahandler_register(BusHandler* busHandler, MessageMap* messages, list& handlers) -{ +bool datahandler_register(BusHandler* busHandler, MessageMap* messages, list& handlers) { bool success = true; #ifdef HAVE_MQTT DataHandler* handler = mqtthandler_register(busHandler, messages); @@ -65,7 +64,6 @@ bool datahandler_register(BusHandler* busHandler, MessageMap* messages, list. */ -#ifndef DATAHANDLER_H_ -#define DATAHANDLER_H_ +#ifndef EBUSD_DATAHANDLER_H_ +#define EBUSD_DATAHANDLER_H_ +#include +#include +#include #include "bushandler.h" #include "message.h" -#include /** @file datahandler.h * Classes and functions for implementing and registering generic data sinks @@ -148,4 +150,4 @@ protected: }; -#endif // DATAHANDLER_H_ +#endif // EBUSD_DATAHANDLER_H_ diff --git a/src/ebusd/main.cpp b/src/ebusd/main.cpp index b39ef754..fc95d642 100644 --- a/src/ebusd/main.cpp +++ b/src/ebusd/main.cpp @@ -21,19 +21,22 @@ #endif #include "main.h" -#include "mainloop.h" -#include "bushandler.h" -#include "log.h" -#include "rotatefile.h" +#include +#include +#include #include #include #include #include #include #include -#include -#include -#include +#include +#include +#include +#include "mainloop.h" +#include "bushandler.h" +#include "log.h" +#include "rotatefile.h" /** the path and name of the PID file. */ #ifdef PACKAGE_PIDFILE @@ -207,8 +210,7 @@ static map s_templatesByPath; * @param arg the option argument, or NULL. * @param state the parsing state. */ -error_t parse_opt(int key, char *arg, struct argp_state *state) -{ +error_t parse_opt(int key, char *arg, struct argp_state *state) { struct options *opt = (struct options*)state->input; result_t result = RESULT_OK; @@ -278,8 +280,9 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) } break; case O_CHKCFG: // --checkconfig - if (opt->checkConfig==0) + if (opt->checkConfig == 0) { opt->checkConfig = 1; + } break; case O_DMPCFG: // --dumpconfig opt->checkConfig = 2; @@ -466,8 +469,7 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) return 0; } -void daemonize() -{ +void daemonize() { // fork off the parent process pid_t pid = fork(); @@ -477,9 +479,9 @@ void daemonize() } // If we got a good PID, then we can exit the parent process - if (pid > 0) + if (pid > 0) { exit(EXIT_SUCCESS); - + } // At this point we are executing as the child process // Create a new SID for the child process and @@ -509,7 +511,7 @@ void daemonize() if (pidFile != NULL) { setbuf(pidFile, NULL); // disable buffering if (lockf(fileno(pidFile), F_TLOCK, 0) < 0 - || fprintf(pidFile, "%d\n", getpid()) <=0) { + || fprintf(pidFile, "%d\n", getpid()) <= 0) { fclose(pidFile); pidFile = NULL; } @@ -522,12 +524,11 @@ void daemonize() isDaemon = true; } -void closePidFile() -{ +void closePidFile() { if (pidFile != NULL) { - if (fclose(pidFile) != 0) + if (fclose(pidFile) != 0) { return; - + } remove(opt.pidFile); } } @@ -535,20 +536,19 @@ void closePidFile() /** * Helper method performing shutdown. */ -void shutdown() -{ +void shutdown() { // stop main loop and all dependent components if (s_mainLoop != NULL) { delete s_mainLoop; s_mainLoop = NULL; } - if (s_messageMap!=NULL) { + if (s_messageMap != NULL) { delete s_messageMap; s_messageMap = NULL; } // free templates for (map::iterator it = s_templatesByPath.begin(); it != s_templatesByPath.end(); it++) { - if (it->second!=&s_globalTemplates) { + if (it->second != &s_globalTemplates) { delete it->second; } it->second = NULL; @@ -573,8 +573,7 @@ void shutdown() * The signal handling function. * @param sig the received signal. */ -void signalHandler(int sig) -{ +void signalHandler(int sig) { switch (sig) { case SIGHUP: logNotice(lf_main, "SIGHUP received"); @@ -604,37 +603,36 @@ void signalHandler(int sig) * @return the result code. */ static result_t collectConfigFiles(const string path, const string prefix, const string extension, - vector& files, vector* dirs=NULL, bool* hasTemplates=NULL) -{ - + vector& files, vector* dirs = NULL, bool* hasTemplates = NULL) { DIR* dir = opendir(path.c_str()); - if (dir == NULL) + if (dir == NULL) { return RESULT_ERR_NOTFOUND; - + } dirent* d; while ((d = readdir(dir)) != NULL) { string name = d->d_name; - if (name == "." || name == "..") + if (name == "." || name == "..") { continue; - + } const string p = path + "/" + name; struct stat stat_buf; - if (stat(p.c_str(), &stat_buf) != 0) + if (stat(p.c_str(), &stat_buf) != 0) { continue; - + } if (S_ISDIR(stat_buf.st_mode)) { - if (dirs!=NULL) + if (dirs != NULL) { dirs->push_back(p); - } else if (S_ISREG(stat_buf.st_mode) && name.length()>=extension.length() - && name.substr(name.length()-extension.length())==extension) { - if (name=="_templates"+extension) { + } + } else if (S_ISREG(stat_buf.st_mode) && name.length() >= extension.length() + && name.substr(name.length()-extension.length()) == extension) { + if (name == "_templates"+extension) { if (hasTemplates) { *hasTemplates = true; } - } else if (prefix.length()==0 || (name.length()>=prefix.length() && name.substr(0, prefix.length())==prefix)) { + } else if (prefix.length() == 0 || (name.length() >= prefix.length() && name.substr(0, prefix.length()) == prefix)) { files.push_back(p); } } @@ -647,11 +645,11 @@ static result_t collectConfigFiles(const string path, const string prefix, const DataFieldTemplates* getTemplates(const string filename) { string path; size_t pos = filename.find_last_of('/'); - if (pos!=string::npos) { + if (pos != string::npos) { path = filename.substr(0, pos); } map::iterator it = s_templatesByPath.find(path); - if (it!=s_templatesByPath.end()) { + if (it != s_templatesByPath.end()) { return it->second; } return &s_globalTemplates; @@ -666,13 +664,13 @@ DataFieldTemplates* getTemplates(const string filename) { * @return false when the templates for the path were already loaded before, true when the templates for the path were added (independent from @a available). * @return the @a DataFieldTemplates. */ -static bool readTemplates(const string path, const string extension, bool available, bool verbose=false) { +static bool readTemplates(const string path, const string extension, bool available, bool verbose = false) { map::iterator it = s_templatesByPath.find(path); - if (it!=s_templatesByPath.end()) { + if (it != s_templatesByPath.end()) { return false; } DataFieldTemplates* templates; - if (path==opt.configPath || !available) { + if (path == opt.configPath || !available) { templates = &s_globalTemplates; } else { templates = new DataFieldTemplates(s_globalTemplates); @@ -700,40 +698,40 @@ static bool readTemplates(const string path, const string extension, bool availa * @param verbose whether to verbosely log problems. * @return the result code. */ -static result_t readConfigFiles(const string path, const string extension, MessageMap* messages, bool recursive, bool verbose) -{ +static result_t readConfigFiles(const string path, const string extension, MessageMap* messages, bool recursive, bool verbose) { vector files, dirs; bool hasTemplates = false; result_t result = collectConfigFiles(path, "", extension, files, &dirs, &hasTemplates); - if (result!=RESULT_OK) + if (result != RESULT_OK) { return result; - + } readTemplates(path, extension, hasTemplates, verbose); for (vector::iterator it = files.begin(); it != files.end(); it++) { string name = *it; logInfo(lf_main, "reading file %s", name.c_str()); result_t result = messages->readFromFile(name, verbose); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } } if (recursive) { for (vector::iterator it = dirs.begin(); it != dirs.end(); it++) { string name = *it; logInfo(lf_main, "reading dir %s", name.c_str()); result_t result = readConfigFiles(name, extension, messages, true, verbose); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } } } return RESULT_OK; -}; +} /** * Helper method for immediate reading of a @a Message from the bus. * @param message the @a Message to read. */ -void readMessage(Message* message) -{ +void readMessage(Message* message) { if (!s_mainLoop || !message) { return; } @@ -749,8 +747,7 @@ void readMessage(Message* message) * @param messages the @a MessageMap instance. * @param verbose whether to verbosely log all problems. */ -void executeInstructions(MessageMap* messages, bool verbose) -{ +void executeInstructions(MessageMap* messages, bool verbose) { result_t result = messages->resolveConditions(verbose); if (result != RESULT_OK) { logError(lf_main, "error resolving conditions: %s, last error: %s", getResultCode(result), messages->getLastError().c_str()); @@ -765,13 +762,12 @@ void executeInstructions(MessageMap* messages, bool verbose) logNotice(lf_main, "found messages: %d (%d conditional on %d conditions, %d poll, %d update)", messages->size(), messages->sizeConditional(), messages->sizeConditions(), messages->sizePoll(), messages->sizePassive()); } -result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive) -{ +result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive) { logInfo(lf_main, "loading configuration files from %s", opt.configPath); messages->clear(); s_globalTemplates.clear(); for (map::iterator it = s_templatesByPath.begin(); it != s_templatesByPath.end(); it++) { - if (it->second!=&s_globalTemplates) { + if (it->second != &s_globalTemplates) { delete it->second; } it->second = NULL; @@ -788,19 +784,18 @@ result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive) return RESULT_OK; } -result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolString& data, string& relativeFile, bool verbose) -{ +result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolString& data, string& relativeFile, bool verbose) { PartType partType; if (isMaster(address)) { address = (unsigned char)(data[0]+5); // slave address of sending master partType = pt_masterData; - if (data.size()<5+1+5+2+2) { // skip QQ ZZ PB SB NN + if (data.size() < 5+1+5+2+2) { // skip QQ ZZ PB SB NN logError(lf_main, "unable to load scan config %2.2x: master part too short", address); return RESULT_EMPTY; } } else { partType = pt_slaveData; - if (data.size()<1+1+5+2+2) { // skip NN + if (data.size() < 1+1+5+2+2) { // skip NN logError(lf_main, "unable to load scan config %2.2x: slave part too short", address); return RESULT_EMPTY; } @@ -812,9 +807,10 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS unsigned char offset = 0; size_t field = 0; result_t result = (*identFields)[field]->read(partType, data, offset, out, 0); // manufacturer name - if (result==RESULT_ERR_NOTFOUND) + if (result == RESULT_ERR_NOTFOUND) { result = (*identFields)[field]->read(partType, data, offset, out, OF_NUMERIC); // manufacturer name - if (result==RESULT_OK) { + } + if (result == RESULT_OK) { path = out.str(); transform(path.begin(), path.end(), path.begin(), ::tolower); path = string(opt.configPath) + "/" + path; @@ -826,17 +822,17 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS offset = (unsigned char)(offset+(*identFields)[field++]->getLength(partType)); result = (*identFields)[field]->read(partType, data, offset, out, 0); // identification string } - if (result==RESULT_OK) { + if (result == RESULT_OK) { ident = out.str(); out.str(""); offset = (unsigned char)(offset+(*identFields)[field++]->getLength(partType)); result = (*identFields)[field]->read(partType, data, offset, sw, 0); // software version number } - if (result==RESULT_OK) { + if (result == RESULT_OK) { offset = (unsigned char)(offset+(*identFields)[field++]->getLength(partType)); result = (*identFields)[field]->read(partType, data, offset, hw, 0); // hardware version number } - if (result!=RESULT_OK) { + if (result != RESULT_OK) { logError(lf_main, "unable to load scan config %2.2x: decode %s", address, getResultCode(result)); return result; } @@ -844,7 +840,7 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS bool hasTemplates = false; // find files matching MANUFACTURER/ZZ.*csv in cfgpath result = collectConfigFiles(path, prefix, ".csv", files, NULL, &hasTemplates); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { logError(lf_main, "unable to load scan config %2.2x: list files in %s %s", address, path.c_str(), getResultCode(result)); return result; } @@ -853,7 +849,7 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS return RESULT_ERR_NOTFOUND; } logDebug(lf_main, "found %d matching scan config files from %s with prefix %s: %s", files.size(), path.c_str(), prefix.c_str(), getResultCode(result)); - for (string::iterator it = ident.begin(); it!=ident.end(); it++) { + for (string::iterator it = ident.begin(); it != ident.end(); it++) { if (::isspace(*it)) { ident.erase(it--); } else { @@ -863,7 +859,7 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS // complete name: cfgpath/MANUFACTURER/ZZ[.C[C[C[C[C]]]]][.circuit][.suffix][.*][.SWxxxx][.HWxxxx][.*].csv size_t bestMatch = 0; string best; - for (vector::iterator it = files.begin(); it!=files.end(); it++) { + for (vector::iterator it = files.begin(); it != files.end(); it++) { string name = *it; unsigned char checkDest; string checkIdent, useCircuit, useSuffix; @@ -871,20 +867,21 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS if (!FileReader::extractDefaultsFromFilename(name.substr(path.length()+1), checkDest, checkIdent, useCircuit, useSuffix, checkSw, checkHw)) { continue; } - if (address!=checkDest || (checkSw!=UINT_MAX && sw!=checkSw) || (checkHw!=UINT_MAX && hw!=checkHw)) { + if (address != checkDest || (checkSw != UINT_MAX && sw != checkSw) || (checkHw != UINT_MAX && hw != checkHw)) { continue; } size_t match = 1; if (!checkIdent.empty()) { string remain = ident; bool matches = false; - while (remain.length()>0 && remain.length()>=checkIdent.length()) { - if (checkIdent==remain) { + while (remain.length() > 0 && remain.length() >= checkIdent.length()) { + if (checkIdent == remain) { matches = true; break; } - if (remain[remain.length()-1]<'0' || remain[remain.length()-1]>'9') + if (remain[remain.length()-1] < '0' || remain[remain.length()-1] > '9') { break; + } remain.erase(remain.length()-1); // remove trailing digit } if (!matches) { @@ -892,7 +889,7 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS } match += remain.length(); } - if (match>=bestMatch) { + if (match >= bestMatch) { bestMatch = match; best = name; } @@ -908,25 +905,27 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS bool readCommon = readTemplates(path, ".csv", hasTemplates, opt.checkConfig); if (readCommon) { result = collectConfigFiles(path, "", ".csv", files); - if (result==RESULT_OK && !files.empty()) { - for (vector::iterator it = files.begin(); it!=files.end(); it++) { + if (result == RESULT_OK && !files.empty()) { + for (vector::iterator it = files.begin(); it != files.end(); it++) { string name = *it; name = name.substr(path.length()+1, name.length()-path.length()-strlen(".csv")); // *. - if (name=="_templates.") // skip templates + if (name == "_templates.") { // skip templates continue; - if (name.length()<3 || name.find_first_of('.')!=2) { // different from the scheme "ZZ." + } + if (name.length() < 3 || name.find_first_of('.') != 2) { // different from the scheme "ZZ." name = *it; result = messages->readFromFile(name, opt.checkConfig); - if (result==RESULT_OK) + if (result == RESULT_OK) { logNotice(lf_main, "read common config file %s", name.c_str()); - else + } else { logError(lf_main, "error reading common config file %s: %s", name.c_str(), getResultCode(result)); + } } } } } result = messages->readFromFile(best, opt.checkConfig, "", ident); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { logError(lf_main, "error reading scan config file %s for ID \"%s\", SW%4.4d, HW%4.4d: %s", best.c_str(), ident.c_str(), sw, hw, getResultCode(result)); return result; } @@ -943,8 +942,7 @@ result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolS * @param argc the number of command line arguments. * @param argv the command line arguments. */ -int main(int argc, char* argv[]) -{ +int main(int argc, char* argv[]) { struct argp aargp = { argpoptions, parse_opt, NULL, argpdoc, datahandler_getargs(), NULL, NULL }; int arg_index = -1; setenv("ARGP_HELP_FMT", "no-dup-args-note", 0); @@ -963,20 +961,20 @@ int main(int argc, char* argv[]) // check scan config for each passed ident message string arg = argv[arg_index++]; size_t pos = arg.find_first_of('/'); - if (pos==string::npos) { + if (pos == string::npos) { logError(lf_main, "invalid scan message %s: missing \"/\"", arg.c_str()); continue; } SymbolString master(false), slave(false); result_t res = master.parseHex(arg.substr(0, pos)); - if (res==RESULT_OK) { + if (res == RESULT_OK) { res = slave.parseHex(arg.substr(pos+1)); } - if (res!=RESULT_OK) { + if (res != RESULT_OK) { logError(lf_main, "invalid scan message %s: %s", arg.c_str(), getResultCode(res)); continue; } - if (master.size()<5) { // skip QQ ZZ PB SB NN + if (master.size() < 5) { // skip QQ ZZ PB SB NN logError(lf_main, "invalid scan message %s: master part too short", arg.c_str()); continue; } @@ -988,7 +986,7 @@ int main(int argc, char* argv[]) message->storeLastData(master, slave); string file; res = loadScanConfigFile(s_messageMap, address, slave, file, true); - if (res==RESULT_OK) { + if (res == RESULT_OK) { logInfo(lf_main, "scan config %2.2x: file %s loaded", address, file.c_str()); } } @@ -1027,7 +1025,7 @@ int main(int argc, char* argv[]) // load configuration files loadConfigFiles(s_messageMap); - if (s_messageMap->sizeConditions()>0 && opt.pollInterval==0) { + if (s_messageMap->sizeConditions() > 0 && opt.pollInterval == 0) { logError(lf_main, "conditions require a poll interval > 0"); } // wait for end of MainLoop diff --git a/src/ebusd/main.h b/src/ebusd/main.h index 4a926376..f669627f 100644 --- a/src/ebusd/main.h +++ b/src/ebusd/main.h @@ -16,19 +16,19 @@ * along with this program. If not, see . */ -#ifndef MAIN_H_ -#define MAIN_H_ +#ifndef EBUSD_MAIN_H_ +#define EBUSD_MAIN_H_ -#include "result.h" +#include +#include #include "data.h" #include "message.h" -#include +#include "result.h" /** \file main.h */ /** A structure holding all program options. */ -struct options -{ +struct options { const char* device; //!< eBUS device (serial device or [udp:]ip:port) [/dev/ttyUSB0] bool noDeviceCheck; //!< skip serial eBUS device test bool readOnly; //!< read-only access to the device @@ -38,7 +38,7 @@ struct options const char* configPath; //!< path to CSV configuration files [/etc/ebusd] bool scanConfig; //!< pick configuration files matching initial scan unsigned char initialScan; //!< the initial address to scan for scanconfig (@a ESC=none, 0xfe=broadcast ident, @a SYN=full scan, else: single slave address) - int checkConfig; //!< check CSV config files (!=0) and optionally dump (2), then stop + int checkConfig; //!< check CSV config files ( != 0) and optionally dump (2), then stop int pollInterval; //!< poll interval in seconds, 0 to disable [5] unsigned char address; //!< own bus address [31] @@ -83,7 +83,7 @@ DataFieldTemplates* getTemplates(const string filename); * @param denyRecursive whether to avoid loading all files recursively (e.g. for scan config check). * @return the result code. */ -result_t loadConfigFiles(MessageMap* messages, bool verbose=false, bool denyRecursive=false); +result_t loadConfigFiles(MessageMap* messages, bool verbose = false, bool denyRecursive = false); /** * Load the message definitions from a configuration file matching the scan result. @@ -94,6 +94,6 @@ result_t loadConfigFiles(MessageMap* messages, bool verbose=false, bool denyRecu * @param verbose whether to verbosely log problems. * @return the result code. */ -result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolString& data, string& relativeFile, bool verbose=false); +result_t loadScanConfigFile(MessageMap* messages, unsigned char address, SymbolString& data, string& relativeFile, bool verbose = false); -#endif // MAIN_H_ +#endif // EBUSD_MAIN_H_ diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index d4d6bf5f..e4a26b68 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -16,8 +16,13 @@ * along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include "mainloop.h" #include +#include #include "main.h" #include "log.h" #include "data.h" @@ -60,8 +65,7 @@ static const size_t columnCount = sizeof(columnNames) / sizeof(char*); MainLoop::MainLoop(const struct options opt, Device *device, MessageMap* messages) : Thread(), m_device(device), m_reconnectCount(0), m_messages(messages), m_address(opt.address), m_scanConfig(opt.scanConfig), - m_initialScan(opt.initialScan), m_enableHex(opt.enableHex) -{ + m_initialScan(opt.initialScan), m_enableHex(opt.enableHex) { // open Device result_t result = m_device->open(); if (result != RESULT_OK) { @@ -75,7 +79,7 @@ MainLoop::MainLoop(const struct options opt, Device *device, MessageMap* message } else { m_dumpFile = NULL; } - if (opt.logRawFile[0] && strcmp(opt.logRawFile, opt.logFile)!=0) { + if (opt.logRawFile[0] && strcmp(opt.logRawFile, opt.logFile) != 0) { m_logRawFile = new RotateFile(opt.logRawFile, opt.logRawSize, true); } else { m_logRawFile = NULL; @@ -83,7 +87,7 @@ MainLoop::MainLoop(const struct options opt, Device *device, MessageMap* message m_logRawEnabled = opt.logRaw; // create BusHandler unsigned int latency; - if (opt.latency<0) { + if (opt.latency < 0) { latency = device->getLatency(); } else { latency = (unsigned int)opt.latency; @@ -105,8 +109,7 @@ MainLoop::MainLoop(const struct options opt, Device *device, MessageMap* message } } -MainLoop::~MainLoop() -{ +MainLoop::~MainLoop() { join(); for (list::iterator it = m_dataHandlers.begin(); it != m_dataHandlers.end(); it++) { @@ -133,13 +136,12 @@ MainLoop::~MainLoop() m_device = NULL; } NetMessage* msg; - while ((msg = m_netQueue.pop())!=NULL) { + while ((msg = m_netQueue.pop()) != NULL) { delete msg; } } -void MainLoop::run() -{ +void MainLoop::run() { bool reload = true; time_t lastTaskRun, now, lastSignal = 0, since, sinkSince = 1; int taskDelay = 5; @@ -161,9 +163,9 @@ void MainLoop::run() // pick the next message to handle NetMessage* netMessage = m_netQueue.pop(taskDelay); time(&now); - if (nowgetNextScanAddress(lastScanAddress, scanned); - if (lastScanAddress==SYN) { + if (lastScanAddress == SYN) { taskDelay = 5; lastScanAddress = 0; } else { @@ -212,13 +214,13 @@ void MainLoop::run() if (scanned) { Message* message = m_messages->getScanMessage(lastScanAddress); slave = message->getLastSlaveData(); - scanned = message->getLastUpdateTime()>0; + scanned = message->getLastUpdateTime() > 0; } else { result_t result = m_busHandler->scanAndWait(lastScanAddress, slave); taskDelay = (result == RESULT_ERR_NO_SIGNAL) ? 10 : 1; - if (result!=RESULT_OK) + if (result != RESULT_OK) { logError(lf_main, "scan config %2.2x message: %s", lastScanAddress, getResultCode(result)); - else { + } else { scanned = true; logInfo(lf_main, "scan config %2.2x message received", lastScanAddress); } @@ -226,7 +228,7 @@ void MainLoop::run() if (scanned) { string file; result_t result = loadScanConfigFile(m_messages, lastScanAddress, slave, file); - if (result==RESULT_OK) { + if (result == RESULT_OK) { logNotice(lf_main, "scan config %2.2x: file %s loaded", lastScanAddress, file.c_str()); m_busHandler->setScanConfigLoaded(lastScanAddress, file); } else { @@ -248,7 +250,7 @@ void MainLoop::run() } sinkSince = now; } - if (netMessage==NULL) { + if (netMessage == NULL) { continue; } string request = netMessage->getRequest(); @@ -292,14 +294,13 @@ void MainLoop::run() } } -void MainLoop::notifyDeviceData(const unsigned char byte, bool received) -{ +void MainLoop::notifyDeviceData(const unsigned char byte, bool received) { if (received && m_dumpFile) { m_dumpFile->write((unsigned char*)&byte, 1); } if (m_logRawFile) { m_logRawFile->write((unsigned char*)&byte, 1, received); - } else if (m_logRawEnabled){ + } else if (m_logRawEnabled) { if (received) { logNotice(lf_bus, "<%02x", byte); } else { @@ -308,8 +309,7 @@ void MainLoop::notifyDeviceData(const unsigned char byte, bool received) } } -string MainLoop::decodeMessage(const string& data, const bool isHttp, bool& connected, bool& listening, bool& reload) -{ +string MainLoop::decodeMessage(const string& data, const bool isHttp, bool& connected, bool& listening, bool& reload) { // prepare data string token, previous; istringstream stream(data); @@ -326,85 +326,99 @@ string MainLoop::decodeMessage(const string& data, const bool isHttp, bool& conn escaped = false; } token = previous + " " + token; - } - else if (token.length() == 0) // allow multiple space chars for a single delimiter + } else if (token.length() == 0) { // allow multiple space chars for a single delimiter continue; - else if (token[0] == '"') { + } else if (token[0] == '"') { token.erase(0, 1); - if (token.length() > 0 && token[token.length()-1] == '"') + if (token.length() > 0 && token[token.length()-1] == '"') { token.erase(token.length() - 1, 1); - else + } else { escaped = true; + } } } args.push_back(token); previous = token; - if (isHttp) + if (isHttp) { delim = (args.size() == 1) ? '?' : '\n'; + } } if (isHttp) { const char* str = args.size() > 0 ? args[0].c_str() : ""; - if (strcmp(str, "GET") == 0) + if (strcmp(str, "GET") == 0) { return executeGet(args, connected); - + } connected = false; return "HTTP/1.0 405 Method Not Allowed\r\n\r\n"; } - if (args.size() == 0) + if (args.size() == 0) { return executeHelp(); - + } const char* str = args[0].c_str(); if (args.size() == 2) { // check for "CMD -h" - if (strcasecmp(args[1].c_str(), "-h") == 0 || strcasecmp(args[1].c_str(), "-?") == 0 || strcasecmp(args[1].c_str(), "--help") == 0) + if (strcasecmp(args[1].c_str(), "-h") == 0 || strcasecmp(args[1].c_str(), "-?") == 0 || strcasecmp(args[1].c_str(), "--help") == 0) { args.clear(); // empty args is used as command help indicator - else if (strcasecmp(args[0].c_str(), "H") == 0 || strcasecmp(args[0].c_str(), "HELP") == 0) { // check for "HELP CMD" + } else if (strcasecmp(args[0].c_str(), "H") == 0 || strcasecmp(args[0].c_str(), "HELP") == 0) { // check for "HELP CMD" str = args[1].c_str(); args.clear(); // empty args is used as command help indicator } } - if (strcasecmp(str, "R") == 0 || strcasecmp(str, "READ") == 0) + if (strcasecmp(str, "R") == 0 || strcasecmp(str, "READ") == 0) { return executeRead(args); - if (strcasecmp(str, "W") == 0 || strcasecmp(str, "WRITE") == 0) + } + if (strcasecmp(str, "W") == 0 || strcasecmp(str, "WRITE") == 0) { return executeWrite(args); + } if (strcasecmp(str, "HEX") == 0) { - if (m_enableHex) + if (m_enableHex) { return executeHex(args); + } return "ERR: command not enabled"; } - if (strcasecmp(str, "F") == 0 || strcasecmp(str, "FIND") == 0) + if (strcasecmp(str, "F") == 0 || strcasecmp(str, "FIND") == 0) { return executeFind(args); - if (strcasecmp(str, "L") == 0 || strcasecmp(str, "LISTEN") == 0) + } + if (strcasecmp(str, "L") == 0 || strcasecmp(str, "LISTEN") == 0) { return executeListen(args, listening); - if (strcasecmp(str, "S") == 0 || strcasecmp(str, "STATE") == 0) + } + if (strcasecmp(str, "S") == 0 || strcasecmp(str, "STATE") == 0) { return executeState(args); - if (strcasecmp(str, "G") == 0 || strcasecmp(str, "GRAB") == 0) + } + if (strcasecmp(str, "G") == 0 || strcasecmp(str, "GRAB") == 0) { return executeGrab(args); - if (strcasecmp(str, "SCAN") == 0) + } + if (strcasecmp(str, "SCAN") == 0) { return executeScan(args); - if (strcasecmp(str, "LOG") == 0) + } + if (strcasecmp(str, "LOG") == 0) { return executeLog(args); - if (strcasecmp(str, "RAW") == 0) + } + if (strcasecmp(str, "RAW") == 0) { return executeRaw(args); - if (strcasecmp(str, "DUMP") == 0) + } + if (strcasecmp(str, "DUMP") == 0) { return executeDump(args); + } if (strcasecmp(str, "RELOAD") == 0) { reload = true; return executeReload(args); } - if (strcasecmp(str, "Q") == 0 || strcasecmp(str, "QUIT") == 0) + if (strcasecmp(str, "Q") == 0 || strcasecmp(str, "QUIT") == 0) { return executeQuit(args, connected); - if (strcasecmp(str, "I") == 0 || strcasecmp(str, "INFO") == 0) + } + if (strcasecmp(str, "I") == 0 || strcasecmp(str, "INFO") == 0) { return executeInfo(args); - if (strcasecmp(str, "H") == 0 || strcasecmp(str, "HELP") == 0) + } + if (strcasecmp(str, "H") == 0 || strcasecmp(str, "HELP") == 0) { return executeHelp(); + } return "ERR: command not found"; } -result_t MainLoop::parseHexMaster(vector &args, size_t argPos, SymbolString& master) -{ +result_t MainLoop::parseHexMaster(vector &args, size_t argPos, SymbolString& master) { ostringstream msg; while (argPos < args.size()) { if ((args[argPos].length() % 2) != 0) { @@ -412,25 +426,25 @@ result_t MainLoop::parseHexMaster(vector &args, size_t argPos, SymbolStr } msg << args[argPos++]; } - if (msg.str().size() < 4*2) // at least ZZ, PB, SB, NN + if (msg.str().size() < 4*2) { // at least ZZ, PB, SB, NN return RESULT_ERR_INVALID_ARG; - + } 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 && (4+length)*2 != msg.str().size()) { return RESULT_ERR_INVALID_ARG; - + } ret = master.push_back(m_address, false); - if (ret == RESULT_OK) + if (ret == RESULT_OK) { ret = master.parseHex(msg.str()); - if (ret == RESULT_OK && !isValidAddress(master[1])) + } + if (ret == RESULT_OK && !isValidAddress(master[1])) { ret = RESULT_ERR_INVALID_ADDR; - + } return ret; } -string MainLoop::executeRead(vector &args) -{ +string MainLoop::executeRead(vector &args) { size_t argPos = 1; bool hex = false, numeric = false; OutputFormat verbosity = 0; @@ -469,8 +483,7 @@ string MainLoop::executeRead(vector &args) argPos = 0; // print usage break; } - } - else { + } else { argPos = 0; // print usage break; } @@ -489,8 +502,9 @@ string MainLoop::executeRead(vector &args) } result_t ret; dstAddress = (unsigned char)parseInt(args[argPos].c_str(), 16, 0, 0xff, ret); - if (ret != RESULT_OK || !isValidAddress(dstAddress) || isMaster(dstAddress)) + if (ret != RESULT_OK || !isValidAddress(dstAddress) || isMaster(dstAddress)) { return getResultCode(RESULT_ERR_INVALID_ADDR); + } } else if (args[argPos] == "-p") { argPos++; if (argPos >= args.size()) { @@ -499,8 +513,9 @@ string MainLoop::executeRead(vector &args) } result_t ret; pollPriority = (unsigned char)parseInt(args[argPos].c_str(), 10, 1, 9, ret); - if (ret != RESULT_OK) + if (ret != RESULT_OK) { return getResultCode(RESULT_ERR_INVALID_NUM); + } } else if (args[argPos] == "-i") { argPos++; if (argPos >= args.size()) { @@ -524,22 +539,26 @@ string MainLoop::executeRead(vector &args) if (hex && argPos > 0) { SymbolString cacheMaster(false); result_t ret = parseHexMaster(args, argPos, cacheMaster); - if (ret != RESULT_OK) + if (ret != RESULT_OK) { return getResultCode(ret); - if (cacheMaster[1] == BROADCAST || isMaster(cacheMaster[1])) + } + if (cacheMaster[1] == BROADCAST || isMaster(cacheMaster[1])) { return getResultCode(RESULT_ERR_INVALID_ARG); - + } logNotice(lf_main, "read hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); // find message Message* message = m_messages->find(cacheMaster, false, true, false, false); - if (message == NULL) + if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); - if (message->isWrite()) + } + if (message->isWrite()) { return getResultCode(RESULT_ERR_INVALID_ARG); - if (circuit.length() > 0 && circuit!=message->getCircuit()) + } + if (circuit.length() > 0 && circuit != message->getCircuit()) { return getResultCode(RESULT_ERR_INVALID_ARG); // non-matching circuit + } if (message->getLastUpdateTime() + maxAge > now || (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()); @@ -555,18 +574,20 @@ string MainLoop::executeRead(vector &args) if (ret == RESULT_OK) { ret = message->storeLastData(cacheMaster, slave); ostringstream result; - if (ret==RESULT_OK) + if (ret == RESULT_OK) { ret = message->decodeLastData(result); - if (ret >= RESULT_OK) + } + if (ret >= RESULT_OK) { logInfo(lf_main, "read hex %s %s cache update: %s", message->getCircuit().c_str(), message->getName().c_str(), result.str().c_str()); - else + } else { 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); } logError(lf_main, "read hex %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); return getResultCode(ret); } - if (argPos == 0 || args.size() < argPos + 1 || args.size() > argPos + 2) + if (argPos == 0 || args.size() < argPos + 1 || args.size() > argPos + 2) { return "usage: read [-f] [-m SECONDS] [-c CIRCUIT] [-d ZZ] [-p PRIO] [-v|-V] [-n] [-i VALUE[;VALUE]*] NAME [FIELD[.N]]\n" " or: read [-f] [-m SECONDS] [-c CIRCUIT] -h ZZPBSBNNDx\n" " Read value(s) or hex message.\n" @@ -587,7 +608,7 @@ string MainLoop::executeRead(vector &args) " PB SB primary/secondary command byte\n" " NN number of following data bytes\n" " Dx data byte(s) to send"; - + } string fieldName; signed char fieldIndex = -2; if (args.size() == argPos + 2) { @@ -597,8 +618,9 @@ string MainLoop::executeRead(vector &args) if (pos != string::npos) { result_t result = RESULT_OK; fieldIndex = (char)parseInt(fieldName.substr(pos+1).c_str(), 10, 0, MAX_POS, result); - if (result == RESULT_OK) + if (result == RESULT_OK) { fieldName = fieldName.substr(0, pos); + } } } @@ -620,49 +642,51 @@ string MainLoop::executeRead(vector &args) if (verbosity & OF_NAMES) { result << cacheMessage->getCircuit() << " " << cacheMessage->getName() << " "; } - result_t ret = cacheMessage->decodeLastData(result, verbosity|(numeric?OF_NUMERIC:0), false, fieldIndex==-2 ? NULL : fieldName.c_str(), fieldIndex); + result_t ret = cacheMessage->decodeLastData(result, verbosity|(numeric?OF_NUMERIC:0), false, fieldIndex == -2 ? NULL : fieldName.c_str(), fieldIndex); if (ret != RESULT_OK) { - if (ret < RESULT_OK) + if (ret < RESULT_OK) { logError(lf_main, "read %s %s cached: %s", cacheMessage->getCircuit().c_str(), cacheMessage->getName().c_str(), getResultCode(ret)); + } return getResultCode(ret); } logInfo(lf_main, "read %s %s cached: %s", cacheMessage->getCircuit().c_str(), cacheMessage->getName().c_str(), result.str().c_str()); return result.str(); } - if (message == NULL && hasCache) + if (message == NULL && hasCache) { return "ERR: no data stored"; - // else: read directly from bus + } // else: read directly from bus } - if (message == NULL) + if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); - if (message->getDstAddress()==SYN && dstAddress==SYN) + } + if (message->getDstAddress() == SYN && dstAddress == SYN) { return getResultCode(RESULT_ERR_INVALID_ADDR); - + } // read directly from bus result_t ret = m_busHandler->readFromBus(message, params, dstAddress); - if (ret != RESULT_OK) + if (ret != RESULT_OK) { return getResultCode(ret); - + } if (verbosity & OF_NAMES) { result << message->getCircuit() << " " << message->getName() << " "; } - ret = message->decodeLastData(pt_slaveData, result, verbosity|(numeric?OF_NUMERIC:0), false, fieldIndex==-2 ? NULL : fieldName.c_str(), fieldIndex); + ret = message->decodeLastData(pt_slaveData, result, verbosity|(numeric?OF_NUMERIC:0), false, fieldIndex == -2 ? NULL : fieldName.c_str(), fieldIndex); if (ret < RESULT_OK) { logError(lf_main, "read %s %s: decode %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); result.str(""); result << getResultCode(ret) << " in decode"; return result.str(); } - if (ret > RESULT_OK) + if (ret > RESULT_OK) { return getResultCode(ret); + } logInfo(lf_main, "read %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), result.str().c_str()); return result.str(); } -string MainLoop::executeWrite(vector &args) -{ +string MainLoop::executeWrite(vector &args) { size_t argPos = 1; bool hex = false; string circuit; @@ -678,8 +702,9 @@ string MainLoop::executeWrite(vector &args) } result_t ret; dstAddress = (unsigned char)parseInt(args[argPos].c_str(), 16, 0, 0xff, ret); - if (ret != RESULT_OK || !isValidAddress(dstAddress) || isMaster(dstAddress)) + if (ret != RESULT_OK || !isValidAddress(dstAddress) || isMaster(dstAddress)) { return getResultCode(RESULT_ERR_INVALID_ADDR); + } } else if (args[argPos] == "-c") { argPos++; if (argPos >= args.size()) { @@ -701,21 +726,23 @@ string MainLoop::executeWrite(vector &args) if (hex && argPos > 0) { SymbolString cacheMaster(false); result_t ret = parseHexMaster(args, argPos, cacheMaster); - if (ret != RESULT_OK) + if (ret != RESULT_OK) { return getResultCode(ret); - + } logNotice(lf_main, "write hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); // find message Message* message = m_messages->find(cacheMaster, false, false, true, false); - if (message == NULL) + if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); - if (!message->isWrite()) + } + if (!message->isWrite()) { return getResultCode(RESULT_ERR_INVALID_ARG); - if (circuit.length() > 0 && circuit!=message->getCircuit()) + } + if (circuit.length() > 0 && circuit != message->getCircuit()) { return getResultCode(RESULT_ERR_INVALID_ARG); // non-matching circuit - + } // send message SymbolString master(true); master.addAll(cacheMaster); @@ -726,23 +753,27 @@ string MainLoop::executeWrite(vector &args) // also update read messages ret = message->storeLastData(cacheMaster, slave); ostringstream result; - if (ret==RESULT_OK) + if (ret == RESULT_OK) { ret = message->decodeLastData(result); - if (ret >= RESULT_OK) + } + if (ret >= RESULT_OK) { logInfo(lf_main, "write hex %s %s cache update: %s", message->getCircuit().c_str(), message->getName().c_str(), result.str().c_str()); - else + } else { logError(lf_main, "write hex %s %s cache update: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); - if (master[1] == BROADCAST) + } + if (master[1] == BROADCAST) { return "done broadcast"; - if (isMaster(master[1])) + } + if (isMaster(master[1])) { return getResultCode(RESULT_OK); + } return slave.getDataStr(true, false); } logError(lf_main, "write hex %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); return getResultCode(ret); } - if (argPos == 0 || circuit.empty() || (args.size() != argPos + 2 && args.size() != argPos + 1)) + if (argPos == 0 || circuit.empty() || (args.size() != argPos + 2 && args.size() != argPos + 1)) { return "usage: write [-d ZZ] -c CIRCUIT NAME [VALUE[;VALUE]*]\n" " or: write [-c CIRCUIT] -h ZZPBSBNNDx\n" " Write value(s) or hex message.\n" @@ -755,14 +786,15 @@ string MainLoop::executeWrite(vector &args) " PB SB primary/secondary command byte\n" " NN number of following data bytes\n" " Dx data byte(s) to send"; - + } Message* message = m_messages->find(circuit, args[argPos], true); - if (message == NULL) + if (message == NULL) { return getResultCode(RESULT_ERR_NOTFOUND); - if (message->getDstAddress()==SYN && dstAddress==SYN) + } + if (message->getDstAddress() == SYN && dstAddress == SYN) { return getResultCode(RESULT_ERR_INVALID_ADDR); - + } result_t ret = m_busHandler->readFromBus(message, args.size() == argPos + 1 ? "" : args[argPos + 1], dstAddress); // allow missing values if (ret != RESULT_OK) { logError(lf_main, "write %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); @@ -772,8 +804,9 @@ string MainLoop::executeWrite(vector &args) ostringstream result; if (dstAddress == BROADCAST || isMaster(dstAddress)) { logNotice(lf_main, "write %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(ret)); - if (dstAddress == BROADCAST) + if (dstAddress == BROADCAST) { return "done broadcast"; + } return getResultCode(RESULT_OK); } @@ -792,8 +825,7 @@ string MainLoop::executeWrite(vector &args) return result.str(); } -string MainLoop::executeHex(vector &args) -{ +string MainLoop::executeHex(vector &args) { size_t argPos = 1; if (args.size() < argPos + 1 || (args.size() > argPos && args[argPos][0] == '-')) { argPos = 0; // print usage @@ -802,9 +834,9 @@ string MainLoop::executeHex(vector &args) if (argPos > 0) { SymbolString cacheMaster(false); result_t ret = parseHexMaster(args, argPos, cacheMaster); - if (ret != RESULT_OK) + if (ret != RESULT_OK) { return getResultCode(ret); - + } logNotice(lf_main, "hex cmd: %s", cacheMaster.getDataStr(true, false).c_str()); // send message @@ -814,10 +846,12 @@ string MainLoop::executeHex(vector &args) ret = m_busHandler->sendAndWait(master, slave); if (ret == RESULT_OK) { - if (master[1] == BROADCAST) + if (master[1] == BROADCAST) { return "done broadcast"; - if (isMaster(master[1])) + } + if (isMaster(master[1])) { return getResultCode(RESULT_OK); + } return slave.getDataStr(true, false); } logError(lf_main, "hex: %s", getResultCode(ret)); @@ -832,8 +866,7 @@ string MainLoop::executeHex(vector &args) " Dx data byte(s) to send"; } -string MainLoop::executeFind(vector &args) -{ +string MainLoop::executeFind(vector &args) { size_t argPos = 1; bool configFormat = false, exact = false, withRead = true, withWrite = false, withPassive = true, first = true, onlyWithData = false, hexFormat = false; OutputFormat verbosity = 0; @@ -879,7 +912,7 @@ string MainLoop::executeFind(vector &args) break; } } - if (idx==columnCount) { + if (idx == columnCount) { argPos = 0; // print usage break; } @@ -944,7 +977,7 @@ string MainLoop::executeFind(vector &args) } argPos++; } - if (argPos == 0 || args.size() < argPos || args.size() > argPos + 1) + if (argPos == 0 || args.size() < argPos || args.size() > argPos + 1) { return "usage: find [-v|-V] [-r] [-w] [-p] [-d] [-h] [-i ID] [-f] [-F COL[,COL]*] [-e] [-c CIRCUIT] [NAME]\n" " Find message(s).\n" " -v increase verbosity (include names/units/comments+destination address+update time)\n" @@ -961,7 +994,7 @@ string MainLoop::executeFind(vector &args) " -e match NAME and optional CIRCUIT exactly (ignoring case)\n" " -c CIRCUIT limit to messages of CIRCUIT (or a part thereof without '-e')\n" " NAME NAME of the messages to find (or a part thereof without '-e')"; - + } deque messages = m_messages->findAll( circuit, args.size() == argPos ? "" : args[argPos], exact, withRead, withWrite, withPassive ); @@ -975,19 +1008,23 @@ string MainLoop::executeFind(vector &args) continue; } time_t lastup = message->getLastUpdateTime(); - if (onlyWithData && lastup == 0) + if (onlyWithData && lastup == 0) { continue; + } if (configFormat) { - if (found) + if (found) { result << endl; + } message->dump(result); } else if (!columns.empty()) { - if (found) + if (found) { result << endl; + } message->dump(result, &columns); } else { - if (found) + if (found) { result << endl; + } result << message->getCircuit() << " " << message->getName() << " = "; if (lastup == 0) { result << "no data stored"; @@ -996,20 +1033,21 @@ string MainLoop::executeFind(vector &args) << " / " << message->getLastSlaveData().getDataStr(true, false); } else { result_t ret = message->decodeLastData(result, verbosity); - if (ret!=RESULT_OK) { + if (ret != RESULT_OK) { result << " (" << getResultCode(ret) << " for " << message->getLastMasterData().getDataStr() << " / " << message->getLastSlaveData().getDataStr(true, false) << ")"; } } - if (verbosity==(OF_NAMES|OF_UNITS|OF_COMMENTS)) { + if (verbosity == (OF_NAMES|OF_UNITS|OF_COMMENTS)) { unsigned char dstAddress = message->getDstAddress(); - if (dstAddress != SYN) + if (dstAddress != SYN) { sprintf(str, "%02x", dstAddress); - else if (lastup != 0 && message->getLastMasterData().size()>1) + } else if (lastup != 0 && message->getLastMasterData().size() > 1) { sprintf(str, "%02x", message->getLastMasterData()[1]); - else + } else { sprintf(str, "any"); + } if (lastup != 0) { struct tm* td = localtime(&lastup); sprintf(str+strlen(str), ", lastup=%04d-%02d-%02d %02d:%02d:%02d", @@ -1017,49 +1055,48 @@ string MainLoop::executeFind(vector &args) td->tm_hour, td->tm_min, td->tm_sec); } result << " [ZZ=" << str; - if (message->isPassive()) + if (message->isPassive()) { result << ", passive"; - else + } else { result << ", active"; - - if (message->isWrite()) + } + if (message->isWrite()) { result << " write]"; - else + } else { result << " read]"; + } } } found = true; } - if (!found) + if (!found) { return getResultCode(RESULT_ERR_NOTFOUND); - + } return result.str(); } -string MainLoop::executeListen(vector &args, bool& listening) -{ +string MainLoop::executeListen(vector &args, bool& listening) { if (args.size() == 1) { - if (listening) + if (listening) { return "listen continued"; - + } listening = true; return "listen started"; } - if (args.size() != 2 || args[1] != "stop") + if (args.size() != 2 || args[1] != "stop") { return "usage: listen [stop]\n" " Listen for updates or stop it."; - + } listening = false; return "listen stopped"; } -string MainLoop::executeState(vector &args) -{ - if (args.size() == 0) +string MainLoop::executeState(vector &args) { + if (args.size() == 0) { return "usage: state\n" " Report bus state."; - + } if (m_busHandler->hasSignal()) { ostringstream result; result << "signal acquired, " @@ -1071,8 +1108,7 @@ string MainLoop::executeState(vector &args) return "no signal"; } -string MainLoop::executeGrab(vector &args) -{ +string MainLoop::executeGrab(vector &args) { if (args.size() == 1) { return m_busHandler->enableGrab(true) ? "grab started" : "grab continued"; } @@ -1091,22 +1127,21 @@ string MainLoop::executeGrab(vector &args) " Start or stop grabbing, or report unknown or all grabbed messages."; } -string MainLoop::executeScan(vector &args) -{ +string MainLoop::executeScan(vector &args) { if (args.size() == 1) { result_t result = m_busHandler->startScan(); - if (result != RESULT_OK) + if (result != RESULT_OK) { logError(lf_main, "scan: %s", getResultCode(result)); - + } return getResultCode(result); } if (args.size() == 2) { if (strcasecmp(args[1].c_str(), "FULL") == 0) { result_t result = m_busHandler->startScan(true); - if (result != RESULT_OK) + if (result != RESULT_OK) { logError(lf_main, "full scan: %s", getResultCode(result)); - + } return getResultCode(result); } @@ -1118,23 +1153,24 @@ string MainLoop::executeScan(vector &args) result_t result; unsigned char dstAddress = (unsigned char)parseInt(args[1].c_str(), 16, 0, 0xff, result); - if (result == RESULT_OK && !isValidAddress(dstAddress, false)) + if (result == RESULT_OK && !isValidAddress(dstAddress, false)) { result = RESULT_ERR_INVALID_ADDR; - if (result != RESULT_OK) + } + if (result != RESULT_OK) { return getResultCode(result); - + } SymbolString slave(false); result = m_busHandler->scanAndWait(dstAddress, slave); - if (result != RESULT_OK) + if (result != RESULT_OK) { return getResultCode(result); - + } Message* message = m_messages->getScanMessage(dstAddress); // never NULL due to scanAndWait() == RESULT_OK && dstAddress != BROADCAST ostringstream ret; ret << hex << setw(2) << setfill('0') << static_cast(dstAddress); result = message->decodeLastData(ret, 0, true); // decode data - if (result != RESULT_OK) + if (result != RESULT_OK) { return getResultCode(result); - + } return ret.str(); } @@ -1143,8 +1179,7 @@ string MainLoop::executeScan(vector &args) " Scan seen slaves, all slaves (full), a single slave (address ZZ), or report scan result."; } -string MainLoop::executeLog(vector &args) -{ +string MainLoop::executeLog(vector &args) { if (args.size() == 1) { ostringstream ret; char str[32]; @@ -1156,28 +1191,27 @@ string MainLoop::executeLog(vector &args) } bool result; // old format: log areas AREA[,AREA]*, log level LEVEL - if ((args.size() == 3 || args.size() == 2) && strcasecmp(args[1].c_str(), "AREAS") == 0) + if ((args.size() == 3 || args.size() == 2) && strcasecmp(args[1].c_str(), "AREAS") == 0) { result = setLogFacilities(args.size() == 3 ? args[2].c_str() : ""); - else if (args.size() == 3 && strcasecmp(args[1].c_str(), "LEVEL") == 0) + } else if (args.size() == 3 && strcasecmp(args[1].c_str(), "LEVEL") == 0) { result = setLogLevel(args[2].c_str()); - else if (args.size() == 2) + } else if (args.size() == 2) { result = setLogLevel(args[1].c_str()) || setLogFacilities(args[1].c_str()); - else if (args.size() == 3) + } else if (args.size() == 3) { result = setLogFacilities(args[1].c_str()) && setLogLevel(args[2].c_str()); - else + } else { return "usage: log [AREA[,AREA]*] [LEVEL]\n" " Set log area(s) and/or log level or get current settings.\n" " AREA log area to include (main|network|bus|update|all)\n" " LEVEL log level to set (error|notice|info|debug)"; - - if (result) + } + if (result) { return getResultCode(RESULT_OK); - + } return getResultCode(RESULT_ERR_INVALID_ARG); } -string MainLoop::executeRaw(vector &args) -{ +string MainLoop::executeRaw(vector &args) { if (args.size() != 1) { return "usage: raw\n" " Toggle logging of each byte."; @@ -1193,8 +1227,7 @@ string MainLoop::executeRaw(vector &args) return enabled ? "raw logging enabled" : "raw logging disabled"; } -string MainLoop::executeDump(vector &args) -{ +string MainLoop::executeDump(vector &args) { if (args.size() != 1) { return "usage: dump\n" " Toggle binary dump of received bytes."; @@ -1207,24 +1240,21 @@ string MainLoop::executeDump(vector &args) return enabled ? "dump enabled" : "dump disabled"; } -string MainLoop::executeReload(vector &args) -{ - if (args.size() != 1) +string MainLoop::executeReload(vector &args) { + if (args.size() != 1) { return "usage: reload\n" " Reload CSV config files."; - + } m_busHandler->clear(); result_t result = loadConfigFiles(m_messages); - return getResultCode(result); } -string MainLoop::executeInfo(vector &args) -{ - if (args.size() == 0) +string MainLoop::executeInfo(vector &args) { + if (args.size() == 0) { return "usage: info\n" " Report information about the daemon, the configuration, and seen devices."; - + } ostringstream result; result << "version: " << PACKAGE_STRING "." REVISION "\n"; if (m_busHandler->hasSignal()) { @@ -1243,19 +1273,16 @@ string MainLoop::executeInfo(vector &args) return result.str(); } -string MainLoop::executeQuit(vector &args, bool& connected) -{ +string MainLoop::executeQuit(vector &args, bool& connected) { if (args.size() == 1) { connected = false; return "connection closed"; } - return "usage: quit\n" " Close client connection."; } -string MainLoop::executeHelp() -{ +string MainLoop::executeHelp() { return "usage:\n" " read|r Read value(s): read [-f] [-m SECONDS] [-c CIRCUIT] [-d ZZ] [-p PRIO] [-v|-V] [-n] [-i VALUE[;VALUE]*] NAME [FIELD[.N]]\n" " Read hex message: read [-f] [-m SECONDS] [-c CIRCUIT] -h ZZPBSBNNDx\n" @@ -1280,8 +1307,7 @@ string MainLoop::executeHelp() " help|h Print help help [COMMAND]"; } -string MainLoop::executeGet(vector &args, bool& connected) -{ +string MainLoop::executeGet(vector &args, bool& connected) { result_t ret = RESULT_OK; bool numeric = false, required = false; OutputFormat verbosity = OF_NAMES; @@ -1320,22 +1346,23 @@ string MainLoop::executeGet(vector &args, bool& connected) } else if (strcmp(qname.c_str(), "poll") == 0) { pollPriority = (unsigned char)parseInt(value.c_str(), 10, 1, 9, ret); } else if (strcmp(qname.c_str(), "exact") == 0) { - exact = value.length()==0 || strcmp(value.c_str(), "1") == 0; + exact = value.length() == 0 || strcmp(value.c_str(), "1") == 0; } else if (strcmp(qname.c_str(), "verbose") == 0) { - if (value.length()==0 || strcmp(value.c_str(), "1") == 0) { + if (value.length() == 0 || strcmp(value.c_str(), "1") == 0) { verbosity |= OF_UNITS|OF_COMMENTS; } } else if (strcmp(qname.c_str(), "indexed") == 0) { - if (value.length()==0 || strcmp(value.c_str(), "1") == 0) { + if (value.length() == 0 || strcmp(value.c_str(), "1") == 0) { verbosity &= ~OF_NAMES; } } else if (strcmp(qname.c_str(), "numeric") == 0) { - numeric = value.length()==0 || strcmp(value.c_str(), "1") == 0; + numeric = value.length() == 0 || strcmp(value.c_str(), "1") == 0; } else if (strcmp(qname.c_str(), "required") == 0) { - required = value.length()==0 || strcmp(value.c_str(), "1") == 0; + required = value.length() == 0 || strcmp(value.c_str(), "1") == 0; } - if (ret != RESULT_OK) + if (ret != RESULT_OK) { break; + } } } deque messages = m_messages->findAll(circuit, name, exact, true, false, true); @@ -1347,35 +1374,43 @@ string MainLoop::executeGet(vector &args, bool& connected) for (deque::iterator it = messages.begin(); ret == RESULT_OK && it != messages.end();) { Message* message = *it++; unsigned char dstAddress = message->getDstAddress(); - if (dstAddress == SYN) + if (dstAddress == SYN) { continue; - if (pollPriority > 0 && message->setPollPriority(pollPriority)) + } + if (pollPriority > 0 && message->setPollPriority(pollPriority)) { m_messages->addPollMessage(message); + } time_t lastup = message->getLastUpdateTime(); if (lastup == 0 && required) { // read directly from bus - if (message->isPassive()) + if (message->isPassive()) { continue; // not possible to actively read this message - if (m_busHandler->readFromBus(message, "") != RESULT_OK) + } + if (m_busHandler->readFromBus(message, "") != RESULT_OK) { continue; + } lastup = message->getLastUpdateTime(); } else { - if (since > 0 && lastup <= since) + if (since > 0 && lastup <= since) { continue; - if (lastup > maxLastUp) + } + if (lastup > maxLastUp) { maxLastUp = lastup; + } } if (message->getCircuit() != lastCircuit) { - if (lastCircuit.length() > 0) + if (lastCircuit.length() > 0) { result << "\n },"; + } lastCircuit = message->getCircuit(); result << "\n \"" << lastCircuit << "\": {"; first = true; } - if (first) + if (first) { first = false; - else + } else { result << ","; + } result << "\n \"" << message->getName() << "\": {"; result << "\n \"lastup\": " << setw(0) << dec << static_cast(lastup); if (lastup != 0) { @@ -1383,7 +1418,7 @@ string MainLoop::executeGet(vector &args, bool& connected) size_t pos = (size_t)result.tellp(); result << ",\n \"fields\": {"; result_t dret = message->decodeLastData(result, verbosity|(numeric?OF_NUMERIC:0)|OF_JSON); - if (dret==RESULT_OK) { + if (dret == RESULT_OK) { result << "\n }"; } else { string prefix = result.str().substr(0, pos); @@ -1398,8 +1433,9 @@ string MainLoop::executeGet(vector &args, bool& connected) } if (ret == RESULT_OK) { - if (lastCircuit.length() > 0) + if (lastCircuit.length() > 0) { result << "\n },"; + } result << "\n \"global\": {"; result << "\n \"signal\": " << (m_busHandler->hasSignal() ? "1" : "0"); result << ",\n \"lastup\": " << setw(0) << dec << static_cast(maxLastUp); @@ -1412,9 +1448,9 @@ string MainLoop::executeGet(vector &args, bool& connected) ret = RESULT_ERR_INVALID_ARG; } else { string filename = m_htmlPath+uri; - if (uri[uri.length()-1] == '/') + if (uri[uri.length()-1] == '/') { filename += "index.html"; - + } size_t pos = filename.find_last_of('.'); if (pos != string::npos && pos != filename.length() - 1 && pos >= filename.length() - 5) { string ext = filename.substr(pos+1); @@ -1449,7 +1485,7 @@ string MainLoop::executeGet(vector &args, bool& connected) } } - string data = ret==RESULT_OK ? result.str() : ""; + string data = ret == RESULT_OK ? result.str() : ""; result.str(""); result.clear(); result << "HTTP/1.0 "; diff --git a/src/ebusd/mainloop.h b/src/ebusd/mainloop.h index 87be896a..0420195b 100644 --- a/src/ebusd/mainloop.h +++ b/src/ebusd/mainloop.h @@ -16,17 +16,17 @@ * along with this program. If not, see . */ -#ifndef MAINLOOP_H_ -#define MAINLOOP_H_ +#ifndef EBUSD_MAINLOOP_H_ +#define EBUSD_MAINLOOP_H_ -#include "message.h" -#include "network.h" +#include +#include +#include #include "bushandler.h" #include "datahandler.h" +#include "network.h" +#include "message.h" #include "rotatefile.h" -#ifdef HAVE_CONFIG_H -# include -#endif /** \file mainloop.h */ @@ -35,10 +35,8 @@ using namespace std; /** * The main loop handling requests from connected clients. */ -class MainLoop : public Thread, DeviceListener -{ -public: - +class MainLoop : public Thread, DeviceListener { + public: /** * Construct the main loop and create network and bus handling components. * @param opt the program options. @@ -67,13 +65,13 @@ public: // @copydoc virtual void notifyDeviceData(const unsigned char byte, bool received); -protected: + protected: // @copydoc virtual void run(); -private: + private: /** * Decode and execute client message. * @param data the data string to decode (may be empty). @@ -252,7 +250,6 @@ private: /** the registered @a DataHandler instances. */ list m_dataHandlers; - }; -#endif // MAINLOOP_H_ +#endif // EBUSD_MAINLOOP_H_ diff --git a/src/ebusd/mqtthandler.cpp b/src/ebusd/mqtthandler.cpp index ba54c12a..37179e29 100644 --- a/src/ebusd/mqtthandler.cpp +++ b/src/ebusd/mqtthandler.cpp @@ -16,12 +16,13 @@ * along with this program. If not, see . */ -#include "mqtthandler.h" -#include "log.h" #ifdef HAVE_CONFIG_H # include #endif +#include "mqtthandler.h" +#include "log.h" + using namespace std; /** the definition of the MQTT arguments. */ @@ -43,8 +44,7 @@ static const char* g_topic = PACKAGE; //!< MQTT topic to use (prefix if without * @param arg the option argument, or NULL. * @param state the parsing state. */ -static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) -{ +static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) { result_t result = RESULT_OK; switch (key) { @@ -57,7 +57,7 @@ static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) break; case 2: // --mqtttopic=ebusd - if (arg == NULL || arg[0] == 0 || arg[0]=='/' || arg[strlen(arg)-1]=='/') { + if (arg == NULL || arg[0] == 0 || arg[0] == '/' || arg[strlen(arg)-1] == '/') { argp_error(state, "invalid mqtttopic"); return EINVAL; } @@ -72,13 +72,11 @@ static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) static const struct argp g_mqtt_argp = { g_mqtt_argp_options, mqtt_parse_opt, NULL, NULL, NULL, NULL, NULL }; static const struct argp_child g_mqtt_argp_child = {&g_mqtt_argp, 0, "", 1}; -const struct argp_child* mqtthandler_getargs() -{ +const struct argp_child* mqtthandler_getargs() { return &g_mqtt_argp_child; } -DataHandler* mqtthandler_register(BusHandler* busHandler, MessageMap* messages) -{ +DataHandler* mqtthandler_register(BusHandler* busHandler, MessageMap* messages) { return new MqttHandler(busHandler, messages); } @@ -111,21 +109,21 @@ bool parseTopic(const string topic, vector &strs, vector &cols) size_t lastpos = 0; size_t end = topic.length(); vector columns; - for (size_t pos=topic.find('%', lastpos); pos!=string::npos; ) { + for (size_t pos=topic.find('%', lastpos); pos != string::npos; ) { size_t col = columnCount; size_t len = 0; for (size_t i = 0; i < columnCount; i++) { len = strlen(columnNames[i]); - if (topic.substr(pos+1, len)==columnNames[i]) { + if (topic.substr(pos+1, len) == columnNames[i]) { col = columnIds[i]; break; } } - if (col==columnCount) { + if (col == columnCount) { return false; } - for (vector::iterator it=cols.begin(); it!=cols.end(); it++) { - if (*it==col) { + for (vector::iterator it=cols.begin(); it != cols.end(); it++) { + if (*it == col) { return false; // duplicate column } } @@ -134,7 +132,7 @@ bool parseTopic(const string topic, vector &strs, vector &cols) lastpos = pos+1+len; pos = topic.find('%', lastpos); } - if (lastpos &strs, vector &cols) MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) - : DataSink(), DataSource(busHandler), Thread(), m_messages(messages) -{ - bool enabled = g_port!=0; + : DataSink(), DataSource(busHandler), Thread(), m_messages(messages) { + bool enabled = g_port != 0; m_publishByField = false; m_mosquitto = NULL; if (enabled && !parseTopic(g_topic, m_topicStrs, m_topicCols)) { @@ -156,7 +153,7 @@ MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) } int major = -1; mosquitto_lib_version(&major, NULL, NULL); - if (major!=LIBMOSQUITTO_MAJOR) { + if (major != LIBMOSQUITTO_MAJOR) { logOtherError("mqtt", "invalid mosquitto version %d instead of %d", major, LIBMOSQUITTO_MAJOR); return; } @@ -165,7 +162,7 @@ MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) m_topicStrs.push_back(""); } else { string str = m_topicStrs[0]; - if (str.empty() || str[str.length()-1]!='/') { + if (str.empty() || str[str.length()-1] != '/') { m_topicStrs[0] = str+"/"; } } @@ -173,8 +170,8 @@ MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) m_topicStrs.push_back("/"); m_topicCols.push_back(COLUMN_NAME); // name } else { - for (size_t i=0; i(getpid()); m_mosquitto = mosquitto_new(clientId.c_str(), -#if (LIBMOSQUITTO_MAJOR>=1) +#if (LIBMOSQUITTO_MAJOR >= 1) true, #endif this); @@ -203,15 +200,15 @@ MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) string willData = "false"; size_t len = willData.length(); mosquitto_will_set(m_mosquitto, -#if (LIBMOSQUITTO_MAJOR<1) +#if (LIBMOSQUITTO_MAJOR < 1) true, #endif willTopic.c_str(), (uint32_t)len, (uint8_t*)(willData.c_str()), 0, true); if (mosquitto_connect(m_mosquitto, "localhost", g_port, 60 -#if (LIBMOSQUITTO_MAJOR<1) +#if (LIBMOSQUITTO_MAJOR < 1) , true #endif - )!=MOSQ_ERR_SUCCESS) { + ) != MOSQ_ERR_SUCCESS) { logOtherError("mqtt", "unable to connect"); mosquitto_destroy(m_mosquitto); m_mosquitto = NULL; @@ -221,8 +218,7 @@ MqttHandler::MqttHandler(BusHandler* busHandler, MessageMap* messages) } } -MqttHandler::~MqttHandler() -{ +MqttHandler::~MqttHandler() { join(); if (m_mosquitto) { mosquitto_destroy(m_mosquitto); @@ -231,32 +227,29 @@ MqttHandler::~MqttHandler() mosquitto_lib_cleanup(); } -void MqttHandler::start() -{ +void MqttHandler::start() { if (m_mosquitto) { Thread::start("MQTT"); } } void on_message( -#if (LIBMOSQUITTO_MAJOR>=1) +#if (LIBMOSQUITTO_MAJOR >= 1) struct mosquitto *mosq, #endif - void *obj, const struct mosquitto_message *message) -{ + void *obj, const struct mosquitto_message *message) { MqttHandler* handler = (MqttHandler*)obj; if (!handler || !message || !handler->isRunning()) { return; } string topic(message->topic); - string data(message->payloadlen>0 ? (char*)message->payload : ""); + string data(message->payloadlen > 0 ? (char*)message->payload : ""); handler->notifyTopic(topic, data); } -void MqttHandler::notifyTopic(string topic, string data) -{ +void MqttHandler::notifyTopic(string topic, string data) { size_t pos = topic.rfind('/'); - if (pos==string::npos) { + if (pos == string::npos) { return; } string suffix = topic.substr(pos+1); @@ -265,8 +258,8 @@ void MqttHandler::notifyTopic(string topic, string data) return; } string direction = suffix.substr(0, 3); - isWrite = direction=="set"; - if (!isWrite && direction!="get") { + isWrite = direction == "set"; + if (!isWrite && direction != "get") { return; } suffix = suffix.substr(3); // security level @@ -275,26 +268,26 @@ void MqttHandler::notifyTopic(string topic, string data) size_t last = 0; string circuit, name; size_t idx; - for (idx=0; idx0) { + if (idx == 0) { + if (pos > 0) { return; } } else { @@ -320,20 +313,20 @@ void MqttHandler::notifyTopic(string topic, string data) return; } logOtherInfo("mqtt", "received topic for %s %s", circuit.c_str(), name.c_str()); - if (suffix.length()>0) { + if (suffix.length() > 0) { circuit += "#"+suffix; } Message* message = m_messages->find(circuit, name, isWrite); - if (message==NULL) { + if (message == NULL) { message = m_messages->find(circuit, name, isWrite, true); } - if (message==NULL) { + if (message == NULL) { logOtherError("mqtt", "%s message %s %s not found", isWrite?"write":"read", circuit.c_str(), name.c_str()); return; } if (!message->isPassive()) { result_t result = m_busHandler->readFromBus(message, data); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { logOtherError("mqtt", "%s %s %s: %s", isWrite?"write":"read", circuit.c_str(), name.c_str(), getResultCode(result)); return; } @@ -343,8 +336,7 @@ void MqttHandler::notifyTopic(string topic, string data) publishMessage(message, ostream); } -void MqttHandler::run() -{ +void MqttHandler::run() { time_t lastTaskRun, now, start, lastSignal = 0; bool signal = false; string signalTopic = m_globalTopic+"signal"; @@ -362,9 +354,9 @@ void MqttHandler::run() while (isRunning()) { handleTraffic(); time(&now); - if (now=1) +#if (LIBMOSQUITTO_MAJOR >= 1) ,1 #endif ); } } -string MqttHandler::getTopic(Message* message, signed char fieldIndex) -{ +string MqttHandler::getTopic(Message* message, signed char fieldIndex) { ostringstream ret; - for (size_t i=0; i=0) { + if (i < m_topicCols.size()) { + if (m_topicCols[i] == COLUMN_FIELDS && fieldIndex >= 0) { ret << message->getFieldName(fieldIndex); } else { message->dumpColumn(ret, m_topicCols[i]); @@ -431,10 +421,9 @@ string MqttHandler::getTopic(Message* message, signed char fieldIndex) return ret.str(); } -void MqttHandler::publishMessage(Message* message, ostringstream& updates) -{ +void MqttHandler::publishMessage(Message* message, ostringstream& updates) { result_t result = message->decodeLastData(updates); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { logOtherError("mqtt", "decode %s %s: %s", message->getCircuit().c_str(), message->getName().c_str(), getResultCode(result)); return; } @@ -452,8 +441,7 @@ void MqttHandler::publishMessage(Message* message, ostringstream& updates) } } -void MqttHandler::publishTopic(string topic, string data, bool retain) -{ +void MqttHandler::publishTopic(string topic, string data, bool retain) { logOtherDebug("mqtt", "publish %s %s", topic.c_str(), data.c_str()); mosquitto_publish(m_mosquitto, NULL, topic.c_str(), (uint32_t)data.size(), (uint8_t*)(data.c_str()), 0, retain); } diff --git a/src/ebusd/mqtthandler.h b/src/ebusd/mqtthandler.h index f5069c1d..3906c828 100644 --- a/src/ebusd/mqtthandler.h +++ b/src/ebusd/mqtthandler.h @@ -16,13 +16,16 @@ * along with this program. If not, see . */ -#ifndef MQTTHANDLER_H_ -#define MQTTHANDLER_H_ +#ifndef EBUSD_MQTTHANDLER_H_ +#define EBUSD_MQTTHANDLER_H_ +#include +#include +#include +#include #include "datahandler.h" #include "bushandler.h" #include "message.h" -#include /** @file mqtthandler.h * A data handler enabling MQTT support via mosquitto. @@ -91,7 +94,7 @@ private: * @param fieldIndex the optional field index for the field column, or -1. * @return the topic string. */ - string getTopic(Message* message, signed char fieldIndex=-1); + string getTopic(Message* message, signed char fieldIndex = -1); /** * Prepare a @a Message and publish as topic. @@ -106,7 +109,7 @@ private: * @param data the data string. * @param retain whether the topic shall be retained. */ - void publishTopic(string topic, string data, bool retain=true); + void publishTopic(string topic, string data, bool retain = true); /** the @a MessageMap instance. */ MessageMap* m_messages; @@ -128,4 +131,4 @@ private: }; -#endif // DATAHANDLER_H_ +#endif // EBUSD_DATAHANDLER_H_ diff --git a/src/ebusd/network.cpp b/src/ebusd/network.cpp index 68e56ab5..39ebcc2c 100644 --- a/src/ebusd/network.cpp +++ b/src/ebusd/network.cpp @@ -21,19 +21,17 @@ #endif #include "network.h" -#include "log.h" -#include - #ifdef HAVE_PPOLL # include #endif +#include +#include "log.h" using namespace std; int Connection::m_ids = 0; -void Connection::run() -{ +void Connection::run() { int ret; struct timespec tdiff; @@ -153,14 +151,13 @@ void Connection::run() Network::Network(const bool local, const uint16_t port, const uint16_t httpPort, Queue* netQueue) - : Thread(), m_netQueue(netQueue), m_listening(false) -{ + : Thread(), m_netQueue(netQueue), m_listening(false) { m_tcpServer = new TCPServer(port, local ? "127.0.0.1" : "0.0.0.0"); if (m_tcpServer != NULL && m_tcpServer->start() == 0) { m_listening = true; } - if (httpPort>0) { + if (httpPort > 0) { m_httpServer = new TCPServer(httpPort, "0.0.0.0"); m_httpServer->start(); } else { @@ -168,8 +165,7 @@ Network::Network(const bool local, const uint16_t port, const uint16_t httpPort, } } -Network::~Network() -{ +Network::~Network() { stop(); while (!m_connections.empty()) { Connection* connection = m_connections.back(); @@ -188,8 +184,7 @@ Network::~Network() join(); } -void Network::run() -{ +void Network::run() { if (!m_listening) { return; } @@ -230,7 +225,7 @@ void Network::run() maxfd = (m_notify.notifyFD() > m_tcpServer->getFD()) ? m_notify.notifyFD() : m_tcpServer->getFD(); - if (m_httpServer && m_httpServer->getFD()>maxfd) { + if (m_httpServer && m_httpServer->getFD() > maxfd) { maxfd = m_httpServer->getFD(); } #endif @@ -294,8 +289,7 @@ void Network::run() } } -void Network::cleanConnections() -{ +void Network::cleanConnections() { list::iterator c_it; for (c_it = m_connections.begin(); c_it != m_connections.end(); c_it++) { if (!(*c_it)->isRunning()) { diff --git a/src/ebusd/network.h b/src/ebusd/network.h index 84367dc9..db9d6888 100644 --- a/src/ebusd/network.h +++ b/src/ebusd/network.h @@ -16,16 +16,17 @@ * along with this program. If not, see . */ -#ifndef NETWORK_H_ -#define NETWORK_H_ +#ifndef EBUSD_NETWORK_H_ +#define EBUSD_NETWORK_H_ +#include +#include +#include +#include #include "tcpsocket.h" #include "queue.h" #include "notify.h" #include "thread.h" -#include -#include -#include /** \file network.h */ @@ -77,34 +78,35 @@ public: */ bool add(string request) { - if (request.length()>0) { + if (request.length() > 0) { request.erase(remove(request.begin(), request.end(), '\r'), request.end()); m_request.append(request); } size_t pos = m_request.find(m_isHttp ? "\n\n" : "\n"); - if (pos!=string::npos) { + if (pos != string::npos) { if (m_isHttp) { pos = m_request.find("\n"); m_request.resize(pos); // reduce to first line // typical first line: GET /ehp/outsidetemp HTTP/1.1 pos = m_request.rfind(" HTTP/"); - if (pos!=string::npos) { + if (pos != string::npos) { m_request.resize(pos); // remove "HTTP/x.x" suffix } pos = 0; - while ((pos=m_request.find('%', pos))!=string::npos && pos+2<=m_request.length()) { + while ((pos=m_request.find('%', pos)) != string::npos && pos+2 <= m_request.length()) { unsigned int value1, value2; - if (sscanf("%1x%1x", m_request.c_str()+pos+1, &value1, &value2)<2) + if (sscanf("%1x%1x", m_request.c_str()+pos+1, &value1, &value2) < 2) { break; - m_request[pos] = (char)(((value1&0x0f)<<4)|(value2&0x0f)); + } + m_request[pos] = (char)(((value1&0x0f)<<4) | (value2&0x0f)); m_request.erase(pos+1, 2); } - } else if (pos+1==m_request.length()) { + } else if (pos+1 == m_request.length()) { m_request.resize(pos); // reduce to complete lines } return true; } - return m_request.length()==0 && m_listening; + return m_request.length() == 0 && m_listening; } /** @@ -163,7 +165,7 @@ public: * @param listenSince set to the start time from which to add updates (inclusive). * @return whether the client is in listening mode. */ - bool isListening(time_t* listenSince=NULL) { if (listenSince) *listenSince = m_listenSince; return m_listening; } + bool isListening(time_t* listenSince=NULL) { if (listenSince) { *listenSince = m_listenSince; } return m_listening; } /** * Return whether the client shall be disconnected. @@ -313,5 +315,5 @@ private: }; -#endif // NETWORK_H_ +#endif // EBUSD_NETWORK_H_ diff --git a/src/lib/ebus/contrib/contrib.cpp b/src/lib/ebus/contrib/contrib.cpp index 5835e56b..b79c654e 100644 --- a/src/lib/ebus/contrib/contrib.cpp +++ b/src/lib/ebus/contrib/contrib.cpp @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +#include "contrib.h" #include "tem.h" using namespace std; diff --git a/src/lib/ebus/contrib/contrib.h b/src/lib/ebus/contrib/contrib.h index a7dc4d1b..3f5c4077 100644 --- a/src/lib/ebus/contrib/contrib.h +++ b/src/lib/ebus/contrib/contrib.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_CONTRIB_H_ -#define LIBEBUS_CONTRIB_H_ +#ifndef LIB_EBUS_CONTRIB_H_ +#define LIB_EBUS_CONTRIB_H_ /** @file contrib.h * Contributed sources that may be excluded from regular builds. @@ -32,4 +32,4 @@ using namespace std; */ bool libebus_contrib_register(); -#endif // LIBEBUS_CONTRIB_H_ +#endif // LIB_EBUS_CONTRIB_H_ diff --git a/src/lib/ebus/contrib/tem.cpp b/src/lib/ebus/contrib/tem.cpp index b61286e9..2f9aed0f 100644 --- a/src/lib/ebus/contrib/tem.cpp +++ b/src/lib/ebus/contrib/tem.cpp @@ -20,14 +20,14 @@ # include #endif -#include "datatype.h" #include "tem.h" +#include #include #include #include #include #include -#include +#include "datatype.h" using namespace std; @@ -35,8 +35,7 @@ void contrib_tem_register() { DataTypeList::getInstance()->add(new TemParamDataType("TEM_P")); } -result_t TemParamDataType::derive(int divisor, unsigned char bitCount, NumberDataType* &derived) -{ +result_t TemParamDataType::derive(int divisor, unsigned char bitCount, NumberDataType* &derived) { if (divisor == 0) { divisor = 1; } @@ -52,8 +51,7 @@ result_t TemParamDataType::derive(int divisor, unsigned char bitCount, NumberDat result_t TemParamDataType::readSymbols(SymbolString& input, const bool isMaster, const unsigned char offset, const unsigned char length, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { unsigned int value = 0; result_t result = readRawValue(input, offset, length, value); @@ -90,8 +88,7 @@ result_t TemParamDataType::readSymbols(SymbolString& input, const bool isMaster, result_t TemParamDataType::writeSymbols(istringstream& input, const unsigned char offset, const unsigned char length, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { unsigned int value; int grp, num; string token; diff --git a/src/lib/ebus/contrib/tem.h b/src/lib/ebus/contrib/tem.h index e9026f61..06e1cf98 100644 --- a/src/lib/ebus/contrib/tem.h +++ b/src/lib/ebus/contrib/tem.h @@ -16,12 +16,9 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_CONTRIB_TEM_H_ -#define LIBEBUS_CONTRIB_TEM_H_ +#ifndef LIB_EBUS_CONTRIB_TEM_H_ +#define LIB_EBUS_CONTRIB_TEM_H_ -#include "symbol.h" -#include "result.h" -#include "datatype.h" #include #include #include @@ -29,6 +26,9 @@ #include #include #include +#include "symbol.h" +#include "result.h" +#include "datatype.h" /** @file tem.h * Contributed data types for TEM devices not part of regular releases. @@ -71,4 +71,4 @@ public: */ void contrib_tem_register(); -#endif // LIBEBUS_CONTRIB_TEM_H_ +#endif // LIB_EBUS_CONTRIB_TEM_H_ diff --git a/src/lib/ebus/contrib/test/test_tem.cpp b/src/lib/ebus/contrib/test/test_tem.cpp index 0682768d..3e08063a 100644 --- a/src/lib/ebus/contrib/test/test_tem.cpp +++ b/src/lib/ebus/contrib/test/test_tem.cpp @@ -16,18 +16,19 @@ * along with this program. If not, see . */ -#include "tem.h" -#include "data.h" #include #include +#include +#include +#include "tem.h" +#include "data.h" using namespace std; static bool error = false; void verify(bool expectFailMatch, string type, string input, - bool match, string expectStr, string gotStr) -{ + bool match, string expectStr, string gotStr) { match = match && expectStr == gotStr; if (expectFailMatch) { if (match) { @@ -46,8 +47,7 @@ void verify(bool expectFailMatch, string type, string input, } } -int main() -{ +int main() { DataType* type = DataTypeList::getInstance()->get("TEM_P"); if (type == NULL) { cout << "datatype not registered" << endl; @@ -108,7 +108,7 @@ int main() fields = NULL; } vector::iterator it = entries.begin(); - result = DataField::create(it, entries.end(), templates, fields, isSet, false, (mstr[1]==BROADCAST || isMaster(mstr[1]))); + result = DataField::create(it, entries.end(), templates, fields, isSet, false, (mstr[1] == BROADCAST || isMaster(mstr[1]))); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": create error: " << getResultCode(result) << endl; error = true; @@ -145,7 +145,7 @@ int main() if (result >= RESULT_OK) { result = fields->read(pt_slaveData, sstr, 0, output, 0, -1, !output.str().empty()); } - if (failedRead) + if (failedRead) { if (result >= RESULT_OK) { cout << " failed read " << fields->getName() << " >" << check[2] << " " << check[3] << "< error: unexpectedly succeeded" << endl; @@ -154,20 +154,20 @@ int main() cout << " failed read " << fields->getName() << " >" << check[2] << " " << check[3] << "< OK" << endl; } - else if (result < RESULT_OK) { + } else if (result < RESULT_OK) { cout << " read " << fields->getName() << " >" << check[2] << " " << check[3] << "< error: " << getResultCode(result) << endl; error = true; - } - else { + } else { bool match = strcasecmp(output.str().c_str(), expectStr.c_str()) == 0; verify(failedReadMatch, "read", check[2], match, expectStr, output.str()); } istringstream input(expectStr); result = fields->write(input, pt_masterData, writeMstr, 0); - if (result >= RESULT_OK) + if (result >= RESULT_OK) { result = fields->write(input, pt_slaveData, writeSstr, 0); + } if (failedWrite) { if (result >= RESULT_OK) { cout << " failed write " << fields->getName() << " >" @@ -177,8 +177,7 @@ int main() cout << " failed write " << fields->getName() << " >" << expectStr << "< OK" << endl; } - } - else if (result < RESULT_OK) { + } else if (result < RESULT_OK) { cout << " write " << fields->getName() << " >" << expectStr << "< error: " << getResultCode(result) << endl; error = true; @@ -191,6 +190,5 @@ int main() } delete templates; - return error ? 1 : 0; } diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index e42626e7..113ecb0c 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -21,12 +21,13 @@ #endif #include "data.h" +#include #include #include #include #include #include -#include +#include using namespace std; @@ -39,14 +40,13 @@ result_t DataField::create(vector::iterator& it, DataFieldTemplates* templates, DataField*& returnField, const bool isWriteMessage, const bool isTemplate, const bool isBroadcastOrMasterDestination, - const unsigned char maxFieldLength) -{ + const unsigned char maxFieldLength) { vector fields; string firstName, firstComment; result_t result = RESULT_OK; - if (it == end) + if (it == end) { return RESULT_ERR_EOF; - + } while (it != end && result == RESULT_OK) { string unit, comment; PartType partType; @@ -58,8 +58,9 @@ result_t DataField::create(vector::iterator& it, // std: name,part,basetype[:len]|template[:name][,[divisor|values][,[unit][,[comment]]]] const string name = *it++; // name if (it == end) { - if (!name.empty()) + if (!name.empty()) { result = RESULT_ERR_MISSING_TYPE; + } break; } @@ -69,8 +70,9 @@ result_t DataField::create(vector::iterator& it, const char* partStr = (*it++).c_str(); // part hasPartStr = partStr[0] != 0; if (it == end) { - if (!name.empty() || hasPartStr) + if (!name.empty() || hasPartStr) { result = RESULT_ERR_MISSING_TYPE; + } break; } if (isBroadcastOrMasterDestination @@ -110,7 +112,7 @@ result_t DataField::create(vector::iterator& it, if (equalPos == string::npos) { divisor = parseSignedInt(divisorStr.c_str(), 10, -MAX_DIVISOR, MAX_DIVISOR, result); } else if (equalPos == 0 && divisorStr.length() > 1) { - verifyValue = divisorStr[1]=='='; // == forced verification of constant value + verifyValue = divisorStr[1] == '='; // == forced verification of constant value if (verifyValue && divisorStr.length() == 1) { result = RESULT_ERR_INVALID_LIST; break; @@ -188,7 +190,7 @@ result_t DataField::create(vector::iterator& it, length = 0; // no length specified typeName = token; } else { - if (pos+2==token.length() && token[pos+1]=='*') { + if (pos+2 == token.length() && token[pos+1] == '*') { length = REMAIN_LEN; } else { length = (unsigned char)parseInt(token.substr(pos+1).c_str(), 10, 1, maxFieldLength, result); @@ -245,8 +247,7 @@ result_t DataField::create(vector::iterator& it, return RESULT_OK; } -void DataField::dumpString(ostream& output, const string str, const bool prependFieldSeparator) -{ +void DataField::dumpString(ostream& output, const string str, const bool prependFieldSeparator) { if (prependFieldSeparator) { output << FIELD_SEPARATOR; } @@ -260,9 +261,8 @@ void DataField::dumpString(ostream& output, const string str, const bool prepend result_t SingleDataField::create(const string id, const unsigned char length, const string name, const string comment, const string unit, const PartType partType, int divisor, map values, - const string constantValue, const bool verifyValue, SingleDataField* &returnField) -{ - DataType* dataType = DataTypeList::getInstance()->get(id, length==REMAIN_LEN ? (unsigned char)0 : length); + const string constantValue, const bool verifyValue, SingleDataField* &returnField) { + DataType* dataType = DataTypeList::getInstance()->get(id, length == REMAIN_LEN ? (unsigned char)0 : length); if (!dataType) { return RESULT_ERR_NOTFOUND; } @@ -298,7 +298,7 @@ result_t SingleDataField::create(const string id, const unsigned char length, values[numType->getMinValue() + i] = dayNames[i]; } result_t result = numType->derive(divisor, bitCount, numType); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } if (values.empty()) { @@ -318,15 +318,15 @@ result_t SingleDataField::create(const string id, const unsigned char length, return RESULT_OK; } -void SingleDataField::dump(ostream& output) -{ +void SingleDataField::dump(ostream& output) { output << setw(0) << dec; // initialize formatting dumpString(output, m_name, false); output << FIELD_SEPARATOR; - if (m_partType == pt_masterData) + if (m_partType == pt_masterData) { output << "m"; - else if (m_partType == pt_slaveData) + } else if (m_partType == pt_slaveData) { output << "s"; + } output << FIELD_SEPARATOR; m_dataType->dump(output, m_length); dumpString(output, m_unit); @@ -336,11 +336,10 @@ void SingleDataField::dump(ostream& output) result_t SingleDataField::read(const PartType partType, SymbolString& data, unsigned char offset, - unsigned int& output, const char* fieldName, signed char fieldIndex) -{ - if (partType != m_partType) + unsigned int& output, const char* fieldName, signed char fieldIndex) { + if (partType != m_partType) { return RESULT_EMPTY; - + } switch (m_partType) { case pt_masterData: @@ -352,7 +351,7 @@ result_t SingleDataField::read(const PartType partType, default: return RESULT_ERR_INVALID_PART; } - bool remainder = m_length==REMAIN_LEN && m_dataType->isAdjustableLength(); + bool remainder = m_length == REMAIN_LEN && m_dataType->isAdjustableLength(); if (offset + (remainder?1:m_length) > data.size()) { return RESULT_ERR_INVALID_POS; } @@ -365,8 +364,7 @@ result_t SingleDataField::read(const PartType partType, result_t SingleDataField::read(const PartType partType, SymbolString& data, unsigned char offset, ostringstream& output, OutputFormat outputFormat, signed char outputIndex, - bool leadingSeparator, const char* fieldName, signed char fieldIndex) -{ + bool leadingSeparator, const char* fieldName, signed char fieldIndex) { if (partType != m_partType) { return RESULT_OK; } @@ -381,7 +379,7 @@ result_t SingleDataField::read(const PartType partType, default: return RESULT_ERR_INVALID_PART; } - bool remainder = m_length==REMAIN_LEN && m_dataType->isAdjustableLength(); + bool remainder = m_length == REMAIN_LEN && m_dataType->isAdjustableLength(); if (offset + (remainder?1:m_length) > data.size()) { return RESULT_ERR_INVALID_POS; } @@ -393,8 +391,8 @@ result_t SingleDataField::read(const PartType partType, if (leadingSeparator) { output << ","; } - if (outputIndex>=0 || m_name.empty() || !(outputFormat & OF_NAMES)) { - output << "\n \"" << static_cast(outputIndex<0?0:outputIndex) << "\": {\"name\": \"" << m_name << "\"" << ", \"value\": "; + if (outputIndex >= 0 || m_name.empty() || !(outputFormat & OF_NAMES)) { + output << "\n \"" << static_cast(outputIndex < 0 ? 0 : outputIndex) << "\": {\"name\": \"" << m_name << "\"" << ", \"value\": "; } else { output << "\n \"" << m_name << "\": {\"value\": "; } @@ -407,7 +405,7 @@ result_t SingleDataField::read(const PartType partType, } } - result_t result = readSymbols(data, m_partType==pt_masterData, offset, output, outputFormat); + result_t result = readSymbols(data, m_partType == pt_masterData, offset, output, outputFormat); if (result != RESULT_OK) { return result; } @@ -433,8 +431,7 @@ result_t SingleDataField::read(const PartType partType, result_t SingleDataField::write(istringstream& input, const PartType partType, SymbolString& data, - unsigned char offset, char separator, unsigned char* length) -{ + unsigned char offset, char separator, unsigned char* length) { if (partType != m_partType) { return RESULT_OK; } @@ -449,50 +446,52 @@ result_t SingleDataField::write(istringstream& input, default: return RESULT_ERR_INVALID_PART; } - return writeSymbols(input, (const unsigned char)offset, data, m_partType==pt_masterData, length); + return writeSymbols(input, (const unsigned char)offset, data, m_partType == pt_masterData, length); } result_t SingleDataField::readSymbols(SymbolString& input, const bool isMaster, const unsigned char offset, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { return m_dataType->readSymbols(input, isMaster, offset, m_length, output, outputFormat); } result_t SingleDataField::writeSymbols(istringstream& input, const unsigned char offset, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { return m_dataType->writeSymbols(input, offset, m_length, output, isMaster, usedLength); } -SingleDataField* SingleDataField::clone() -{ +SingleDataField* SingleDataField::clone() { return new SingleDataField(*this); } result_t SingleDataField::derive(string name, string comment, string unit, const PartType partType, int divisor, map values, - vector& fields) -{ - if (m_partType != pt_any && partType == pt_any) + vector& fields) { + if (m_partType != pt_any && partType == pt_any) { return RESULT_ERR_INVALID_PART; // cannot create a template from a concrete instance + } bool numeric = m_dataType->isNumeric(); - if (!numeric && (divisor != 0 || !values.empty())) + if (!numeric && (divisor != 0 || !values.empty())) { return RESULT_ERR_INVALID_ARG; // cannot set divisor or values for non-numeric field - if (name.empty()) + } + if (name.empty()) { name = m_name; - if (comment.empty()) + } + if (comment.empty()) { comment = m_comment; - if (unit.empty()) + } + if (unit.empty()) { unit = m_unit; + } DataType* dataType = m_dataType; if (numeric) { NumberDataType* numType = (NumberDataType*)m_dataType; result_t result = numType->derive(divisor, 0, numType); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } dataType = numType; } if (values.empty()) { @@ -503,23 +502,20 @@ result_t SingleDataField::derive(string name, string comment, return RESULT_OK; } -bool SingleDataField::hasField(const char* fieldName, bool numeric) -{ +bool SingleDataField::hasField(const char* fieldName, bool numeric) { bool numericType = m_dataType->isNumeric(); - return numeric==numericType && (fieldName==NULL || fieldName==m_name); + return numeric == numericType && (fieldName == NULL || fieldName == m_name); } -unsigned char SingleDataField::getLength(PartType partType, unsigned char maxLength) -{ +unsigned char SingleDataField::getLength(PartType partType, unsigned char maxLength) { if (partType != m_partType) { return (unsigned char)0; } - bool remainder = m_length==REMAIN_LEN && m_dataType->isAdjustableLength(); + bool remainder = m_length == REMAIN_LEN && m_dataType->isAdjustableLength(); return remainder ? maxLength : m_length; } -bool SingleDataField::hasFullByteOffset(bool after) -{ +bool SingleDataField::hasFullByteOffset(bool after) { if (m_length > 1 || !m_dataType->isNumeric()) { return true; } @@ -529,49 +525,50 @@ bool SingleDataField::hasFullByteOffset(bool after) } -ValueListDataField* ValueListDataField::clone() -{ +ValueListDataField* ValueListDataField::clone() { return new ValueListDataField(*this); } result_t ValueListDataField::derive(string name, string comment, string unit, const PartType partType, int divisor, map values, - vector& fields) -{ - if (m_partType != pt_any && partType == pt_any) + vector& fields) { + if (m_partType != pt_any && partType == pt_any) { return RESULT_ERR_INVALID_PART; // cannot create a template from a concrete instance - if (name.empty()) + } + if (name.empty()) { name = m_name; - if (comment.empty()) + } + if (comment.empty()) { comment = m_comment; - if (unit.empty()) + } + if (unit.empty()) { unit = m_unit; - if (divisor != 0 && divisor != 1) + } + if (divisor != 0 && divisor != 1) { return RESULT_ERR_INVALID_ARG; // cannot use divisor != 1 for value list field - + } if (!values.empty()) { NumberDataType* num = (NumberDataType*)m_dataType; - if (values.begin()->first < num->getMinValue() || values.rbegin()->first > num->getMaxValue()) + if (values.begin()->first < num->getMinValue() || values.rbegin()->first > num->getMaxValue()) { return RESULT_ERR_INVALID_ARG; // cannot use divisor != 1 for value list field - } - else + } + } else { values = m_values; - + } fields.push_back(new ValueListDataField(name, comment, unit, (NumberDataType*)m_dataType, partType, m_length, values)); - return RESULT_OK; } -void ValueListDataField::dump(ostream& output) -{ +void ValueListDataField::dump(ostream& output) { output << setw(0) << dec; // initialize formatting dumpString(output, m_name, false); output << FIELD_SEPARATOR; - if (m_partType == pt_masterData) + if (m_partType == pt_masterData) { output << "m"; - else if (m_partType == pt_slaveData) + } else if (m_partType == pt_slaveData) { output << "s"; + } output << FIELD_SEPARATOR; if (!m_dataType->dump(output, m_length)) { // no divisor appended for (map::iterator it = m_values.begin(); it != m_values.end(); it++) { @@ -587,13 +584,13 @@ void ValueListDataField::dump(ostream& output) result_t ValueListDataField::readSymbols(SymbolString& input, const bool isMaster, const unsigned char offset, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { unsigned int value = 0; result_t result = m_dataType->readRawValue(input, offset, m_length, value); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } map::iterator it = m_values.find(value); if (it == m_values.end() && value != m_dataType->getReplacement()) { // fall back to raw value in input @@ -601,85 +598,90 @@ result_t ValueListDataField::readSymbols(SymbolString& input, const bool isMaste return RESULT_OK; } if (it == m_values.end()) { - if (outputFormat & OF_JSON) + if (outputFormat & OF_JSON) { output << "null"; - else if (value == m_dataType->getReplacement()) + } else if (value == m_dataType->getReplacement()) { output << NULL_VALUE; - } else if (outputFormat & OF_NUMERIC) + } + } else if (outputFormat & OF_NUMERIC) { output << setw(0) << dec << static_cast(value); - else if (outputFormat & OF_JSON) + } else if (outputFormat & OF_JSON) { output << '"' << it->second << '"'; - else + } else { output << it->second; + } return RESULT_OK; } result_t ValueListDataField::writeSymbols(istringstream& input, const unsigned char offset, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { NumberDataType* numType = (NumberDataType*)m_dataType; - if (isIgnored()) + if (isIgnored()) { return numType->writeRawValue(numType->getReplacement(), offset, m_length, output, usedLength); // replacement value - + } const char* str = input.str().c_str(); - for (map::iterator it = m_values.begin(); it != m_values.end(); it++) - if (it->second.compare(str) == 0) + for (map::iterator it = m_values.begin(); it != m_values.end(); it++) { + if (it->second.compare(str) == 0) { return numType->writeRawValue(it->first, offset, m_length, output, usedLength); - - if (strcasecmp(str, NULL_VALUE) == 0) + } + } + if (strcasecmp(str, NULL_VALUE) == 0) { return numType->writeRawValue(numType->getReplacement(), offset, m_length, output, usedLength); // replacement value - + } char* strEnd = NULL; // fall back to raw value in input unsigned int value; value = (unsigned int)strtoul(str, &strEnd, 10); - if (strEnd == NULL || strEnd == str || (*strEnd != 0 && *strEnd != '.')) + if (strEnd == NULL || strEnd == str || (*strEnd != 0 && *strEnd != '.')) { return RESULT_ERR_INVALID_NUM; // invalid value - if (m_values.find(value) != m_values.end()) + } + if (m_values.find(value) != m_values.end()) { return numType->writeRawValue(value, offset, m_length, output, usedLength); - + } return RESULT_ERR_NOTFOUND; // value assignment not found } -ConstantDataField* ConstantDataField::clone() -{ +ConstantDataField* ConstantDataField::clone() { return new ConstantDataField(*this); } result_t ConstantDataField::derive(string name, string comment, string unit, const PartType partType, int divisor, map values, - vector& fields) -{ - if (m_partType != pt_any && partType == pt_any) + vector& fields) { + if (m_partType != pt_any && partType == pt_any) { return RESULT_ERR_INVALID_PART; // cannot create a template from a concrete instance - if (name.empty()) + } + if (name.empty()) { name = m_name; - if (comment.empty()) + } + if (comment.empty()) { comment = m_comment; - if (unit.empty()) + } + if (unit.empty()) { unit = m_unit; - if (divisor != 0) + } + if (divisor != 0) { return RESULT_ERR_INVALID_ARG; // cannot use other than current divisor for constant value field + } if (!values.empty()) { return RESULT_ERR_INVALID_ARG; // cannot use value list for constant value field } fields.push_back(new ConstantDataField(name, comment, unit, m_dataType, partType, m_length, m_value, m_verify)); - return RESULT_OK; } -void ConstantDataField::dump(ostream& output) -{ +void ConstantDataField::dump(ostream& output) { output << setw(0) << dec; // initialize formatting dumpString(output, m_name, false); output << FIELD_SEPARATOR; - if (m_partType == pt_masterData) + if (m_partType == pt_masterData) { output << "m"; - else if (m_partType == pt_slaveData) + } else if (m_partType == pt_slaveData) { output << "s"; + } output << FIELD_SEPARATOR; if (!m_dataType->dump(output, m_length)) { // no divisor appended output << (m_verify?"==":"=") << m_value; @@ -690,8 +692,7 @@ void ConstantDataField::dump(ostream& output) result_t ConstantDataField::readSymbols(SymbolString& input, const bool isMaster, const unsigned char offset, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { ostringstream coutput; result_t result = SingleDataField::readSymbols(input, isMaster, offset, coutput, 0); if (result != RESULT_OK) { @@ -700,7 +701,7 @@ result_t ConstantDataField::readSymbols(SymbolString& input, const bool isMaster if (m_verify) { string value = coutput.str(); FileReader::trim(value); - if (value!=m_value) { + if (value != m_value) { return RESULT_ERR_OUT_OF_RANGE; } } @@ -709,8 +710,7 @@ result_t ConstantDataField::readSymbols(SymbolString& input, const bool isMaster result_t ConstantDataField::writeSymbols(istringstream& input, const unsigned char offset, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { istringstream cinput(m_value); return SingleDataField::writeSymbols(cinput, offset, output, isMaster, usedLength); } @@ -718,9 +718,8 @@ result_t ConstantDataField::writeSymbols(istringstream& input, DataFieldSet* DataFieldSet::s_identFields = NULL; -DataFieldSet* DataFieldSet::getIdentFields() -{ - if (s_identFields==NULL) { +DataFieldSet* DataFieldSet::getIdentFields() { + if (s_identFields == NULL) { NumberDataType* uchDataType = (NumberDataType*)DataTypeList::getInstance()->get("UCH"); StringDataType* stringDataType = (StringDataType*)DataTypeList::getInstance()->get("STR"); NumberDataType* pinDataType = (NumberDataType*)DataTypeList::getInstance()->get("PIN"); @@ -760,16 +759,14 @@ DataFieldSet* DataFieldSet::getIdentFields() return s_identFields; } -DataFieldSet::~DataFieldSet() -{ +DataFieldSet::~DataFieldSet() { while (!m_fields.empty()) { delete m_fields.back(); m_fields.pop_back(); } } -DataFieldSet* DataFieldSet::clone() -{ +DataFieldSet* DataFieldSet::clone() { vector fields; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { fields.push_back((*it)->clone()); @@ -777,23 +774,22 @@ DataFieldSet* DataFieldSet::clone() return new DataFieldSet(m_name, m_comment, fields); } -unsigned char DataFieldSet::getLength(PartType partType, unsigned char maxLength) -{ +unsigned char DataFieldSet::getLength(PartType partType, unsigned char maxLength) { unsigned char length = 0; - bool previousFullByteOffset[] = { true, true, true, true }; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { SingleDataField* field = *it; if (field->getPartType() == partType) { - if (!previousFullByteOffset[partType] && !field->hasFullByteOffset(false)) + if (!previousFullByteOffset[partType] && !field->hasFullByteOffset(false)) { length--; - + } unsigned char fieldLength = field->getLength(partType, maxLength); - if (fieldLength>=maxLength) + if (fieldLength >= maxLength) { maxLength = 0; - else + } else { maxLength = (unsigned char)(maxLength-fieldLength); + } length = (unsigned char)(length + fieldLength); previousFullByteOffset[partType] = field->hasFullByteOffset(true); @@ -803,12 +799,11 @@ unsigned char DataFieldSet::getLength(PartType partType, unsigned char maxLength return length; } -string DataFieldSet::getName(signed char fieldIndex) -{ - if (fieldIndex<0) { +string DataFieldSet::getName(signed char fieldIndex) { + if (fieldIndex < 0) { return m_name; } - if ((unsigned char)fieldIndex>=m_fields.size()) { + if ((unsigned char)fieldIndex >= m_fields.size()) { return ""; } if (m_uniqueNames) { @@ -822,33 +817,33 @@ string DataFieldSet::getName(signed char fieldIndex) result_t DataFieldSet::derive(string name, string comment, string unit, const PartType partType, int divisor, map values, - vector& fields) -{ - if (!values.empty()) + vector& fields) { + if (!values.empty()) { return RESULT_ERR_INVALID_ARG; // value list not allowed in set derive + } bool first = true; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { result_t result = (*it)->derive("", first?comment:"", first?unit:"", partType, divisor, values, fields); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } first = false; } return RESULT_OK; } -bool DataFieldSet::hasField(const char* fieldName, bool numeric) -{ +bool DataFieldSet::hasField(const char* fieldName, bool numeric) { for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { SingleDataField* field = *it; - if (field->hasField(fieldName, numeric)==0) + if (field->hasField(fieldName, numeric) == 0) { return true; + } } return false; } -void DataFieldSet::dump(ostream& output) -{ +void DataFieldSet::dump(ostream& output) { bool first = true; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { if (first) { @@ -862,22 +857,20 @@ void DataFieldSet::dump(ostream& output) result_t DataFieldSet::read(const PartType partType, SymbolString& data, unsigned char offset, - unsigned int& output, const char* fieldName, signed char fieldIndex) -{ + unsigned int& output, const char* fieldName, signed char fieldIndex) { bool previousFullByteOffset = true, found = false, findFieldIndex = fieldName != NULL && fieldIndex >= 0; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { SingleDataField* field = *it; - if (partType != pt_any && field->getPartType() != partType) + if (partType != pt_any && field->getPartType() != partType) { continue; - - if (!previousFullByteOffset && !field->hasFullByteOffset(false)) + } + if (!previousFullByteOffset && !field->hasFullByteOffset(false)) { offset--; - + } result_t result = field->read(partType, data, offset, output, fieldName, fieldIndex); - - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; - + } offset = (unsigned char)(offset + field->getLength(partType, (unsigned char)(data.size()-offset))); previousFullByteOffset = field->hasFullByteOffset(true); if (result != RESULT_EMPTY) { @@ -885,8 +878,9 @@ result_t DataFieldSet::read(const PartType partType, } if (findFieldIndex && fieldName == field->getName()) { if (fieldIndex == 0) { - if (!found) + if (!found) { return RESULT_ERR_NOTFOUND; + } break; } fieldIndex--; @@ -903,26 +897,26 @@ result_t DataFieldSet::read(const PartType partType, result_t DataFieldSet::read(const PartType partType, SymbolString& data, unsigned char offset, ostringstream& output, OutputFormat outputFormat, signed char outputIndex, - bool leadingSeparator, const char* fieldName, signed char fieldIndex) -{ + bool leadingSeparator, const char* fieldName, signed char fieldIndex) { bool previousFullByteOffset = true, found = false, findFieldIndex = fieldName != NULL && fieldIndex >= 0; - if (!m_uniqueNames && outputIndex<0) + if (!m_uniqueNames && outputIndex < 0) { outputIndex = 0; + } for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { SingleDataField* field = *it; if (partType != pt_any && field->getPartType() != partType) { - if (outputIndex>=0 && !field->isIgnored()) + if (outputIndex >= 0 && !field->isIgnored()) { outputIndex++; + } continue; } - if (!previousFullByteOffset && !field->hasFullByteOffset(false)) + if (!previousFullByteOffset && !field->hasFullByteOffset(false)) { offset--; - + } result_t result = field->read(partType, data, offset, output, outputFormat, outputIndex, leadingSeparator, fieldName, fieldIndex); - - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; - + } offset = (unsigned char)(offset + field->getLength(partType, (unsigned char)(data.size()-offset))); previousFullByteOffset = field->hasFullByteOffset(true); if (result != RESULT_EMPTY) { @@ -931,14 +925,16 @@ result_t DataFieldSet::read(const PartType partType, } if (findFieldIndex && fieldName == field->getName()) { if (fieldIndex == 0) { - if (!found) + if (!found) { return RESULT_ERR_NOTFOUND; + } break; } fieldIndex--; } - if (outputIndex>=0 && !field->isIgnored()) + if (outputIndex >= 0 && !field->isIgnored()) { outputIndex++; + } } if (!found) { @@ -957,57 +953,54 @@ result_t DataFieldSet::read(const PartType partType, result_t DataFieldSet::write(istringstream& input, const PartType partType, SymbolString& data, - unsigned char offset, char separator, unsigned char* length) -{ + unsigned char offset, char separator, unsigned char* length) { string token; bool previousFullByteOffset = true; unsigned char baseOffset = offset; for (vector::iterator it = m_fields.begin(); it < m_fields.end(); it++) { SingleDataField* field = *it; - if (partType != pt_any && field->getPartType() != partType) + if (partType != pt_any && field->getPartType() != partType) { continue; - - if (!previousFullByteOffset && !field->hasFullByteOffset(false)) + } + if (!previousFullByteOffset && !field->hasFullByteOffset(false)) { offset--; - + } result_t result; unsigned char fieldLength; if (m_fields.size() > 1) { - if (field->isIgnored()) + if (field->isIgnored()) { token.clear(); - else if (!getline(input, token, separator)) + } else if (!getline(input, token, separator)) { token.clear(); - + } istringstream single(token); result = (*it)->write(single, partType, data, offset, separator, &fieldLength); - } - else + } else { result = (*it)->write(input, partType, data, offset, separator, &fieldLength); - - if (result != RESULT_OK) + } + if (result != RESULT_OK) { return result; - + } offset = (unsigned char)(offset+fieldLength); previousFullByteOffset = field->hasFullByteOffset(true); } - if (length!=NULL) + if (length != NULL) { *length = (unsigned char)(offset-baseOffset); + } return RESULT_OK; } DataFieldTemplates::DataFieldTemplates(DataFieldTemplates& other) - : FileReader::FileReader(false) -{ + : FileReader::FileReader(false) { for (map::iterator it = other.m_fieldsByName.begin(); it != other.m_fieldsByName.end(); it++) { m_fieldsByName[it->first] = it->second->clone(); } } -void DataFieldTemplates::clear() -{ +void DataFieldTemplates::clear() { for (map::iterator it = m_fieldsByName.begin(); it != m_fieldsByName.end(); it++) { delete it->second; it->second = NULL; @@ -1015,58 +1008,55 @@ void DataFieldTemplates::clear() m_fieldsByName.clear(); } -result_t DataFieldTemplates::add(DataField* field, string name, bool replace) -{ - if (name.length() == 0) +result_t DataFieldTemplates::add(DataField* field, string name, bool replace) { + if (name.length() == 0) { name = field->getName(); + } map::iterator it = m_fieldsByName.find(name); if (it != m_fieldsByName.end()) { - if (!replace) + if (!replace) { return RESULT_ERR_DUPLICATE_NAME; // duplicate key - + } delete it->second; it->second = field; - return RESULT_OK; } m_fieldsByName[name] = field; - return RESULT_OK; } result_t DataFieldTemplates::addFromFile(vector::iterator& begin, const vector::iterator end, vector< vector >* defaults, const string& defaultDest, const string& defaultCircuit, const string& defaultSuffix, - const string& filename, unsigned int lineNo) -{ + const string& filename, unsigned int lineNo) { vector::iterator restart = begin; DataField* field = NULL; string name; if (begin != end) { size_t colon = begin->find(':'); - if (colon!=string::npos) { + if (colon != string::npos) { name = begin->substr(0, colon); begin->erase(0, colon+1); } } result_t result = DataField::create(begin, end, this, field, false, true, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; - + } result = add(field, name, true); - if (result==RESULT_ERR_DUPLICATE_NAME) + if (result == RESULT_ERR_DUPLICATE_NAME) { begin = restart+1; // mark name as invalid - if (result != RESULT_OK) + } + if (result != RESULT_OK) { delete field; - + } return result; } -DataField* DataFieldTemplates::get(const string name) -{ +DataField* DataFieldTemplates::get(const string name) { map::const_iterator ref = m_fieldsByName.find(name); - if (ref == m_fieldsByName.end()) + if (ref == m_fieldsByName.end()) { return NULL; - + } return ref->second; } diff --git a/src/lib/ebus/data.h b/src/lib/ebus/data.h index 91fe168b..85711d4f 100644 --- a/src/lib/ebus/data.h +++ b/src/lib/ebus/data.h @@ -16,19 +16,19 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_DATA_H_ -#define LIBEBUS_DATA_H_ +#ifndef LIB_EBUS_DATA_H_ +#define LIB_EBUS_DATA_H_ -#include "symbol.h" -#include "result.h" -#include "filereader.h" -#include "datatype.h" #include #include #include #include #include #include +#include "symbol.h" +#include "result.h" +#include "filereader.h" +#include "datatype.h" /** @file data.h * Classes related to defining fields based on data types in symbols on the @@ -93,7 +93,7 @@ public: DataFieldTemplates* templates, DataField*& returnField, const bool isWriteMessage, const bool isTemplate, const bool isBroadcastOrMasterDestination, - const unsigned char maxFieldLength=MAX_POS); + const unsigned char maxFieldLength = MAX_POS); /** * Dump the @a string optionally embedded in @a TEXT_SEPARATOR to the output. @@ -101,7 +101,7 @@ public: * @param str the @a string to dump. * @param prependFieldSeparator whether to start with a @a FIELD_SEPARATOR. */ - static void dumpString(ostream& output, const string str, const bool prependFieldSeparator=true); + static void dumpString(ostream& output, const string str, const bool prependFieldSeparator = true); /** * Returns the length of this field (or contained fields) in bytes. @@ -109,7 +109,7 @@ public: * @param maxLength the maximum length for calculating remainder of input. * @return the length of this field (or contained fields) in bytes. */ - virtual unsigned char getLength(PartType partType, unsigned char maxLength=MAX_LEN) = 0; + virtual unsigned char getLength(PartType partType, unsigned char maxLength = MAX_LEN) = 0; /** * Derive a new @a DataField from this field. @@ -132,7 +132,7 @@ public: * @param fieldIndex the index of the field, or -1 for this. * @return the field name, or the index as string if not unique or not available. */ - virtual string getName(signed char fieldIndex=-1) { return m_name; } + virtual string getName(signed char fieldIndex = -1) { return m_name; } /** * Get the field comment. @@ -169,7 +169,7 @@ public: */ virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - unsigned int& output, const char* fieldName=NULL, signed char fieldIndex=-1) = 0; + unsigned int& output, const char* fieldName = NULL, signed char fieldIndex = -1) = 0; /** * Reads the value from the @a SymbolString. @@ -188,8 +188,8 @@ public: */ virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - ostringstream& output, OutputFormat outputFormat, signed char outputIndex=-1, - bool leadingSeparator=false, const char* fieldName=NULL, signed char fieldIndex=-1) = 0; + ostringstream& output, OutputFormat outputFormat, signed char outputIndex = -1, + bool leadingSeparator = false, const char* fieldName = NULL, signed char fieldIndex = -1) = 0; /** * Writes the value to the master or slave @a SymbolString. @@ -203,7 +203,7 @@ public: */ virtual result_t write(istringstream& input, const PartType partType, SymbolString& data, - unsigned char offset, char separator=UI_FIELD_SEPARATOR, unsigned char* length=NULL) = 0; + unsigned char offset, char separator = UI_FIELD_SEPARATOR, unsigned char* length = NULL) = 0; protected: @@ -287,7 +287,7 @@ public: PartType getPartType() const { return m_partType; } // @copydoc - virtual unsigned char getLength(PartType partType, unsigned char maxLength=MAX_LEN); + virtual unsigned char getLength(PartType partType, unsigned char maxLength = MAX_LEN); // @copydoc virtual result_t derive(string name, string comment, @@ -312,18 +312,18 @@ public: // @copydoc virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - unsigned int& output, const char* fieldName=NULL, signed char fieldIndex=-1); + unsigned int& output, const char* fieldName = NULL, signed char fieldIndex = -1); // @copydoc virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - ostringstream& output, OutputFormat outputFormat, signed char outputIndex=-1, - bool leadingSeparator=false, const char* fieldName=NULL, signed char fieldIndex=-1); + ostringstream& output, OutputFormat outputFormat, signed char outputIndex = -1, + bool leadingSeparator = false, const char* fieldName = NULL, signed char fieldIndex = -1); // @copydoc virtual result_t write(istringstream& input, const PartType partType, SymbolString& data, - unsigned char offset, char separator=UI_FIELD_SEPARATOR, unsigned char* length=NULL); + unsigned char offset, char separator = UI_FIELD_SEPARATOR, unsigned char* length = NULL); protected: @@ -526,11 +526,13 @@ public: { bool uniqueNames = true; map names; - for (vector::const_iterator it=fields.begin(); it!=fields.end(); it++) { + for (vector::const_iterator it = fields.begin(); it != fields.end(); it++) { SingleDataField* field = *it; - if (field->isIgnored()) continue; + if (field->isIgnored()) { + continue; + } string name = field->getName(); - if (name.empty() || names.find(name)!=names.end()) { + if (name.empty() || names.find(name) != names.end()) { uniqueNames = false; break; } @@ -548,10 +550,10 @@ public: virtual DataFieldSet* clone(); // @copydoc - virtual unsigned char getLength(PartType partType, unsigned char maxLength=MAX_LEN); + virtual unsigned char getLength(PartType partType, unsigned char maxLength = MAX_LEN); // @copydoc - virtual string getName(signed char fieldIndex=-1); + virtual string getName(signed char fieldIndex = -1); // @copydoc virtual result_t derive(string name, string comment, @@ -564,14 +566,14 @@ public: * @param index the index of the @a SingleDataField to return. * @return the @a SingleDataField at the specified index, or NULL. */ - SingleDataField* operator[](const size_t index) { if (index >= m_fields.size()) return NULL; return m_fields[index]; } + SingleDataField* operator[](const size_t index) { if (index >= m_fields.size()) { return NULL; } return m_fields[index]; } /** * Returns the @a SingleDataField at the specified index. * @param index the index of the @a SingleDataField to return. * @return the @a SingleDataField at the specified index, or NULL. */ - const SingleDataField* operator[](const size_t index) const { if (index >= m_fields.size()) return NULL; return m_fields[index]; } + const SingleDataField* operator[](const size_t index) const { if (index >= m_fields.size()) { return NULL; } return m_fields[index]; } /** * Returns the number of @a SingleDataFields instances in this set. @@ -588,18 +590,18 @@ public: // @copydoc virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - unsigned int& output, const char* fieldName=NULL, signed char fieldIndex=-1); + unsigned int& output, const char* fieldName = NULL, signed char fieldIndex = -1); // @copydoc virtual result_t read(const PartType partType, SymbolString& data, unsigned char offset, - ostringstream& output, OutputFormat outputFormat, signed char outputIndex=-1, - bool leadingSeparator=false, const char* fieldName=NULL, signed char fieldIndex=-1); + ostringstream& output, OutputFormat outputFormat, signed char outputIndex = -1, + bool leadingSeparator = false, const char* fieldName = NULL, signed char fieldIndex = -1); // @copydoc virtual result_t write(istringstream& input, const PartType partType, SymbolString& data, - unsigned char offset, char separator=UI_FIELD_SEPARATOR, unsigned char* length=NULL); + unsigned char offset, char separator = UI_FIELD_SEPARATOR, unsigned char* length = NULL); private: @@ -653,7 +655,7 @@ public: * @return @a RESULT_OK on success, or an error code. * Note: the caller may not free the added instance on success. */ - result_t add(DataField* field, string name="", bool replace=false); + result_t add(DataField* field, string name = "", bool replace = false); // @copydoc virtual result_t addFromFile(vector::iterator& begin, const vector::iterator end, @@ -675,4 +677,4 @@ private: }; -#endif // LIBEBUS_DATA_H_ +#endif // LIB_EBUS_DATA_H_ diff --git a/src/lib/ebus/datatype.cpp b/src/lib/ebus/datatype.cpp index 0e269e8d..f5deb7c5 100644 --- a/src/lib/ebus/datatype.cpp +++ b/src/lib/ebus/datatype.cpp @@ -21,13 +21,12 @@ #endif #include "datatype.h" +#include #include #include #include #include #include -#include - #ifdef HAVE_CONTRIB # include "contrib/contrib.h" #endif @@ -76,8 +75,7 @@ int parseSignedInt(const char* str, int base, const int minValue, const int maxV return (int)ret; } -void printErrorPos(ostream& out, vector::iterator begin, const vector::iterator end, vector::iterator pos, string filename, size_t lineNo, result_t result) -{ +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) { pos--; } @@ -105,7 +103,7 @@ void printErrorPos(ostream& out, vector::iterator begin, const vector(length); @@ -141,20 +139,18 @@ bool DataType::dump(ostream& output, const unsigned char length) const result_t StringDataType::readRawValue(SymbolString& input, const unsigned char offset, - const unsigned char length, unsigned int& value) -{ + const unsigned char length, unsigned int& value) { return RESULT_EMPTY; } result_t StringDataType::readSymbols(SymbolString& input, const bool isMaster, const unsigned char baseOffset, const unsigned char length, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { size_t start = 0, count = length; int incr = 1; unsigned char ch; bool terminated = false; - if (count==REMAIN_LEN && input.size()>baseOffset) { + if (count == REMAIN_LEN && input.size() > baseOffset) { count = input.size()-baseOffset; } else if (baseOffset + count > input.size()) { return RESULT_ERR_INVALID_POS; @@ -200,10 +196,9 @@ result_t StringDataType::readSymbols(SymbolString& input, const bool isMaster, result_t StringDataType::writeSymbols(istringstream& input, unsigned char baseOffset, const unsigned char length, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { size_t start = 0, count = length; - bool remainder = count==REMAIN_LEN && hasFlag(ADJ); + bool remainder = count == REMAIN_LEN && hasFlag(ADJ); int incr = 1; unsigned int value = 0; string token; @@ -219,7 +214,7 @@ result_t StringDataType::writeSymbols(istringstream& input, for (size_t offset = start, i = 0; i < count; offset += incr, i++) { output[baseOffset + offset] = (unsigned char)m_replacement; // fill up with replacement } - if (usedLength!=NULL) { + if (usedLength != NULL) { *usedLength = (unsigned char)count; } return RESULT_OK; @@ -244,16 +239,18 @@ result_t StringDataType::writeSymbols(istringstream& input, return RESULT_ERR_INVALID_NUM; // too short hex value } value = parseInt(token.c_str(), 16, 0, 0xff, result); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; // invalid hex value + } } } else { if (input.eof()) { value = m_replacement; } else { value = input.get(); - if (input.eof() || value < 0x20) + if (input.eof() || value < 0x20) { value = m_replacement; + } } } if (remainder && input.eof() && i > 0) { @@ -272,7 +269,7 @@ result_t StringDataType::writeSymbols(istringstream& input, if (!remainder && i < count) { return RESULT_ERR_EOF; // input too short } - if (usedLength!=NULL) { + if (usedLength != NULL) { *usedLength = (unsigned char)((offset-start)*incr); } return RESULT_OK; @@ -280,19 +277,17 @@ result_t StringDataType::writeSymbols(istringstream& input, result_t DateTimeDataType::readRawValue(SymbolString& input, const unsigned char offset, - const unsigned char length, unsigned int& value) -{ + const unsigned char length, unsigned int& value) { return RESULT_EMPTY; } result_t DateTimeDataType::readSymbols(SymbolString& input, const bool isMaster, const unsigned char baseOffset, const unsigned char length, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { size_t start = 0, count = length; int incr = 1; unsigned char ch, last = 0, hour = 0; - if (count==REMAIN_LEN && input.size()>baseOffset) { + if (count == REMAIN_LEN && input.size() > baseOffset) { count = input.size()-baseOffset; } else if (baseOffset + count > input.size()) { return RESULT_ERR_INVALID_POS; @@ -341,7 +336,7 @@ result_t DateTimeDataType::readSymbols(SymbolString& input, const bool isMaster, int m = (int)((mjd-14956.1-(int)(y*365.25))/30.6001); int d = mjd-14956-(int)(y*365.25)-(int)(m*30.6001); m--; - if (m>=13) { + if (m >= 13) { y++; m -= 12; } @@ -402,8 +397,9 @@ result_t DateTimeDataType::readSymbols(SymbolString& input, const bool isMaster, } else if (ch > 59 || (hour == 24 && ch > 0)) { return RESULT_ERR_OUT_OF_RANGE; // invalid time } - if (i > 0) + if (i > 0) { output << ":"; + } output << setw(2) << dec << setfill('0') << static_cast(ch); break; } @@ -417,10 +413,9 @@ result_t DateTimeDataType::readSymbols(SymbolString& input, const bool isMaster, result_t DateTimeDataType::writeSymbols(istringstream& input, unsigned char baseOffset, const unsigned char length, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { size_t start = 0, count = length; - bool remainder = count==REMAIN_LEN && hasFlag(ADJ); + bool remainder = count == REMAIN_LEN && hasFlag(ADJ); int incr = 1; unsigned int value = 0, last = 0, lastLast = 0; string token; @@ -436,7 +431,7 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, for (size_t offset = start, i = 0; i < count; offset += incr, i++) { output[baseOffset + offset] = (unsigned char)m_replacement; // fill up with replacement } - if (usedLength!=NULL) { + if (usedLength != NULL) { *usedLength = (unsigned char)count; } return RESULT_OK; @@ -450,8 +445,9 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, switch (type) { case 2: // date only - if (length == 4 && i == 2) + if (length == 4 && i == 2) { continue; // skip weekday in between + } if (input.eof() || !getline(input, token, '.')) { return RESULT_ERR_EOF; // incomplete } @@ -469,11 +465,11 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, count++; } else if (i + 1 == count) { int y = (value < 100 ? value + 2000 : value) - 1900; - int l = last<=2 ? 1 : 0; + int l = last <= 2 ? 1 : 0; int mjd = 14956 + lastLast + (int)((y-l)*365.25) + (int)((last+1+l*12)*30.6001); value = mjd - 15020; // 01.01.1900 output[baseOffset + offset] = (unsigned char)(value&0xff); - value >>= 8; + value >>= 8; offset += incr; skip = false; break; @@ -483,13 +479,13 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, if (length == 4) { // calculate local week day int y = (value < 100 ? value + 2000 : value) - 1900; - int l = last<=2 ? 1 : 0; + int l = last <= 2 ? 1 : 0; int mjd = 14956 + lastLast + (int)((y-l)*365.25) + (int)((last+1+l*12)*30.6001); int daysSinceSunday = (mjd+3) % 7; // Sun=0 if (hasFlag(BCD)) { output[baseOffset + offset - incr] = (unsigned char)((6+daysSinceSunday) % 7); // Sun=0x06 } else { - output[baseOffset + offset - incr] = (unsigned char)(daysSinceSunday==0 ? 7 : daysSinceSunday); // Sun=0x07 + output[baseOffset + offset - incr] = (unsigned char)(daysSinceSunday == 0 ? 7 : daysSinceSunday); // Sun=0x07 } } if (value >= 2000) { @@ -535,7 +531,7 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, } value += last*60; output[baseOffset + offset] = (unsigned char)(value&0xff); - value >>= 8; + value >>= 8; offset += incr; } else if (length == 1) { // truncated time if (i == 0) { @@ -569,7 +565,7 @@ result_t DateTimeDataType::writeSymbols(istringstream& input, if (!remainder && i < count) { return RESULT_ERR_EOF; // input too short } - if (usedLength!=NULL) { + if (usedLength != NULL) { *usedLength = (unsigned char)((offset-start)*incr); } return RESULT_OK; @@ -600,15 +596,14 @@ bool NumberDataType::dump(ostream& output, unsigned char length) const output << static_cast(m_divisor / m_baseType->m_divisor); return true; } - } else if (m_divisor!=1) { + } else if (m_divisor != 1) { output << static_cast(m_divisor); return true; } return false; } -result_t NumberDataType::derive(int divisor, unsigned char bitCount, NumberDataType* &derived) -{ +result_t NumberDataType::derive(int divisor, unsigned char bitCount, NumberDataType* &derived) { if (divisor == 0) { divisor = 1; } @@ -663,8 +658,7 @@ result_t NumberDataType::derive(int divisor, unsigned char bitCount, NumberDataT result_t NumberDataType::readRawValue(SymbolString& input, unsigned char baseOffset, const unsigned char length, - unsigned int& value) -{ + unsigned int& value) { size_t start = 0, count = length; int incr = 1; unsigned char ch; @@ -687,21 +681,22 @@ result_t NumberDataType::readRawValue(SymbolString& input, return RESULT_OK; } if (!hasFlag(HCD)) { - if ((ch & 0xf0) > 0x90 || (ch & 0x0f) > 0x09) + if ((ch & 0xf0) > 0x90 || (ch & 0x0f) > 0x09) { return RESULT_ERR_OUT_OF_RANGE; // invalid BCD - + } ch = (unsigned char)((ch >> 4) * 10 + (ch & 0x0f)); - } else if (ch > 0x63) + } else if (ch > 0x63) { return RESULT_ERR_OUT_OF_RANGE; // invalid HCD + } value += ch * exp; exp *= 100; } else { value |= ch * exp; - exp <<= 8; + exp <<= 8; } } if (m_firstBit > 0) { - value >>= m_firstBit; + value >>= m_firstBit; } if (m_bitCount < 8) { value &= (1 << m_bitCount) - 1; @@ -711,8 +706,7 @@ result_t NumberDataType::readRawValue(SymbolString& input, result_t NumberDataType::readSymbols(SymbolString& input, const bool isMaster, const unsigned char baseOffset, const unsigned char length, - ostringstream& output, OutputFormat outputFormat) -{ + ostringstream& output, OutputFormat outputFormat) { unsigned int value = 0; int signedValue; @@ -810,8 +804,7 @@ result_t NumberDataType::readSymbols(SymbolString& input, const bool isMaster, result_t NumberDataType::writeRawValue(unsigned int value, const unsigned char baseOffset, const unsigned char length, - SymbolString& output, unsigned char* usedLength) -{ + SymbolString& output, unsigned char* usedLength) { size_t start = 0, count = length; int incr = 1; unsigned char ch; @@ -820,7 +813,7 @@ result_t NumberDataType::writeRawValue(unsigned int value, return RESULT_ERR_OUT_OF_RANGE; } if (m_firstBit > 0) { - value <<= m_firstBit; + value <<= m_firstBit; } if (hasFlag(REV)) { // reverted binary representation (most significant byte first) @@ -841,7 +834,7 @@ result_t NumberDataType::writeRawValue(unsigned int value, exp *= 100; } else { ch = (value / exp) & 0xff; - exp <<= 8; + exp <<= 8; } if (offset == start && (m_bitCount % 8) != 0 && baseOffset + offset < output.size()) { output[baseOffset + offset] |= ch; @@ -849,7 +842,7 @@ result_t NumberDataType::writeRawValue(unsigned int value, output[baseOffset + offset] = ch; } } - if (usedLength!=NULL) { + if (usedLength != NULL) { *usedLength = length; } return RESULT_OK; @@ -857,8 +850,7 @@ result_t NumberDataType::writeRawValue(unsigned int value, result_t NumberDataType::writeSymbols(istringstream& input, const unsigned char baseOffset, const unsigned char length, - SymbolString& output, const bool isMaster, unsigned char* usedLength) -{ + SymbolString& output, const bool isMaster, unsigned char* usedLength) { unsigned int value; const char* str = input.str().c_str(); @@ -972,8 +964,7 @@ bool DataTypeList::s_contrib_initialized = libebus_contrib_register(); #endif -DataTypeList::DataTypeList() -{ +DataTypeList::DataTypeList() { add(new StringDataType("STR", MAX_LEN*8, ADJ, ' ')); // >= 1 byte character string filled up with space add(new NumberDataType("PIN", 16, FIX|BCD|REV, 0xffff, 0, 0x9999, 1)); // unsigned decimal in BCD, 0000 - 9999 (fixed length) add(new NumberDataType("UCH", 8, 0, 0xff, 0, 0xfe, 1)); // unsigned integer, 0 - 254 @@ -1036,13 +1027,11 @@ DataTypeList::DataTypeList() add(new NumberDataType("BI7", 1, ADJ|REQ, 0, 7, 1)); // bit 7 } -DataTypeList* DataTypeList::getInstance() -{ +DataTypeList* DataTypeList::getInstance() { return &s_instance; } -void DataTypeList::clear() -{ +void DataTypeList::clear() { for (list::iterator it = m_cleanupTypes.begin(); it != m_cleanupTypes.end(); it++) { delete *it; } @@ -1051,12 +1040,11 @@ void DataTypeList::clear() m_typesById.clear(); } -result_t DataTypeList::add(DataType* dataType) -{ +result_t DataTypeList::add(DataType* dataType) { if (!dataType->isAdjustableLength()) { ostringstream str; unsigned char bitCount = dataType->getBitCount(); - str << dataType->getId() << LENGTH_SEPARATOR << static_cast(bitCount>=8?bitCount/8:bitCount); + str << dataType->getId() << LENGTH_SEPARATOR << static_cast(bitCount >= 8?bitCount/8:bitCount); map::iterator it = m_typesByIdLength.find(str.str()); if (it != m_typesByIdLength.end()) { return RESULT_ERR_DUPLICATE_NAME; // duplicate key @@ -1074,8 +1062,7 @@ result_t DataTypeList::add(DataType* dataType) return RESULT_OK; } -DataType* DataTypeList::get(const string id, const unsigned char length) -{ +DataType* DataTypeList::get(const string id, const unsigned char length) { DataType* dataType = NULL; if (length > 0) { ostringstream str; diff --git a/src/lib/ebus/datatype.h b/src/lib/ebus/datatype.h index a76b9da5..e3d2dded 100644 --- a/src/lib/ebus/datatype.h +++ b/src/lib/ebus/datatype.h @@ -16,12 +16,9 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_DATATYPE_H_ -#define LIBEBUS_DATATYPE_H_ +#ifndef LIB_EBUS_DATATYPE_H_ +#define LIB_EBUS_DATATYPE_H_ -#include "symbol.h" -#include "result.h" -#include "filereader.h" #include #include #include @@ -29,6 +26,9 @@ #include #include #include +#include "symbol.h" +#include "result.h" +#include "filereader.h" /** @file datatype.h * Classes, functions, and constants related to decoding/encoding of symbols @@ -116,7 +116,7 @@ static const unsigned int CON = 0x1000; //!< marker for a constant value * @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); +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. @@ -128,7 +128,7 @@ unsigned int parseInt(const char* str, int base, const unsigned int minValue, co * @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); +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. @@ -284,7 +284,7 @@ public: * @param isHex true for hex digits instead of characters. */ StringDataType(const string id, const unsigned char bitCount, const unsigned short flags, - const unsigned int replacement, bool isHex=false) + const unsigned int replacement, bool isHex = false) : DataType(id, bitCount, flags, replacement), m_isHex(isHex) {} /** @@ -494,7 +494,7 @@ public: */ virtual result_t writeRawValue(unsigned int value, const unsigned char offset, const unsigned char length, - SymbolString& output, unsigned char* usedLength=NULL); + SymbolString& output, unsigned char* usedLength = NULL); // @copydoc virtual result_t writeSymbols(istringstream& input, @@ -575,7 +575,7 @@ public: * @return the @a DataType instance, or NULL if not available. * Note: the caller may not free the instance. */ - DataType* get(const string id, const unsigned char length=0); + DataType* get(const string id, const unsigned char length = 0); private: @@ -599,4 +599,4 @@ private: }; -#endif // LIBEBUS_DATATYPE_H_ +#endif // LIB_EBUS_DATATYPE_H_ diff --git a/src/lib/ebus/device.cpp b/src/lib/ebus/device.cpp index 747e50e1..d71a2989 100644 --- a/src/lib/ebus/device.cpp +++ b/src/lib/ebus/device.cpp @@ -21,47 +21,44 @@ #endif #include "device.h" -#include "data.h" -#include -#include #include -#include #include #include #include #include #include #include - #ifdef HAVE_PPOLL # include #endif +#include +#include +#include +#include "data.h" using namespace std; -Device::~Device() -{ +Device::~Device() { close(); } -Device* Device::create(const char* name, const bool checkDevice, const bool readOnly, const bool initialSend) -{ +Device* Device::create(const char* name, const bool checkDevice, const bool readOnly, const bool initialSend) { if (strchr(name, '/') == NULL && strchr(name, ':') != NULL) { char* in = strdup(name); bool udp = false; char* addrpos = in; char* portpos = strchr(addrpos, ':'); - if (portpos==addrpos+3 && (strncmp(addrpos, "tcp", 3)==0 || (udp=(strncmp(addrpos, "udp", 3)==0)))) { + if (portpos == addrpos+3 && (strncmp(addrpos, "tcp", 3) == 0 || (udp=(strncmp(addrpos, "udp", 3) == 0)))) { addrpos += 4; portpos = strchr(addrpos, ':'); } - if (portpos==NULL) { + if (portpos == NULL) { free(in); return NULL; // invalid protocol or missing port } result_t result = RESULT_OK; unsigned int port = parseInt(portpos+1, 10, 1, 65535, result); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { free(in); return NULL; // invalid port } @@ -84,16 +81,14 @@ Device* Device::create(const char* name, const bool checkDevice, const bool read return new SerialDevice(name, checkDevice, readOnly, initialSend); } -void Device::close() -{ +void Device::close() { if (m_fd != -1) { ::close(m_fd); m_fd = -1; } } -bool Device::isValid() -{ +bool Device::isValid() { if (m_fd == -1) { return false; } @@ -103,8 +98,7 @@ bool Device::isValid() return m_fd != -1; } -result_t Device::send(const unsigned char value) -{ +result_t Device::send(const unsigned char value) { if (!isValid()) { return RESULT_ERR_DEVICE; } @@ -117,8 +111,7 @@ result_t Device::send(const unsigned char value) return RESULT_OK; } -result_t Device::recv(const long timeout, unsigned char& value) -{ +result_t Device::recv(const long timeout, unsigned char& value) { if (!isValid()) { return RESULT_ERR_DEVICE; } @@ -175,8 +168,7 @@ result_t Device::recv(const long timeout, unsigned char& value) } -result_t SerialDevice::open() -{ +result_t SerialDevice::open() { if (m_fd != -1) { close(); } @@ -228,8 +220,7 @@ result_t SerialDevice::open() return RESULT_OK; } -void SerialDevice::close() -{ +void SerialDevice::close() { if (m_fd != -1) { // empty device buffer tcflush(m_fd, TCIOFLUSH); @@ -240,8 +231,7 @@ void SerialDevice::close() Device::close(); } -void SerialDevice::checkDevice() -{ +void SerialDevice::checkDevice() { int port; if (ioctl(m_fd, TIOCMGET, &port) == -1) { close(); @@ -249,8 +239,7 @@ void SerialDevice::checkDevice() } -result_t NetworkDevice::open() -{ +result_t NetworkDevice::open() { if (m_fd != -1) { close(); } @@ -269,7 +258,7 @@ result_t NetworkDevice::open() value = 1; setsockopt(m_fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&value, sizeof(value)); } - if (ret==0) { + if (ret == 0) { ret = connect(m_fd, (struct sockaddr*)&m_address, sizeof(m_address)); } if (ret < 0) { @@ -282,7 +271,7 @@ result_t NetworkDevice::open() unsigned char buf[256]; while (::read(m_fd, &buf, 256) > 0); } - if (m_bufSize==0) { + if (m_bufSize == 0) { m_bufSize = MAX_LEN+1; m_buffer = (unsigned char*)malloc(m_bufSize); if (!m_buffer) { @@ -296,8 +285,7 @@ result_t NetworkDevice::open() return RESULT_OK; } -void NetworkDevice::checkDevice() -{ +void NetworkDevice::checkDevice() { unsigned char value; ssize_t c = ::recv(m_fd, &value, 1, MSG_PEEK | MSG_DONTWAIT); if (c == 0 || (c < 0 && errno != EAGAIN)) { @@ -306,28 +294,25 @@ void NetworkDevice::checkDevice() } } -bool NetworkDevice::available() -{ - return m_buffer && m_bufLen>0; +bool NetworkDevice::available() { + return m_buffer && m_bufLen > 0; } -ssize_t NetworkDevice::write(const unsigned char value) -{ +ssize_t NetworkDevice::write(const unsigned char value) { m_bufLen = 0; // flush read buffer return Device::write(value); } -ssize_t NetworkDevice::read(unsigned char& value) -{ +ssize_t NetworkDevice::read(unsigned char& value) { if (available()) { value = m_buffer[m_bufPos]; m_bufPos = (unsigned char)((m_bufPos+1)%m_bufSize); m_bufLen--; return 1; } - if (m_bufSize>0) { + if (m_bufSize > 0) { ssize_t size = ::read(m_fd, m_buffer, m_bufSize); - if (size<=0) { + if (size <= 0) { return size; } value = m_buffer[0]; diff --git a/src/lib/ebus/device.h b/src/lib/ebus/device.h index 6a033d5b..d13c94b1 100644 --- a/src/lib/ebus/device.h +++ b/src/lib/ebus/device.h @@ -16,15 +16,15 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_DEVICE_H_ -#define LIBEBUS_DEVICE_H_ +#ifndef LIB_EBUS_DEVICE_H_ +#define LIB_EBUS_DEVICE_H_ #include #include -#include -#include #include #include +#include +#include #include "result.h" /** @file device.h @@ -92,7 +92,7 @@ public: * @return the new @a Device, or NULL on error. * Note: the caller needs to free the created instance. */ - static Device* create(const char* name, const bool checkDevice=true, const bool readOnly=false, const bool initialSend=false); + static Device* create(const char* name, const bool checkDevice = true, const bool readOnly = false, const bool initialSend = false); /** * Get the transfer latency of this device. @@ -290,4 +290,4 @@ private: }; -#endif // LIBEBUS_DEVICE_H_ +#endif // LIB_EBUS_DEVICE_H_ diff --git a/src/lib/ebus/filereader.h b/src/lib/ebus/filereader.h index 23f6b818..393b067e 100644 --- a/src/lib/ebus/filereader.h +++ b/src/lib/ebus/filereader.h @@ -16,11 +16,9 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_FILEREADER_H_ -#define LIBEBUS_FILEREADER_H_ +#ifndef LIB_EBUS_FILEREADER_H_ +#define LIB_EBUS_FILEREADER_H_ -#include "symbol.h" -#include "result.h" #include #include #include @@ -28,6 +26,8 @@ #include #include #include +#include "symbol.h" +#include "result.h" /** @file filereader.h * Helper class and constants for reading configuration files. @@ -84,7 +84,7 @@ public: * @param defaultSuffix the default circuit name suffix (starting with a ".", may be overwritten by file name, or empty. * @return @a RESULT_OK on success, or an error code. */ - virtual result_t readFromFile(const string filename, bool verbose=false, + virtual result_t readFromFile(const string filename, bool verbose = false, string defaultDest = "", string defaultCircuit = "", string defaultSuffix = "") { ifstream ifs; @@ -94,7 +94,7 @@ public: return RESULT_ERR_NOTFOUND; } size_t lastSep = filename.find_last_of('/'); - if (lastSep!=string::npos) { // potential destination address, matches "^ZZ." + if (lastSep != string::npos) { // potential destination address, matches "^ZZ." // extract defaultDest, defaultCircuit, defaultSuffix from filename: // ZZ.IDENT[.CIRCUIT][.SUFFIX].*csv unsigned char checkDest; @@ -114,9 +114,9 @@ public: vector row; vector< vector > defaults; while (splitFields(ifs, row, lineNo)) { - if (row.empty()) + if (row.empty()) { continue; - + } result_t result; vector::iterator it = row.begin(); const vector::iterator end = row.end(); @@ -124,31 +124,33 @@ public: if (row[0][0] == '*') { row[0] = row[0].substr(1); result = addDefaultFromFile(defaults, row, it, defaultDest, defaultCircuit, defaultSuffix, filename, lineNo); - if (result == RESULT_OK) + if (result == RESULT_OK) { continue; - } else + } + } else { result = addFromFile(it, end, &defaults, defaultDest, defaultCircuit, defaultSuffix, filename, lineNo); - } - else + } + } else { result = addFromFile(it, end, NULL, defaultDest, defaultCircuit, defaultSuffix, filename, lineNo); - + } if (result != RESULT_OK) { if (!verbose) { ifs.close(); ostringstream error; error << filename << ":" << static_cast(lineNo); - if (m_lastError.length()>0) { + if (m_lastError.length() > 0) { error << ": " << m_lastError; } m_lastError = error.str(); return result; } - if (m_lastError.length()>0) { + if (m_lastError.length() > 0) { cout << m_lastError << endl; } printErrorPos(cout, row.begin(), end, it, filename, lineNo, result); - } else if (!verbose) + } else if (!verbose) { m_lastError = ""; + } } ifs.close(); @@ -205,11 +207,11 @@ public: static void trim(string& str) { size_t pos = str.find_first_not_of(" \t"); - if (pos!=string::npos) { + if (pos != string::npos) { str.erase(0, pos); } pos = str.find_last_not_of(" \t"); - if (pos!=string::npos) { + if (pos != string::npos) { str.erase(pos+1); } } @@ -244,9 +246,9 @@ public: trim(line); size_t length = line.length(); - if (!quotedText && (length == 0 || line[0] == '#' || (line.length() > 1 && line[0] == '/' && line[1] == '/'))) + if (!quotedText && (length == 0 || line[0] == '#' || (line.length() > 1 && line[0] == '/' && line[1] == '/'))) { continue; // skip empty lines and comments - + } for (size_t pos = 0; pos < length; pos++) { char ch = line[pos]; switch (ch) @@ -278,10 +280,10 @@ public: case '\r': break; default: - if (prev==TEXT_SEPARATOR && !quotedText && wasQuoted) { + if (prev == TEXT_SEPARATOR && !quotedText && wasQuoted) { field << TEXT_SEPARATOR; // single dquote in the middle of formerly quoted text quotedText = true; - } else if (quotedText && pos==0 && field.tellp()>0 && *(field.str().end()-1)!=VALUE_SEPARATOR) { + } else if (quotedText && pos == 0 && field.tellp() > 0 && *(field.str().end()-1) != VALUE_SEPARATOR) { field << VALUE_SEPARATOR; } field << ch; @@ -289,8 +291,9 @@ public: } prev = ch; } - if (!quotedText) + if (!quotedText) { break; + } } string str = field.str(); trim(str); @@ -318,51 +321,51 @@ public: { ident = circuit = suffix = ""; software = hardware = UINT_MAX; - if (name.length()>4 && name.substr(name.length()-4)==".csv") { + if (name.length() > 4 && name.substr(name.length()-4) == ".csv") { name = name.substr(0, name.length()-3); // including trailing "." } size_t pos = name.find('.'); - if (pos!=2) { + if (pos != 2) { return false; // missing "ZZ." } result_t result = RESULT_OK; dest = (unsigned char)parseInt(name.substr(0, pos).c_str(), 16, 0, 0xff, result, NULL); - if (result!=RESULT_OK || !isValidAddress(dest)) { + if (result != RESULT_OK || !isValidAddress(dest)) { return false; // invalid "ZZ" } name.erase(0, pos); - if (name.length()>1) { + if (name.length() > 1) { pos = name.rfind(".SW"); // check for ".SWxxxx." - if (pos!=string::npos && name.find(".", pos+1)==pos+7) { + if (pos != string::npos && name.find(".", pos+1) == pos+7) { software = parseInt(name.substr(pos+3, 4).c_str(), 10, 0, 9999, result, NULL); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return false; // invalid "SWxxxx" } name.erase(pos, 7); } } - if (name.length()>1) { + if (name.length() > 1) { pos = name.rfind(".HW"); // check for ".HWxxxx." - if (pos!=string::npos && name.find(".", pos+1)==pos+7) { + if (pos != string::npos && name.find(".", pos+1) == pos+7) { hardware = parseInt(name.substr(pos+3, 4).c_str(), 10, 0, 9999, result, NULL); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return false; // invalid "HWxxxx" } name.erase(pos, 7); } } - if (name.length()>1) { + if (name.length() > 1) { pos = name.find('.', 1); // check for ".IDENT." - if (pos!=string::npos && pos>=1 && pos<=6) { // up to 5 chars between two "."s, immediately after "ZZ.", or ".." + if (pos != string::npos && pos >= 1 && pos <= 6) { // up to 5 chars between two "."s, immediately after "ZZ.", or ".." ident = circuit = name.substr(1, pos-1); name.erase(0, pos); pos = name.find('.', 1); // check for ".CIRCUIT." - if (pos!=string::npos && (pos>2 || name[1]<'0' || name[1]>'9')) { + if (pos != string::npos && (pos>2 || name[1]<'0' || name[1]>'9')) { circuit = name.substr(1, pos-1); name.erase(0, pos); pos = name.find('.', 1); // check for ".SUFFIX." } - if (pos!=string::npos && pos==2 && name[1]>='0' && name[1]<='9') { + if (pos != string::npos && pos == 2 && name[1] >= '0' && name[1] <= '9') { suffix = name.substr(0, 2); name.erase(0, pos); } @@ -383,4 +386,4 @@ protected: }; -#endif // LIBEBUS_FILEREADER_H_ +#endif // LIB_EBUS_FILEREADER_H_ diff --git a/src/lib/ebus/message.cpp b/src/lib/ebus/message.cpp index 2d856c7c..91b766f7 100644 --- a/src/lib/ebus/message.cpp +++ b/src/lib/ebus/message.cpp @@ -17,15 +17,15 @@ */ #include "message.h" -#include "data.h" -#include "result.h" -#include "symbol.h" #include #include #include #include #include #include +#include "data.h" +#include "result.h" +#include "symbol.h" using namespace std; @@ -65,10 +65,9 @@ Message::Message(const string circuit, const string name, m_id(id), m_data(data), m_deleteData(deleteData), m_pollPriority(pollPriority), m_usedByCondition(false), m_isScanMessage(false), m_condition(condition), - m_lastUpdateTime(0), m_lastChangeTime(0), m_pollCount(0), m_lastPollTime(0) -{ + m_lastUpdateTime(0), m_lastChangeTime(0), m_pollCount(0), m_lastPollTime(0) { m_key = createKey(id, isWrite, isPassive, srcAddress, dstAddress); - if (circuit=="scan") { + if (circuit == "scan") { setScanMessage(); m_pollPriority = 0; } @@ -84,8 +83,7 @@ Message::Message(const string circuit, const string name, m_data(data), m_deleteData(true), m_pollPriority(0), m_usedByCondition(false), m_isScanMessage(false), m_condition(NULL), - m_lastUpdateTime(0), m_lastChangeTime(0), m_pollCount(0), m_lastPollTime(0) -{ + m_lastUpdateTime(0), m_lastChangeTime(0), m_pollCount(0), m_lastPollTime(0) { m_id.push_back(pb); m_id.push_back(sb); unsigned long long key = 0; @@ -112,29 +110,27 @@ Message::Message(const string circuit, const string name, * empty and @p replaceStar is @p true. * @return the default if available and value is empty, or the value. */ -string getDefault(const string value, vector* defaults, size_t pos, bool replaceStar=false, bool required=false) -{ +string getDefault(const string value, vector* defaults, size_t pos, bool replaceStar = false, bool required = false) { if (defaults == NULL || pos >= defaults->size()) { return value; } - if (value.length()==0 && replaceStar && required) { + if (value.length() == 0 && replaceStar && required) { return value; } string defaultStr = defaults->at(pos); - if (!replaceStar || defaultStr.length()==0) { - return value.length()>0 ? value : defaultStr; + if (!replaceStar || defaultStr.length() == 0) { + return value.length() > 0 ? value : defaultStr; } string::size_type insertPos = defaultStr.find('*'); - if (insertPos==string::npos) { - return value.length()==0 ? defaultStr : value; + if (insertPos == string::npos) { + return value.length() == 0 ? defaultStr : value; } return defaultStr.substr(0, insertPos)+value+defaultStr.substr(insertPos+1); } unsigned long long Message::createKey(const vector id, const bool isWrite, const bool isPassive, - const unsigned char srcAddress, const unsigned char dstAddress) -{ + const unsigned char srcAddress, const unsigned char dstAddress) { unsigned long long key = (unsigned long long)(id.size()-2) << (8 * 7 + 5); if (isPassive) { key |= (unsigned long long)getMasterNumber(srcAddress) << (8 * 7); // 0..25 @@ -178,14 +174,15 @@ unsigned long long Message::createKey(SymbolString& master, unsigned char maxIdL return key; } -result_t Message::parseId(string input, vector& id) -{ +result_t Message::parseId(string input, vector& id) { istringstream in(input); while (!in.eof()) { - while (in.peek() == ' ') + while (in.peek() == ' ') { in.get(); - if (in.eof()) // no more digits + } + if (in.eof()) { // no more digits break; + } input.clear(); input.push_back((char)in.get()); if (in.eof()) { @@ -205,21 +202,21 @@ result_t Message::parseId(string input, vector& id) result_t Message::create(vector::iterator& it, const vector::iterator end, vector< vector >* defaultsRows, Condition* condition, const string& filename, - DataFieldTemplates* templates, vector& messages) -{ + DataFieldTemplates* templates, vector& messages) { // [type],[circuit],name,[comment],[QQ[;QQ]*],[ZZ],[PBSB],[ID],fields... result_t result; bool isWrite = false, isPassive = false; string defaultName; unsigned char pollPriority = 0; size_t defaultPos = 1; - if (it == end) + if (it == end) { return RESULT_ERR_EOF; - + } string typeStr = *it++; const char* str = typeStr.c_str(); // [type] - if (it == end) + if (it == end) { return RESULT_ERR_EOF; + } size_t len = strlen(str); if (len == 0) { // default: active read defaultName = "r"; @@ -232,11 +229,9 @@ result_t Message::create(vector::iterator& it, const vector::ite pollPriority = (unsigned char)(poll - '0'); defaultName.erase(1, 1); // cut off priority digit } - } - else if (type == 'w' || type == 'W') { // active write + } else if (type == 'w' || type == 'W') { // active write isWrite = true; - } - else { // any other: passive read/write + } else { // any other: passive read/write isPassive = true; type = str[1]; isWrite = type == 'w' || type == 'W'; // if type continues with "w" it is treated as passive write @@ -255,36 +250,41 @@ result_t Message::create(vector::iterator& it, const vector::ite } string circuit = getDefault(*it++, defaults, defaultPos++, true); // [circuit] - if (it == end) + if (it == end) { return RESULT_ERR_EOF; - + } string name = getDefault(*it++, defaults, defaultPos++, true, true); // name - if (it == end) + if (it == end) { return RESULT_ERR_EOF; - if (name.length() == 0) + } + if (name.length() == 0) { return RESULT_ERR_INVALID_ARG; // empty name - + } string comment = getDefault(*it++, defaults, defaultPos++, true); // [comment] - if (it == end) + if (it == end) { return RESULT_ERR_EOF; - + } str = getDefault(*it++, defaults, defaultPos++).c_str(); // [QQ[;QQ]*] - if (it == end) + if (it == end) { return RESULT_ERR_EOF; + } unsigned char srcAddress; - if (*str == 0) + if (*str == 0) { srcAddress = SYN; // no specific source - else { + } else { srcAddress = (unsigned char)parseInt(str, 16, 0, 0xff, result); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; - if (!isMaster(srcAddress)) + } + if (!isMaster(srcAddress)) { return RESULT_ERR_INVALID_ADDR; + } } str = getDefault(*it++, defaults, defaultPos++).c_str(); // [ZZ] - if (it == end) + if (it == end) { return RESULT_ERR_EOF; + } vector dstAddresses; bool isBroadcastOrMasterDestination = false; if (*str == 0) { @@ -296,16 +296,19 @@ result_t Message::create(vector::iterator& it, const vector::ite while (getline(stream, token, VALUE_SEPARATOR)) { FileReader::trim(token); unsigned char dstAddress = (unsigned char)parseInt(token.c_str(), 16, 0, 0xff, result); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; - if (!isValidAddress(dstAddress)) + } + if (!isValidAddress(dstAddress)) { return RESULT_ERR_INVALID_ADDR; + } bool broadcastOrMaster = (dstAddress == BROADCAST) || isMaster(dstAddress); if (first) { isBroadcastOrMasterDestination = broadcastOrMaster; first = false; - } else if (isBroadcastOrMasterDestination != broadcastOrMaster) + } else if (isBroadcastOrMasterDestination != broadcastOrMaster) { return RESULT_ERR_INVALID_ADDR; + } dstAddresses.push_back(dstAddress); } } @@ -313,22 +316,26 @@ result_t Message::create(vector::iterator& it, const vector::ite vector id; string token = *it++; // [PBSB] bool useDefaults = token.empty(); - if (useDefaults) + if (useDefaults) { token = getDefault(token, defaults, defaultPos); + } defaultPos++; result = parseId(token, id); - if (result!=RESULT_OK) + if (result != RESULT_OK) { return result; - if (id.size() != 2) + } + if (id.size() != 2) { return RESULT_ERR_INVALID_ARG; // missing/to short/to long PBSB - - if (it == end) + } + if (it == end) { token = ""; - else + } else { token = *it++;// [ID] (optional master data) + } string defaultIdPrefix; - if (useDefaults) + if (useDefaults) { defaultIdPrefix = getDefault("", defaults, defaultPos); + } defaultPos++; vector< vector > chainIds; vector chainLengths; @@ -341,59 +348,66 @@ result_t Message::create(vector::iterator& it, const vector::ite FileReader::trim(token); token = defaultIdPrefix+token; size_t lengthPos = token.find(LENGTH_SEPARATOR); - lastChainLengthSpecified = lengthPos!=string::npos; + lastChainLengthSpecified = lengthPos != string::npos; if (lastChainLengthSpecified) { chainLength = parseInt(token.substr(lengthPos+1).c_str(), 10, 0, MAX_POS, result); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } token.resize(lengthPos); } vector chainId = id; result = parseId(token, chainId); - if (result!=RESULT_OK) + if (result != RESULT_OK) { return result; - if (!chainIds.empty() && chainId.size()!=chainIds.front().size()) + } + if (!chainIds.empty() && chainId.size() != chainIds.front().size()) { return RESULT_ERR_INVALID_LIST; + } chainIds.push_back(chainId); chainLengths.push_back((unsigned char)chainLength); if (first) { chainPrefixLength = chainId.size(); maxLength = 0; - } else if (chainPrefixLength>2) { + } else if (chainPrefixLength > 2) { vector& front = chainIds.front(); - for (size_t pos=2; pos255) + if (maxLength+chainLength > 255) { return RESULT_ERR_INVALID_POS; + } maxLength += chainLength; first = false; } id = chainIds.front(); - if (chainIds.size()>1) { - if (isPassive) + if (chainIds.size() > 1) { + if (isPassive) { return RESULT_ERR_INVALID_LIST; - if (id.size()>chainPrefixLength) + } + if (id.size() > chainPrefixLength) { id.resize(chainPrefixLength); - if (!lastChainLengthSpecified && chainLength::iterator realEnd = end; vector newTypes; - if (defaults!=NULL && defaults->size() > defaultPos + 2) { // need at least "[name];[part];type" (optional: "[divisor|values][;[unit][;[comment]]]]") + if (defaults != NULL && defaults->size() > defaultPos + 2) { // need at least "[name];[part];type" (optional: "[divisor|values][;[unit][;[comment]]]]") while (defaults->size() > defaultPos + 2 && defaults->at(defaultPos + 2).size() > 0) { for (size_t i = 0; i < 6; i++) { - if (defaults->size() > defaultPos) + if (defaults->size() > defaultPos) { newTypes.push_back(defaults->at(defaultPos)); - else + } else { newTypes.push_back(""); - + } defaultPos++; } } @@ -406,7 +420,7 @@ result_t Message::create(vector::iterator& it, const vector::ite } } DataField* data = NULL; - if (it==realEnd) { + if (it == realEnd) { vector fields; data = new DataFieldSet("", "", fields); } else { @@ -421,7 +435,7 @@ result_t Message::create(vector::iterator& it, const vector::ite return RESULT_ERR_INVALID_POS; } unsigned int index = 0; - bool multiple = dstAddresses.size()>1; + bool multiple = dstAddresses.size() > 1; char num[10]; for (vector::iterator it = dstAddresses.begin(); it != dstAddresses.end(); it++, index++) { unsigned char dstAddress = *it; @@ -431,26 +445,24 @@ result_t Message::create(vector::iterator& it, const vector::ite useCircuit = useCircuit + num; } Message* message; - if (chainIds.size()>1) { - message = new ChainedMessage(useCircuit, name, isWrite, comment, srcAddress, dstAddress, id, chainIds, chainLengths, data, index==0, pollPriority, condition); + if (chainIds.size() > 1) { + message = new ChainedMessage(useCircuit, name, isWrite, comment, srcAddress, dstAddress, id, chainIds, chainLengths, data, index == 0, pollPriority, condition); } else { - message = new Message(useCircuit, name, isWrite, isPassive, comment, srcAddress, dstAddress, id, data, index==0, pollPriority, condition); + message = new Message(useCircuit, name, isWrite, isPassive, comment, srcAddress, dstAddress, id, data, index == 0, pollPriority, condition); } messages.push_back(message); } return RESULT_OK; } -Message* Message::createScanMessage() -{ +Message* Message::createScanMessage() { return new Message("scan", "", false, false, 0x07, 0x04, DataFieldSet::getIdentFields(), true); } -Message* Message::derive(const unsigned char dstAddress, const unsigned char srcAddress, const string circuit) -{ - Message* result = new Message(circuit.length()==0 ? m_circuit : circuit, m_name, +Message* Message::derive(const unsigned char dstAddress, const unsigned char srcAddress, const string circuit) { + Message* result = new Message(circuit.length() == 0 ? m_circuit : circuit, m_name, m_isWrite, m_isPassive, m_comment, - srcAddress==SYN ? m_srcAddress : srcAddress, dstAddress, + srcAddress == SYN ? m_srcAddress : srcAddress, dstAddress, m_id, m_data, false, m_pollPriority, m_condition); if (m_isScanMessage) { @@ -459,8 +471,7 @@ Message* Message::derive(const unsigned char dstAddress, const unsigned char src return result; } -Message* Message::derive(const unsigned char dstAddress, const bool extendCircuit) -{ +Message* Message::derive(const unsigned char dstAddress, const bool extendCircuit) { if (extendCircuit) { ostringstream out; out << m_circuit << '.' << hex << setw(2) << setfill('0') << static_cast(dstAddress); @@ -469,8 +480,7 @@ Message* Message::derive(const unsigned char dstAddress, const bool extendCircui return derive(dstAddress, SYN, m_circuit); } -bool Message::checkIdPrefix(vector& id) -{ +bool Message::checkIdPrefix(vector& id) { if (id.size() > m_id.size()) { return false; } @@ -482,15 +492,15 @@ bool Message::checkIdPrefix(vector& id) return true; } -bool Message::checkId(SymbolString& master, unsigned char* index) -{ +bool Message::checkId(SymbolString& master, unsigned char* index) { unsigned char idLen = getIdLength(); if (master.size() < 5+idLen) { // QQ, ZZ, PB, SB, NN return false; } for (unsigned char pos = 0; pos < idLen; pos++) { - if (m_id[2+pos] != master[5+pos]) + if (m_id[2+pos] != master[5+pos]) { return false; + } } if (index) { *index = 0; @@ -498,8 +508,7 @@ bool Message::checkId(SymbolString& master, unsigned char* index) return true; } -bool Message::checkId(Message& other) -{ +bool Message::checkId(Message& other) { unsigned char idLen = getIdLength(); if (idLen != other.getIdLength() || getCount() > 1) { // only equal for non-chained messages return false; @@ -507,111 +516,119 @@ bool Message::checkId(Message& other) return other.checkIdPrefix(m_id); } -unsigned long long Message::getDerivedKey(const unsigned char dstAddress) -{ +unsigned long long Message::getDerivedKey(const unsigned char dstAddress) { return (m_key & ~(0xffLL << (8*6))) | (unsigned long long)dstAddress << (8*6); } -bool Message::setPollPriority(unsigned char priority) -{ - if (priority == m_pollPriority || m_isPassive || isScanMessage() || m_dstAddress==SYN) +bool Message::setPollPriority(unsigned char priority) { + if (priority == m_pollPriority || m_isPassive || isScanMessage() || m_dstAddress == SYN) { return false; - - if (m_usedByCondition && (priority==0 || priority>POLL_PRIORITY_CONDITION)) + } + if (m_usedByCondition && (priority == 0 || priority > POLL_PRIORITY_CONDITION)) { priority = POLL_PRIORITY_CONDITION; - - bool ret = m_pollPriority==0 && priority>0; + } + bool ret = m_pollPriority == 0 && priority > 0; m_pollPriority = priority; return ret; } void Message::setUsedByCondition() { - if (m_usedByCondition) + if (m_usedByCondition) { return; + } m_usedByCondition = true; - if (m_pollPriority==0 || m_pollPriority>POLL_PRIORITY_CONDITION) + if (m_pollPriority == 0 || m_pollPriority > POLL_PRIORITY_CONDITION) { setPollPriority(POLL_PRIORITY_CONDITION); + } } -bool Message::isAvailable() -{ - return (m_condition==NULL) || m_condition->isTrue(); +bool Message::isAvailable() { + return (m_condition == NULL) || m_condition->isTrue(); } -bool Message::hasField(const char* fieldName, bool numeric) -{ +bool Message::hasField(const char* fieldName, bool numeric) { return m_data->hasField(fieldName, numeric); } result_t Message::prepareMaster(const unsigned char srcAddress, SymbolString& masterData, istringstream& input, char separator, - const unsigned char dstAddress, unsigned char index) -{ - if (m_isPassive) + 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) + if (result != RESULT_OK) { return result; - if (dstAddress == SYN) { - if (m_dstAddress == SYN) - return RESULT_ERR_INVALID_ADDR; - result = master.push_back(m_dstAddress, false, false); } - else + if (dstAddress == SYN) { + if (m_dstAddress == SYN) { + return RESULT_ERR_INVALID_ADDR; + } + 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; + } result = master.push_back(m_id[0], false, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } result = master.push_back(m_id[1], false, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } result = prepareMasterPart(master, input, separator, index); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } masterData.clear(); masterData.addAll(master); result = storeLastData(pt_masterData, masterData, index); - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; + } return RESULT_OK; } -result_t Message::prepareMasterPart(SymbolString& master, istringstream& input, char separator, unsigned char index) -{ - if (index!=0) +result_t Message::prepareMasterPart(SymbolString& master, istringstream& input, char separator, unsigned char index) { + if (index != 0) { 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) + if (result != RESULT_OK) { return result; + } for (size_t i = 2; i < m_id.size(); i++) { result = master.push_back(m_id[i], false, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } } result = m_data->write(input, pt_masterData, master, getIdLength(), separator); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } master[pos] = (unsigned char)(master.size()-pos-1); return result; } -result_t Message::prepareSlave(istringstream& input, SymbolString& slaveData) -{ - if (m_isWrite) +result_t Message::prepareSlave(istringstream& input, SymbolString& slaveData) { + 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) + if (result != RESULT_OK) { return result; + } result = m_data->write(input, pt_slaveData, slave, 0); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } slave[0] = (unsigned char)(slave.size()-1); time(&m_lastUpdateTime); if (slave != m_lastSlaveData) { @@ -623,17 +640,15 @@ result_t Message::prepareSlave(istringstream& input, SymbolString& slaveData) return result; } -result_t Message::storeLastData(SymbolString& master, SymbolString& slave) -{ +result_t Message::storeLastData(SymbolString& master, SymbolString& slave) { result_t result = storeLastData(pt_masterData, master, 0); - if (result>=RESULT_OK) { + if (result >= RESULT_OK) { result = storeLastData(pt_slaveData, slave, 0); } return result; } -result_t Message::storeLastData(const PartType partType, SymbolString& data, unsigned char index) -{ +result_t Message::storeLastData(const PartType partType, SymbolString& data, unsigned char index) { if (data.size() > 0 && (m_isWrite || this->m_dstAddress == BROADCAST || partType == pt_slaveData)) { time(&m_lastUpdateTime); @@ -659,79 +674,88 @@ result_t Message::storeLastData(const PartType partType, SymbolString& data, uns result_t Message::decodeLastData(const PartType partType, ostringstream& output, OutputFormat outputFormat, - bool leadingSeparator, const char* fieldName, signed char fieldIndex) -{ + bool leadingSeparator, const char* fieldName, signed char fieldIndex) { unsigned char offset; - if (partType == pt_masterData) + if (partType == pt_masterData) { offset = (unsigned char)(m_id.size() - 2); - else + } else { offset = 0; - result_t result = m_data->read(partType, partType==pt_masterData ? m_lastMasterData : m_lastSlaveData, offset, output, outputFormat, -1, leadingSeparator, fieldName, fieldIndex); - if (result < RESULT_OK) + } + result_t result = m_data->read(partType, partType == pt_masterData ? m_lastMasterData : m_lastSlaveData, offset, output, outputFormat, -1, leadingSeparator, fieldName, fieldIndex); + if (result < RESULT_OK) { return result; - if (result == RESULT_EMPTY && fieldName != NULL) + } + if (result == RESULT_EMPTY && fieldName != NULL) { return RESULT_ERR_NOTFOUND; + } return result; } result_t Message::decodeLastData(ostringstream& output, OutputFormat outputFormat, - bool leadingSeparator, const char* fieldName, signed char fieldIndex) -{ + bool leadingSeparator, const char* fieldName, signed char fieldIndex) { size_t startPos = output.str().length(); result_t result = m_data->read(pt_masterData, m_lastMasterData, getIdLength(), output, outputFormat, -1, leadingSeparator, fieldName, fieldIndex); - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; + } bool empty = result == RESULT_EMPTY; leadingSeparator |= output.str().length() > startPos; result = m_data->read(pt_slaveData, m_lastSlaveData, 0, output, outputFormat, -1, leadingSeparator, fieldName, fieldIndex); - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; - if (result == RESULT_EMPTY && !empty) + } + if (result == RESULT_EMPTY && !empty) { result = RESULT_OK; // OK if at least one part was non-empty - else if (result == RESULT_EMPTY && fieldName != NULL) + } else if (result == RESULT_EMPTY && fieldName != NULL) { return RESULT_ERR_NOTFOUND; + } return result; } -result_t Message::decodeLastDataNumField(unsigned int& output, const char* fieldName, signed char fieldIndex) -{ +result_t Message::decodeLastDataNumField(unsigned int& output, const char* fieldName, signed char fieldIndex) { result_t result = m_data->read(pt_masterData, m_lastMasterData, getIdLength(), output, fieldName, fieldIndex); - if (result < RESULT_OK) + if (result < RESULT_OK) { return result; - if (result == RESULT_EMPTY) + } + if (result == RESULT_EMPTY) { result = m_data->read(pt_slaveData, m_lastSlaveData, 0, output, fieldName, fieldIndex); - if (result < RESULT_OK) + } + if (result < RESULT_OK) { return result; - if (result == RESULT_EMPTY) + } + if (result == RESULT_EMPTY) { return RESULT_ERR_NOTFOUND; + } return result; } -bool Message::isLessPollWeight(const Message* other) -{ +bool Message::isLessPollWeight(const Message* other) { unsigned char tprio = m_pollPriority; unsigned char oprio = other->m_pollPriority; unsigned int tw = tprio * m_pollCount; unsigned int ow = oprio * other->m_pollCount; - if (tw > ow) + if (tw > ow) { return true; - if (tw < ow) + } + if (tw < ow) { return false; - if (tprio > oprio) + } + if (tprio > oprio) { return true; - if (tprio < oprio) + } + if (tprio < oprio) { return false; - if (m_lastPollTime > other->m_lastPollTime) + } + if (m_lastPollTime > other->m_lastPollTime) { return true; - + } return false; } -void Message::dump(ostream& output, vector* columns, bool withConditions) -{ - bool first = true, all = columns==NULL; +void Message::dump(ostream& output, vector* columns, bool withConditions) { + bool first = true, all = columns == NULL; size_t end = all ? 9 : columns->size(); - for (size_t i=0; i* columns, bool withConditions } } -void Message::dumpColumn(ostream& output, size_t column, bool withConditions) -{ +void Message::dumpColumn(ostream& output, size_t column, bool withConditions) { switch (column) { case COLUMN_TYPE: // type - if (withConditions && m_condition!=NULL) { + if (withConditions && m_condition != NULL) { m_condition->dump(output); } if (m_isPassive) { output << "u"; - if (m_isWrite) + if (m_isWrite) { output << "w"; - } else if (m_isWrite) + } + } else if (m_isWrite) { output << "w"; - else { + } else { output << "r"; - if (m_pollPriority>0) + if (m_pollPriority > 0) { output << static_cast(m_pollPriority); + } } break; case COLUMN_CIRCUIT: // circuit @@ -771,12 +796,14 @@ void Message::dumpColumn(ostream& output, size_t column, bool withConditions) DataField::dumpString(output, m_comment, false); break; case COLUMN_QQ: // QQ - if (m_srcAddress != SYN) + if (m_srcAddress != SYN) { output << hex << setw(2) << setfill('0') << static_cast(m_srcAddress); + } break; case COLUMN_ZZ: // ZZ - if (m_dstAddress != SYN) + if (m_dstAddress != SYN) { output << hex << setw(2) << setfill('0') << static_cast(m_dstAddress); + } break; case COLUMN_PBSB: // PBSB for (vector::const_iterator it = m_id.begin(); it < m_id.begin()+2 && it < m_id.end(); it++) { @@ -814,15 +841,14 @@ ChainedMessage::ChainedMessage(const string circuit, const string name, m_lastSlaveDatas = (SymbolString**)calloc(cnt, sizeof(SymbolString*)); m_lastMasterUpdateTimes = (time_t*)calloc(cnt, sizeof(time_t)); m_lastSlaveUpdateTimes = (time_t*)calloc(cnt, sizeof(time_t)); - for (size_t index=0; index id = m_ids[checkIndex]; bool found = false; - for (unsigned char pos=chainPrefixLength; pos > otherIds = ((ChainedMessage&)other).m_ids; unsigned char chainPrefixLength = Message::getIdLength(); - for (unsigned char checkIndex=0; checkIndex id = m_ids[checkIndex]; - for (unsigned char otherIndex=0; otherIndex otherId = otherIds[otherIndex]; bool found = false; - for (unsigned char pos=chainPrefixLength; pos=cnt) + if (index >= cnt) { return RESULT_ERR_NOTFOUND; - + } SymbolString allData(false); result_t result = m_data->write(input, pt_masterData, allData, 0, separator); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } size_t pos = 0, addData = 0; if (m_isWrite) { addData = m_lengths[0]; - for (size_t i=0; iallData.size()) { + if (pos+addData > allData.size()) { 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) + if (result != RESULT_OK) { return result; + } for (size_t i = 2; i < id.size(); i++) { result = master.push_back(id[i], false, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { return result; + } } - for (size_t i=0; i=RESULT_OK) { + if (result >= RESULT_OK) { result = storeLastData(pt_slaveData, slave, index); } return result; @@ -968,9 +992,8 @@ result_t ChainedMessage::storeLastData(SymbolString& master, SymbolString& slave return RESULT_ERR_INVALID_ARG; } -result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& data, unsigned char index) -{ - if (index>=m_ids.size()) { +result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& data, unsigned char index) { + if (index >= m_ids.size()) { return RESULT_ERR_INVALID_ARG; } if (partType == pt_masterData) { @@ -990,25 +1013,25 @@ result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& da time(&m_lastSlaveUpdateTimes[index]); } // check arrival time of all parts - time_t minTime=0, maxTime=0; - for (index=0; indexmaxTime) { + if (m_lastMasterUpdateTimes[index] > maxTime) { maxTime = m_lastMasterUpdateTimes[index]; } } - if (m_lastSlaveUpdateTimes[index]maxTime) { + if (m_lastSlaveUpdateTimes[index] > maxTime) { maxTime = m_lastSlaveUpdateTimes[index]; } - if (minTime==0 || maxTime==0 || maxTime-minTime>m_maxTimeDiff) { + if (minTime == 0 || maxTime == 0 || maxTime-minTime > m_maxTimeDiff) { return RESULT_CONTINUE; } } @@ -1016,39 +1039,38 @@ result_t ChainedMessage::storeLastData(const PartType partType, SymbolString& da SymbolString master(false); SymbolString slave(false); size_t offset = 5+(m_ids[0].size()-2); // skip QQ, ZZ, PB, SB, NN - for (index=0; index255 || slave.size()-1>255) { + if (master.size()-5 > 255 || slave.size()-1 > 255) { return RESULT_ERR_INVALID_POS; } master[4] = (unsigned char)(master.size()-5); slave[0] = (unsigned char)(slave.size()-1); result_t result = Message::storeLastData(pt_masterData, master, 0); - if (result==RESULT_OK) { + if (result == RESULT_OK) { result = Message::storeLastData(pt_slaveData, slave, 0); } return result; } -void ChainedMessage::dumpColumn(ostream& output, size_t column, bool withConditions) -{ - if (column!=COLUMN_ID) { +void ChainedMessage::dumpColumn(ostream& output, size_t column, bool withConditions) { + if (column != COLUMN_ID) { Message::dumpColumn(output, column, withConditions); return; } bool first = true; - for (size_t index = 0; index id = m_ids[index]; for (vector::const_iterator it = id.begin()+2; it < id.end(); it++) { if (first) { @@ -1086,7 +1108,7 @@ Message* getFirstAvailable(vector &messages, SymbolString* sameIdExtAs * @param messages the list of @a Message instances to check. * @param sameIdExtAs the optional @a Message to check for having the same ID. */ -Message* getFirstAvailable(vector &messages, Message* sameIdExtAs=NULL) { +Message* getFirstAvailable(vector &messages, Message* sameIdExtAs = NULL) { for (vector::iterator msgIt = messages.begin(); msgIt != messages.end(); msgIt++) { Message* message = *msgIt; if (sameIdExtAs && !message->checkId(*sameIdExtAs)) { @@ -1104,12 +1126,11 @@ Message* getFirstAvailable(vector &messages, Message* sameIdExtAs=NULL * @param valueList the input string to split. * @param values the output value list to append to. */ -result_t splitValues(string valueList, vector& values) -{ +result_t splitValues(string valueList, vector& values) { istringstream stream(valueList); string str; while (getline(stream, str, VALUE_SEPARATOR)) { - if (str.length()>0 && str[0]=='\'' && str[str.length()-1]=='\'') { + if (str.length() > 0 && str[0] == '\'' && str[str.length()-1] == '\'') { str = str.substr(1, str.length()-2); } values.push_back(str); @@ -1122,27 +1143,26 @@ result_t splitValues(string valueList, vector& values) * @param valueList the input string to split. * @param valueRanges the output list of value ranges to append to (pairs of inclusive from-to values). */ -result_t splitValues(string valueList, vector& valueRanges) -{ +result_t splitValues(string valueList, vector& valueRanges) { istringstream stream(valueList); string str; result_t result; while (getline(stream, str, VALUE_SEPARATOR)) { FileReader::trim(str); - if (str.length()==0) { + if (str.length() == 0) { return RESULT_ERR_INVALID_ARG; } - bool upto = str[0]=='<'; - if (upto || str[0]=='>') { - if (str.length()==1) { + bool upto = str[0] == '<'; + if (upto || str[0] == '>') { + if (str.length() == 1) { return RESULT_ERR_INVALID_ARG; } if (upto) { valueRanges.push_back(0); } - bool inclusive = str[1]=='='; + bool inclusive = str[1] == '='; unsigned int val = parseInt(str.substr(inclusive?2:1).c_str(), 10, inclusive?0:1, inclusive?UINT_MAX:(UINT_MAX-1), result); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } valueRanges.push_back(inclusive ? val : (val+(upto?-1:1))); @@ -1151,9 +1171,9 @@ result_t splitValues(string valueList, vector& valueRanges) } } else { size_t pos = str.find('-'); - if (pos!=string::npos && pos>0) { // range + if (pos != string::npos && pos > 0) { // range unsigned int val = parseInt(str.substr(0, pos).c_str(), 10, 0, UINT_MAX, result); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } valueRanges.push_back(val); @@ -1162,10 +1182,11 @@ result_t splitValues(string valueList, vector& valueRanges) pos = 0; } unsigned int val = parseInt(str.substr(pos).c_str(), 10, 0, UINT_MAX, result); - if (result!=RESULT_OK) + if (result != RESULT_OK) { return result; + } valueRanges.push_back(val); - if (pos==0) { + if (pos == 0) { valueRanges.push_back(val); // single value } } @@ -1173,47 +1194,46 @@ result_t splitValues(string valueList, vector& valueRanges) return RESULT_OK; } -result_t Condition::create(const string condName, vector::iterator& it, const vector::iterator end, string defaultDest, string defaultCircuit, SimpleCondition*& returnValue) -{ +result_t Condition::create(const string condName, vector::iterator& it, const vector::iterator end, string defaultDest, string defaultCircuit, SimpleCondition*& returnValue) { // name,circuit,messagename,[comment],[fieldname],[ZZ],values (name already skipped by caller) - string circuit = it==end ? "" : *(it++); // circuit - string name = it==end ? "" : *(it++); // messagename - if (it0) { + if (zz.length() > 0) { dstAddress = (unsigned char)parseInt(zz.c_str(), 16, 0, 0xff, result); if (result != RESULT_OK) { return result; } - if (dstAddress!=SYN && !isValidAddress(dstAddress, false)) { + if (dstAddress != SYN && !isValidAddress(dstAddress, false)) { return RESULT_ERR_INVALID_ADDR; } } - if (name.length()==0) { + if (name.length() == 0) { if (!isValidAddress(dstAddress, false) || isMaster(dstAddress)) { return RESULT_ERR_INVALID_ADDR; } - } else if (circuit.length()==0) { + } else if (circuit.length() == 0) { circuit = defaultCircuit; } - string valueList = it==end ? "" : *(it++); - if (valueList.length()==0) { + string valueList = it == end ? "" : *(it++); + if (valueList.length() == 0) { returnValue = new SimpleCondition(condName, condName, circuit, name, dstAddress, field); return RESULT_OK; } - if (valueList[0]=='\'') { + if (valueList[0] == '\'') { // strings vector values; result = splitValues(valueList, values); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } returnValue = new SimpleStringCondition(condName, condName, circuit, name, dstAddress, field, values); @@ -1222,28 +1242,27 @@ result_t Condition::create(const string condName, vector::iterator& it, // numbers vector valueRanges; result = splitValues(valueList, valueRanges); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } returnValue = new SimpleNumericCondition(condName, condName, circuit, name, dstAddress, field, valueRanges); return RESULT_OK; } -SimpleCondition* SimpleCondition::derive(string valueList) -{ +SimpleCondition* SimpleCondition::derive(string valueList) { if (valueList.empty()) { return NULL; } string name = m_condName+valueList; - if (valueList[0]=='=') { + if (valueList[0] == '=') { valueList.erase(0, 1); } result_t result; - if (valueList[0]=='\'') { + if (valueList[0] == '\'') { // strings vector values; result = splitValues(valueList, values); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return NULL; } return new SimpleStringCondition(name, m_refName, m_circuit, m_name, m_dstAddress, m_field, values); @@ -1254,14 +1273,13 @@ SimpleCondition* SimpleCondition::derive(string valueList) } vector valueRanges; result = splitValues(valueList, valueRanges); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return NULL; } return new SimpleNumericCondition(name, m_refName, m_circuit, m_name, m_dstAddress, m_field, valueRanges); } -void SimpleCondition::dump(ostream& output, bool matched) -{ +void SimpleCondition::dump(ostream& output, bool matched) { if (matched) { if (!m_isTrue) { return; @@ -1276,17 +1294,15 @@ void SimpleCondition::dump(ostream& output, bool matched) } } -CombinedCondition* SimpleCondition::combineAnd(Condition* other) -{ +CombinedCondition* SimpleCondition::combineAnd(Condition* other) { CombinedCondition* ret = new CombinedCondition(); return ret->combineAnd(this)->combineAnd(other); } -result_t SimpleCondition::resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)) -{ - if (m_message==NULL) { +result_t SimpleCondition::resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)) { + if (m_message == NULL) { Message* message; - if (m_name.length()==0) { + if (m_name.length() == 0) { message = messages->getScanMessage(m_dstAddress); errorMessage << "scan condition " << nouppercase << setw(2) << hex << setfill('0') << static_cast(m_dstAddress); } else { @@ -1300,24 +1316,24 @@ result_t SimpleCondition::resolve(MessageMap* messages, ostringstream& errorMess errorMessage << ": message not found"; return RESULT_ERR_NOTFOUND; } - if (message->getDstAddress()==SYN) { + if (message->getDstAddress() == SYN) { if (message->isPassive()) { errorMessage << ": invalid passive message"; return RESULT_ERR_INVALID_ARG; } - if (m_dstAddress==SYN) { + if (m_dstAddress == SYN) { errorMessage << ": destination address missing"; return RESULT_ERR_INVALID_ADDR; } // clone the message with dedicated dstAddress if necessary unsigned long long key = message->getDerivedKey(m_dstAddress); vector* derived = messages->getByKey(key); - if (derived==NULL) { + if (derived == NULL) { message = message->derive(m_dstAddress, true); messages->add(message); } else { Message* first = getFirstAvailable(*derived, message); - if (first==NULL) { + if (first == NULL) { errorMessage << ": conditional derived message " << message->getCircuit() << "." << message->getName() << " for " << hex << setw(2) << setfill('0') << static_cast(m_dstAddress) << " not found" ; return RESULT_ERR_INVALID_ARG; } @@ -1326,29 +1342,28 @@ result_t SimpleCondition::resolve(MessageMap* messages, ostringstream& errorMess } if (m_hasValues) { - if (!message->hasField(m_field.length()>0 ? m_field.c_str() : NULL, isNumeric())) { + if (!message->hasField(m_field.length() > 0 ? m_field.c_str() : NULL, isNumeric())) { errorMessage << (isNumeric() ? ": numeric field " : ": string field ") << m_field << " not found"; return RESULT_ERR_NOTFOUND; } } m_message = message; message->setUsedByCondition(); - if (m_name.length()>0 && !message->isScanMessage()) { + if (m_name.length() > 0 && !message->isScanMessage()) { messages->addPollMessage(message, true); } } - if (m_message->getLastUpdateTime()==0 && readMessageFunc!=NULL) { + if (m_message->getLastUpdateTime() == 0 && readMessageFunc != NULL) { (*readMessageFunc)(m_message); } return RESULT_OK; } -bool SimpleCondition::isTrue() -{ +bool SimpleCondition::isTrue() { if (!m_message) { return false; } - if (m_message->getLastChangeTime()>m_lastCheckTime) { + if (m_message->getLastChangeTime() > m_lastCheckTime) { bool isTrue = !m_hasValues; // for message seen check if (!isTrue) { isTrue = checkValue(m_message, m_field); @@ -1362,10 +1377,10 @@ bool SimpleCondition::isTrue() bool SimpleNumericCondition::checkValue(Message* message, string field) { unsigned int value = 0; - result_t result = message->decodeLastDataNumField(value, field.length()==0 ? NULL : field.c_str()); - if (result==RESULT_OK) { - for (size_t i=0; i+1decodeLastDataNumField(value, field.length() == 0 ? NULL : field.c_str()); + if (result == RESULT_OK) { + for (size_t i = 0; i+1 < m_valueRanges.size(); i+=2) { + if (m_valueRanges[i] <= value && value <= m_valueRanges[i+1]) { ostringstream out; out << static_cast(value); m_matchedValue = out.str(); @@ -1379,11 +1394,11 @@ bool SimpleNumericCondition::checkValue(Message* message, string field) { bool SimpleStringCondition::checkValue(Message* message, string field) { ostringstream output; - result_t result = message->decodeLastData(output, 0, false, field.length()==0 ? NULL : field.c_str()); - if (result==RESULT_OK) { + result_t result = message->decodeLastData(output, 0, false, field.length() == 0 ? NULL : field.c_str()); + if (result == RESULT_OK) { string value = output.str(); - for (size_t i=0; i::iterator it = m_conditions.begin(); it!=m_conditions.end(); it++) { +void CombinedCondition::dump(ostream& output, bool matched) { + for (vector::iterator it = m_conditions.begin(); it != m_conditions.end(); it++) { Condition* condition = *it; condition->dump(output, matched); } } -result_t CombinedCondition::resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)) -{ - for (vector::iterator it = m_conditions.begin(); it!=m_conditions.end(); it++) { +result_t CombinedCondition::resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)) { + for (vector::iterator it = m_conditions.begin(); it != m_conditions.end(); it++) { Condition* condition = *it; ostringstream dummy; result_t ret = condition->resolve(messages, dummy, readMessageFunc); - if (ret!=RESULT_OK) { + if (ret != RESULT_OK) { errorMessage << dummy.str(); return ret; } @@ -1415,28 +1428,27 @@ result_t CombinedCondition::resolve(MessageMap* messages, ostringstream& errorMe return RESULT_OK; } -bool CombinedCondition::isTrue() -{ - for (vector::iterator it = m_conditions.begin(); it!=m_conditions.end(); it++) { - if (!(*it)->isTrue()) +bool CombinedCondition::isTrue() { + for (vector::iterator it = m_conditions.begin(); it != m_conditions.end(); it++) { + if (!(*it)->isTrue()) { return false; + } } return true; } result_t Instruction::create(const string contextPath, const string& defaultDest, const string& defaultCircuit, const string& defaultSuffix, - Condition* condition, const string type, vector::iterator& it, const vector::iterator end, Instruction*& returnValue) -{ + Condition* condition, const string type, vector::iterator& it, const vector::iterator end, Instruction*& returnValue) { // type[,argument]* (type already skipped by caller) bool singleton = false; - if ((singleton=(type=="load")) || type=="include") { - if (it==end || (*it).empty()) { + if ((singleton=(type == "load")) || type == "include") { + if (it == end || (*it).empty()) { return RESULT_ERR_INVALID_ARG; } size_t pos = contextPath.find_last_of('/'); string path; - if (pos==string::npos) { + if (pos == string::npos) { path = contextPath; } else { path = contextPath.substr(0, pos+1); @@ -1448,21 +1460,24 @@ result_t Instruction::create(const string contextPath, const string& defaultDest return RESULT_ERR_INVALID_ARG; } -string Instruction::getDestination() -{ +string Instruction::getDestination() { // ZZ.circuit[.suffix] string ret; - if (!m_defaultDest.empty()) + if (!m_defaultDest.empty()) { ret = m_defaultDest; + } if (!m_defaultCircuit.empty() || !m_defaultSuffix.empty()) { - if (!ret.empty()) + if (!ret.empty()) { ret += "."; - if (m_defaultCircuit.empty()) + } + if (m_defaultCircuit.empty()) { ret += "*"; - else + } else { ret += m_defaultCircuit; - if (!m_defaultSuffix.empty()) + } + if (!m_defaultSuffix.empty()) { ret += m_defaultSuffix; + } } return ret; } @@ -1470,10 +1485,10 @@ string Instruction::getDestination() result_t LoadInstruction::execute(MessageMap* messages, ostringstream& log, Condition* condition) { result_t result = messages->readFromFile(m_filename, false, m_defaultDest, m_defaultCircuit, m_defaultSuffix); - if (log.tellp()>0) { + if (log.tellp() > 0) { log << ", "; } - if (result!=RESULT_OK) { + if (result != RESULT_OK) { log << "error " << (isSingleton() ? "loading \"" : "including \"") << m_filename << "\" for \"" << getDestination() << "\": " << getResultCode(result); return result; } @@ -1481,10 +1496,10 @@ result_t LoadInstruction::execute(MessageMap* messages, ostringstream& log, Cond if (isSingleton() && !m_defaultDest.empty()) { result_t temp; unsigned char address = (unsigned char)parseInt(m_defaultDest.c_str(), 16, 0, 0xff, temp); - if (temp==RESULT_OK) { + if (temp == RESULT_OK) { size_t pos = m_filename.find_last_of('/'); string filename; - if (pos==string::npos) { + if (pos == string::npos) { filename = m_filename; } else { filename = m_filename.substr(pos+1); @@ -1503,8 +1518,7 @@ result_t LoadInstruction::execute(MessageMap* messages, ostringstream& log, Cond } -result_t MessageMap::add(Message* message, bool storeByName) -{ +result_t MessageMap::add(Message* message, bool storeByName) { unsigned long long key = message->getKey(); bool conditional = message->isConditional(); if (!m_addAll) { @@ -1515,8 +1529,9 @@ result_t MessageMap::add(Message* message, bool storeByName) if (!conditional) { return RESULT_ERR_DUPLICATE; // duplicate key } - if (!other->isConditional()) + if (!other->isConditional()) { return RESULT_ERR_DUPLICATE; // duplicate key + } } } } @@ -1532,49 +1547,52 @@ result_t MessageMap::add(Message* message, bool storeByName) map >::iterator nameIt = m_messagesByName.find(nameKey); if (nameIt != m_messagesByName.end()) { vector* messages = &nameIt->second; - if (!message->isConditional() || !messages->front()->isConditional()) + if (!message->isConditional() || !messages->front()->isConditional()) { return RESULT_ERR_DUPLICATE_NAME; // duplicate key + } } } m_messagesByName[nameKey].push_back(message); nameKey = string(isPassive ? "-P" : (isWrite ? "-W" : "-R")) + name; // also store without circuit map >::iterator nameIt = m_messagesByName.find(nameKey); - if (nameIt == m_messagesByName.end()) + if (nameIt == m_messagesByName.end()) { m_messagesByName[nameKey].push_back(message); // always store first message without circuit (in order of circuit name) - else { + } else { vector* messages = &nameIt->second; Message* first = messages->front(); - if (circuit < first->getCircuit()) + if (circuit < first->getCircuit()) { m_messagesByName[nameKey].at(0) = message; // always store first message without circuit (in order of circuit name) - else if (m_addAll || (conditional && first->isConditional())) + } else if (m_addAll || (conditional && first->isConditional())) { m_messagesByName[nameKey].push_back(message); // store further messages only if both are conditional or if storing everything + } } m_messageCount++; - if (conditional) + if (conditional) { m_conditionalMessageCount++; - if (isPassive) + } + if (isPassive) { m_passiveMessageCount++; + } addPollMessage(message); } unsigned char idLength = message->getIdLength(); - if (idLength > m_maxIdLength) + if (idLength > m_maxIdLength) { m_maxIdLength = idLength; + } m_messagesByKey[key].push_back(message); - return RESULT_OK; } result_t MessageMap::addDefaultFromFile(vector< vector >& defaults, vector& row, vector::iterator& begin, string defaultDest, string defaultCircuit, string defaultSuffix, - const string& filename, unsigned int lineNo) -{ + const string& filename, unsigned int lineNo) { // check for condition in defaults string type = row[0]; - if (type.length()>0 && type[0]=='[' && type[type.length()-1]==']') { + if (type.length() > 0 && type[0] == '[' && type[type.length()-1] == ']') { // condition type = type.substr(1, type.length()-2); - if (type.find('[')!=string::npos || type.find(']')!=string::npos) { + if (type.find('[') != string::npos || type.find(']') != string::npos) { m_lastError = "invalid condition name "+type; return RESULT_ERR_INVALID_ARG; } @@ -1586,65 +1604,66 @@ result_t MessageMap::addDefaultFromFile(vector< vector >& defaults, vect } SimpleCondition* condition = NULL; result_t result = Condition::create(type, ++begin, row.end(), defaultDest, defaultCircuit+defaultSuffix, condition); - if (condition==NULL || result!=RESULT_OK) { + if (condition == NULL || result != RESULT_OK) { m_lastError = "invalid condition"; return result; } m_conditions[key] = condition; return RESULT_OK; } - if (row.size()>1 && defaultCircuit.length()>0) { - if (row[1].length()==0) + if (row.size() > 1 && defaultCircuit.length() > 0) { + if (row[1].length() == 0) { row[1] = defaultCircuit+defaultSuffix; // set default circuit and suffix: "circuit[.suffix]" - else if (row[1][0]=='#') + } else if (row[1][0] == '#') { row[1] = defaultCircuit+defaultSuffix+row[1]; // move security suffix behind default circuit and suffix: "circuit[.suffix]#security" - else if (defaultSuffix.length()>0 && row[1].find_last_of('.')==string::npos) { // circuit suffix not yet present + } else if (defaultSuffix.length() > 0 && row[1].find_last_of('.') == string::npos) { // circuit suffix not yet present size_t pos = row[1].find_first_of('#'); - if (pos==string::npos) + if (pos == string::npos) { row[1] += defaultSuffix; // append default suffix: "circuit.suffix" - else + } else { row[1] = row[1].substr(0, pos)+defaultSuffix+row[1].substr(pos); // insert default suffix: "circuit.suffix#security" + } } } - if (row.size()>5 && defaultDest.length()>0 && row[5].length()==0) + if (row.size() > 5 && defaultDest.length() > 0 && row[5].length() == 0) { row[5] = defaultDest; // set default destination + } return FileReader::addDefaultFromFile(defaults, row, begin, defaultDest, defaultCircuit, defaultSuffix, filename, lineNo); } -result_t MessageMap::readConditions(string& types, const string& filename, Condition*& condition) -{ +result_t MessageMap::readConditions(string& types, const string& filename, Condition*& condition) { size_t pos; - if (types.length()>0 && types[0]=='[' && (pos=types.find_last_of(']'))!=string::npos) { + if (types.length() > 0 && types[0] == '[' && (pos=types.find_last_of(']')) != string::npos) { // check if combined or simple condition is already known const string combinedkey = filename+":"+types.substr(1, pos-1); map::iterator it = m_conditions.find(combinedkey); - if (it!=m_conditions.end()) { + if (it != m_conditions.end()) { condition = it->second; types = types.substr(pos+1); } else { bool store = false; condition = NULL; - while ((pos=types.find(']'))!=string::npos) { + while ((pos=types.find(']')) != string::npos) { // simple condition string key = filename+":"+types.substr(1, pos-1); map::iterator it = m_conditions.find(key); Condition* add = NULL; - if (it==m_conditions.end()) { + if (it == m_conditions.end()) { // check for on-the-fly condition size_t pos = key.find_first_of("=<>", filename.length()+1); - if (pos!=string::npos) { + if (pos != string::npos) { it = m_conditions.find(key.substr(0, pos)); - if (it!=m_conditions.end()) { + if (it != m_conditions.end()) { // derive from another condition add = it->second->derive(key.substr(pos)); - if (add==NULL) { + if (add == NULL) { m_lastError = "derive condition with values "+key.substr(pos)+" failed"; return RESULT_ERR_INVALID_ARG; } m_conditions[key] = add; // store derived condition } } - if (add==NULL) { + if (add == NULL) { // shared condition not available m_lastError = "condition "+types.substr(1, pos-1)+" not defined"; return RESULT_ERR_NOTFOUND; @@ -1659,8 +1678,9 @@ result_t MessageMap::readConditions(string& types, const string& filename, Condi condition = add; } types = types.substr(pos+1); - if (types.length()==0 || types[0]!='[') + if (types.length() == 0 || types[0] != '[') { break; + } } if (store) { m_conditions[combinedkey] = condition; // store combined condition @@ -1672,21 +1692,20 @@ result_t MessageMap::readConditions(string& types, const string& filename, Condi result_t MessageMap::addFromFile(vector::iterator& begin, const vector::iterator end, vector< vector >* defaults, const string& defaultDest, const string& defaultCircuit, const string& defaultSuffix, - const string& filename, unsigned int lineNo) -{ + const string& filename, unsigned int lineNo) { vector::iterator restart = begin; string types = *restart; Condition* condition = NULL; result_t result = readConditions(types, filename, condition); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { return result; } - if (types.length()>0 && types[0]=='!') { + if (types.length() > 0 && types[0] == '!') { // instruction types = types.substr(1); Instruction* instruction = NULL; result_t result = Instruction::create(filename, defaultDest, defaultCircuit, defaultSuffix, condition, types, ++begin, end, instruction); - if (instruction==NULL || result!=RESULT_OK) { + if (instruction == NULL || result != RESULT_OK) { m_lastError = "invalid instruction"; return result; } @@ -1702,7 +1721,7 @@ result_t MessageMap::addFromFile(vector::iterator& begin, const vector::iterator& begin, const vector::iterator& begin, const vectorgetDerivedKey(dstAddress); vector* msgs = getByKey(key); - if (msgs!=NULL) + if (msgs != NULL) { return msgs->front(); + } Message* message = m_scanMessage->derive(dstAddress, true); add(message); return message; @@ -1758,30 +1779,29 @@ result_t MessageMap::resolveConditions(bool verbose) { for (map::iterator it = m_conditions.begin(); it != m_conditions.end(); it++) { Condition* condition = it->second; result_t result = resolveCondition(condition); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { overallResult = result; } } return overallResult; } -result_t MessageMap::resolveCondition(Condition* condition, void (*readMessageFunc)(Message* message)) -{ +result_t MessageMap::resolveCondition(Condition* condition, void (*readMessageFunc)(Message* message)) { ostringstream error; result_t result = condition->resolve(this, error, readMessageFunc); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { string errorMessage = error.str(); - if (errorMessage.length()>0) { - if (m_lastError.length()>0) + if (errorMessage.length() > 0) { + if (m_lastError.length() > 0) { m_lastError += ", "; + } m_lastError += errorMessage; } } return result; } -result_t MessageMap::executeInstructions(ostringstream& log, void (*readMessageFunc)(Message* message)) -{ +result_t MessageMap::executeInstructions(ostringstream& log, void (*readMessageFunc)(Message* message)) { m_lastError = ""; result_t overallResult = RESULT_OK; vector remove; @@ -1796,10 +1816,10 @@ result_t MessageMap::executeInstructions(ostringstream& log, void (*readMessageF continue; } Condition* condition = instruction->getCondition(); - bool execute = condition==NULL; + bool execute = condition == NULL; if (!execute) { result_t result = resolveCondition(condition, instruction->isSingleton()?readMessageFunc:NULL); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { overallResult = result; } else if (condition->isTrue()) { execute = true; @@ -1810,7 +1830,7 @@ result_t MessageMap::executeInstructions(ostringstream& log, void (*readMessageF removeSingletons = true; } result_t result = instruction->execute(this, log, condition); - if (result!=RESULT_OK) { + if (result != RESULT_OK) { overallResult = result; } delete instruction; @@ -1842,14 +1862,13 @@ result_t MessageMap::executeInstructions(ostringstream& log, void (*readMessageF return overallResult; } -void MessageMap::addLoadedFile(unsigned char address, string file, string comment) -{ +void MessageMap::addLoadedFile(unsigned char address, string file, string comment) { if (!file.empty()) { string fileComment = "\""+file+"\""; if (!comment.empty()) { fileComment += " ("+comment+")"; } - if (m_loadedFiles.find(address)==m_loadedFiles.end()) { + if (m_loadedFiles.find(address) == m_loadedFiles.end()) { m_loadedFiles[address] = fileComment; } else { m_loadedFiles[address] += ", "+fileComment; @@ -1857,50 +1876,50 @@ void MessageMap::addLoadedFile(unsigned char address, string file, string commen } } -string MessageMap::getLoadedFiles(unsigned char address) -{ - if (m_loadedFiles.find(address)==m_loadedFiles.end()) +string MessageMap::getLoadedFiles(unsigned char address) { + if (m_loadedFiles.find(address) == m_loadedFiles.end()) { return ""; + } return m_loadedFiles[address]; } vector* MessageMap::getByKey(const unsigned long long key) { map >::iterator it = m_messagesByKey.find(key); - if (it != m_messagesByKey.end()) + if (it != m_messagesByKey.end()) { return &it->second; + } return NULL; } -Message* MessageMap::find(const string& circuit, const string& name, const bool isWrite, const bool isPassive) -{ +Message* MessageMap::find(const string& circuit, const string& name, const bool isWrite, const bool isPassive) { string lcircuit = circuit; FileReader::tolower(lcircuit); string lname = name; FileReader::tolower(lname); for (int i = 0; i < 2; i++) { string key; - if (i == 0) + if (i == 0) { key = string(isPassive ? "P" : (isWrite ? "W" : "R")) + lcircuit + FIELD_SEPARATOR + lname; - else if (lcircuit.length() == 0) + } else if (lcircuit.length() == 0) { key = string(isPassive ? "-P" : (isWrite ? "-W" : "-R")) + lname; // second try: without circuit - else + } else { continue; // not allowed without circuit + } map >::iterator it = m_messagesByName.find(key); if (it != m_messagesByName.end()) { Message* message = getFirstAvailable(it->second); - if (message) + if (message) { return message; + } } } - return NULL; } deque MessageMap::findAll(const string& circuit, const string& name, const bool completeMatch, const bool withRead, const bool withWrite, const bool withPassive, const bool completeMatchIgnoreCircuitSuffix, const bool onlyAvailable, - const time_t since, const time_t until) -{ + const time_t since, const time_t until) { bool checkCircuitIgnoreSuffix = completeMatch && completeMatchIgnoreCircuitSuffix; deque ret; string lcircuit = circuit; @@ -1911,13 +1930,14 @@ deque MessageMap::findAll(const string& circuit, const string& name, c bool checkName = name.length() > 0; if (checkCircuit && checkCircuitIgnoreSuffix) { size_t pos = lcircuit.find('#'); - if (pos!=string::npos) { + if (pos != string::npos) { lcircuit.resize(pos); } } for (map >::iterator it = m_messagesByName.begin(); it != m_messagesByName.end(); it++) { - if (it->first[0] == '-') // avoid duplicates: instances stored multiple times have a key starting with "-" + if (it->first[0] == '-') { // avoid duplicates: instances stored multiple times have a key starting with "-" continue; + } for (vector::iterator msgIt = it->second.begin(); msgIt != it->second.end(); msgIt++) { Message* message = *msgIt; if (checkCircuit) { @@ -1925,18 +1945,20 @@ deque MessageMap::findAll(const string& circuit, const string& name, c FileReader::tolower(check); if (checkCircuitIgnoreSuffix) { size_t pos = check.find('#'); - if (pos!=string::npos) { + if (pos != string::npos) { check.resize(pos); } } - if (completeMatch ? (check != lcircuit) : (check.find(lcircuit) == check.npos)) + if (completeMatch ? (check != lcircuit) : (check.find(lcircuit) == check.npos)) { continue; + } } if (checkName) { string check = message->getName(); FileReader::tolower(check); - if (completeMatch ? (check != lname) : (check.find(lname) == check.npos)) + if (completeMatch ? (check != lname) : (check.find(lname) == check.npos)) { continue; + } } if (message->isPassive()) { if (!withPassive) { @@ -1951,13 +1973,13 @@ deque MessageMap::findAll(const string& circuit, const string& name, c continue; } } - if (since!=0 || until!=0) { + if (since != 0 || until != 0) { if (message->getDstAddress() == SYN) { continue; } time_t lastchg = message->getLastChangeTime(); - if ((since!=0 && lastchg < since) - || (until!=0 && lastchg >= until)) { + if ((since != 0 && lastchg < since) + || (until != 0 && lastchg >= until)) { continue; } } @@ -1971,19 +1993,18 @@ deque MessageMap::findAll(const string& circuit, const string& name, c } Message* MessageMap::find(SymbolString& master, bool anyDestination, - const bool withRead, const bool withWrite, const bool withPassive) -{ + const bool withRead, const bool withWrite, const bool withPassive) { if (master.size() >= 5 && master[4] == 0 && anyDestination && master[2] == 0x07 && master[3] == 0x04) { return m_scanMessage; } unsigned long long baseKey = Message::createKey(master, m_maxIdLength, anyDestination); - if (baseKey==INVALID_KEY) { + if (baseKey == INVALID_KEY) { return NULL; } unsigned char maxIdLength = Message::getKeyLength(baseKey); for (unsigned char idLength = maxIdLength; true; idLength--) { unsigned long long key = baseKey; - if (idLength==maxIdLength) { + if (idLength == maxIdLength) { baseKey &= ~ID_LENGTH_AND_IDS_MASK; } else { key |= (unsigned long long)idLength << (8 * 7 + 5); @@ -2000,16 +2021,18 @@ Message* MessageMap::find(SymbolString& master, bool anyDestination, it = m_messagesByKey.find(key); if (it != m_messagesByKey.end()) { Message* message = getFirstAvailable(it->second, &master); - if (message) + if (message) { return message; + } } if ((key & ID_SOURCE_MASK) != 0) { key &= ~ID_SOURCE_MASK; it = m_messagesByKey.find(key & ~ID_SOURCE_MASK); // try again without specific source master if (it != m_messagesByKey.end()) { Message* message = getFirstAvailable(it->second, &master); - if (message) + if (message) { return message; + } } } } else { @@ -2019,51 +2042,52 @@ Message* MessageMap::find(SymbolString& master, bool anyDestination, it = m_messagesByKey.find(key | ID_SOURCE_ACTIVE_READ); // try again with special value for active read if (it != m_messagesByKey.end()) { Message* message = getFirstAvailable(it->second, &master); - if (message) + if (message) { return message; + } } } if (withWrite) { it = m_messagesByKey.find(key | ID_SOURCE_ACTIVE_WRITE); // try again with special value for active write if (it != m_messagesByKey.end()) { Message* message = getFirstAvailable(it->second, &master); - if (message) + if (message) { return message; + } } } - if (idLength == 0) + if (idLength == 0) { break; + } } return NULL; } -void MessageMap::invalidateCache(Message* message) -{ - if (message->m_data==DataFieldSet::getIdentFields()) +void MessageMap::invalidateCache(Message* message) { + if (message->m_data == DataFieldSet::getIdentFields()) { return; + } message->m_lastUpdateTime = 0; string circuit = message->getCircuit(); string name = message->getName(); deque messages = findAll(circuit, name, true, true, true, true, true); for (deque::iterator it = messages.begin(); it != messages.end(); it++) { Message* checkMessage = *it; - if (checkMessage!=message) { + if (checkMessage != message) { checkMessage->m_lastUpdateTime = 0; } } } -void MessageMap::addPollMessage(Message* message, bool toFront) -{ +void MessageMap::addPollMessage(Message* message, bool toFront) { if (message != NULL && message->getPollPriority() > 0) { message->m_lastPollTime = toFront ? 0 : m_pollMessages.size(); m_pollMessages.push(message); } } -void MessageMap::clear() -{ +void MessageMap::clear() { m_loadedFiles.clear(); // clear poll messages while (!m_pollMessages.empty()) { @@ -2081,7 +2105,7 @@ void MessageMap::clear() vector* keyMessages = &keyIt->second; if (!keyMessages->empty()) { for (vector::iterator kit = keyMessages->begin(); kit != keyMessages->end(); kit++) { - if (*kit==message) { + if (*kit == message) { keyMessages->erase(kit--); } } @@ -2126,10 +2150,10 @@ void MessageMap::clear() m_maxIdLength = 0; } -Message* MessageMap::getNextPoll() -{ - if (m_pollMessages.empty()) +Message* MessageMap::getNextPoll() { + if (m_pollMessages.empty()) { return NULL; + } Message* ret = m_pollMessages.top(); m_pollMessages.pop(); ret->m_pollCount++; @@ -2138,34 +2162,39 @@ Message* MessageMap::getNextPoll() return ret; } -void MessageMap::dump(ostream& output, bool withConditions) -{ +void MessageMap::dump(ostream& output, bool withConditions) { bool first = true; for (map >::iterator it = m_messagesByName.begin(); it != m_messagesByName.end(); it++) { - if (it->first[0] == '-') // skip instances stored multiple times (key starting with "-") + if (it->first[0] == '-') { // skip instances stored multiple times (key starting with "-") continue; + } if (m_addAll) { for (vector::iterator mit = it->second.begin(); mit != it->second.end(); mit++) { Message* message = *mit; - if (!message) + if (!message) { continue; - if (first) + } + if (first) { first = false; - else + } else { output << endl; + } message->dump(output, NULL, withConditions); } } else { Message* message = getFirstAvailable(it->second); - if (!message) + if (!message) { continue; - if (first) + } + if (first) { first = false; - else + } else { output << endl; + } message->dump(output, NULL, withConditions); } } - if (!first) + if (!first) { output << endl; + } } diff --git a/src/lib/ebus/message.h b/src/lib/ebus/message.h index c0e7020e..40e886e8 100644 --- a/src/lib/ebus/message.h +++ b/src/lib/ebus/message.h @@ -16,16 +16,18 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_MESSAGE_H_ -#define LIBEBUS_MESSAGE_H_ +#ifndef LIB_EBUS_MESSAGE_H_ +#define LIB_EBUS_MESSAGE_H_ -#include "data.h" -#include "result.h" -#include "symbol.h" #include #include #include #include +#include +#include +#include "data.h" +#include "result.h" +#include "symbol.h" /** @file message.h * Classes and functions for decoding and encoding of complete messages on the @@ -117,8 +119,8 @@ public: const unsigned char srcAddress, const unsigned char dstAddress, const vector id, DataField* data, const bool deleteData, - const unsigned char pollPriority=0, - Condition* condition=NULL); + const unsigned char pollPriority = 0, + Condition* condition = NULL); private: /** @@ -142,7 +144,7 @@ public: /** * Destructor. */ - virtual ~Message() { if (m_deleteData) delete m_data; } + virtual ~Message() { if (m_deleteData) { delete m_data; } } /** * Calculate the key for the ID. @@ -166,7 +168,7 @@ public: * @return the key for the ID, or -1LL if the data is invalid. */ static unsigned long long createKey(SymbolString& master, - unsigned char maxIdLength, bool anyDestination=false); + unsigned char maxIdLength, bool anyDestination = false); /** * Get the length field from the key. @@ -222,7 +224,7 @@ public: * @param circuit the new circuit name, or empty to use the current circuit name. * @return the derived @a Message instance. */ - virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress=SYN, const string circuit=""); + virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress = SYN, const string circuit = ""); /** * Derive a new @a Message from this message. @@ -313,7 +315,7 @@ public: * @param index the variable in which to store the message part index, or NULL to ignore. * @return true if the ID matches, false otherwise. */ - virtual bool checkId(SymbolString& master, unsigned char* index=NULL); + virtual bool checkId(SymbolString& master, unsigned char* index = NULL); /** * Check the ID against the other @a Message. @@ -357,7 +359,7 @@ public: * Return whether this @a Message depends on a @a Condition. * @return true when this @a Message depends on a @a Condition. */ - bool isConditional() const { return m_condition!=NULL; } + bool isConditional() const { return m_condition != NULL; } /** * Return whether this @a Message is available (optionally depending on a @a Condition evaluation). @@ -371,7 +373,7 @@ public: * @param numeric true for a numeric field, false for a string field. * @return true if the field is available. */ - bool hasField(const char* fieldName, bool numeric=true); + bool hasField(const char* fieldName, bool numeric = true); /** * @return the number of parts this message is composed of. @@ -389,8 +391,8 @@ public: * @return @a RESULT_OK on success, or an error code. */ result_t prepareMaster(const unsigned char srcAddress, SymbolString& masterData, - istringstream& input, char separator=UI_FIELD_SEPARATOR, - const unsigned char dstAddress=SYN, unsigned char index=0); + istringstream& input, char separator = UI_FIELD_SEPARATOR, + const unsigned char dstAddress = SYN, unsigned char index = 0); protected: @@ -442,8 +444,8 @@ public: * @return @a RESULT_OK on success, or an error code. */ virtual result_t decodeLastData(const PartType partType, - ostringstream& output, OutputFormat outputFormat=0, - bool leadingSeparator=false, const char* fieldName=NULL, signed char fieldIndex=-1); + ostringstream& output, OutputFormat outputFormat = 0, + bool leadingSeparator = false, const char* fieldName = NULL, signed char fieldIndex = -1); /** * Decode the value from the last stored data. @@ -454,8 +456,8 @@ public: * @param fieldIndex the optional index of the named field to limit the output to, or -1. * @return @a RESULT_OK on success, or an error code. */ - virtual result_t decodeLastData(ostringstream& output, OutputFormat outputFormat=0, - bool leadingSeparator=false, const char* fieldName=NULL, signed char fieldIndex=-1); + virtual result_t decodeLastData(ostringstream& output, OutputFormat outputFormat = 0, + bool leadingSeparator = false, const char* fieldName = NULL, signed char fieldIndex = -1); /** * Decode a particular numeric field value from the last stored data. @@ -464,7 +466,7 @@ public: * @param fieldIndex the optional index of the named field, or -1. * @return @a RESULT_OK on success, or an error code. */ - virtual result_t decodeLastDataNumField(unsigned int& output, const char* fieldName, signed char fieldIndex=-1); + virtual result_t decodeLastDataNumField(unsigned int& output, const char* fieldName, signed char fieldIndex = -1); /** * Get the last seen master data. @@ -509,7 +511,7 @@ public: * @param columns the list of column indexes to write, or NULL for all (see @p COLUMN_TYPE index constants). * @param withConditions whether to include the optional conditions prefix. */ - void dump(ostream& output, vector* columns=NULL, bool withConditions=false); + void dump(ostream& output, vector* columns = NULL, bool withConditions = false); /** * Write the specified column to the @a ostream. @@ -517,7 +519,7 @@ public: * @param column the column index to write (see @p COLUMN_TYPE index constants). * @param withConditions whether to include the optional conditions prefix. */ - virtual void dumpColumn(ostream& output, size_t column, bool withConditions=false); + virtual void dumpColumn(ostream& output, size_t column, bool withConditions = false); protected: @@ -638,18 +640,18 @@ public: vector< vector > ids, vector lengths, DataField* data, const bool deleteData, const unsigned char pollPriority, - Condition* condition=NULL); + Condition* condition = NULL); virtual ~ChainedMessage(); // @copydoc - virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress=SYN, const string circuit=""); + virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress = SYN, const string circuit = ""); // @copydoc virtual unsigned char getIdLength() const { return (unsigned char)(m_ids[0].size() - 2); } // @copydoc - virtual bool checkId(SymbolString& master, unsigned char* index=NULL); + virtual bool checkId(SymbolString& master, unsigned char* index = NULL); // @copydoc virtual bool checkId(Message& other); @@ -673,7 +675,7 @@ public: protected: // @copydoc - virtual void dumpColumn(ostream& output, size_t column, bool withConditions=false); + virtual void dumpColumn(ostream& output, size_t column, bool withConditions = false); private: @@ -729,7 +731,7 @@ public: void push(const value_type& __x) { for (vector::iterator it = c.begin(); it != c.end(); it++) { - if (*it==__x) { + if (*it == __x) { c.erase(it); break; } @@ -781,7 +783,7 @@ public: * @param output the @a ostream to append to. * @param matched true for dumping the matched value if the condition is true, false for dumping the definition. */ - virtual void dump(ostream& output, bool matched=false) = 0; + virtual void dump(ostream& output, bool matched = false) = 0; /** * Combine this condition with another instance using a logical and. @@ -797,7 +799,7 @@ public: * @param readMessageFunc the function to call for immediate reading of a @a Message from the bus, or NULL. * @return @a RESULT_OK on success, or an error code. */ - virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)=NULL) = 0; + virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message) = NULL) = 0; /** * Check and return whether this condition is fulfilled. @@ -833,7 +835,7 @@ public: * @param field the field name. * @param hasValues whether a value has to be checked against. */ - SimpleCondition(const string condName, const string refName, const string circuit, const string name, const unsigned char dstAddress, const string field, const bool hasValues=false) + SimpleCondition(const string condName, const string refName, const string circuit, const string name, const unsigned char dstAddress, const string field, const bool hasValues = false) : Condition(), m_condName(condName), m_refName(refName), m_circuit(circuit), m_name(name), m_dstAddress(dstAddress), m_field(field), m_hasValues(hasValues), m_message(NULL) { } @@ -846,13 +848,13 @@ public: virtual SimpleCondition* derive(string valueList); // @copydoc - virtual void dump(ostream& output, bool matched=false); + virtual void dump(ostream& output, bool matched = false); // @copydoc virtual CombinedCondition* combineAnd(Condition* other); // @copydoc - virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)=NULL); + virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message) = NULL); // @copydoc virtual bool isTrue(); @@ -1005,13 +1007,13 @@ public: virtual ~CombinedCondition() {} // @copydoc - virtual void dump(ostream& output, bool matched=false); + virtual void dump(ostream& output, bool matched = false); // @copydoc virtual CombinedCondition* combineAnd(Condition* other) { m_conditions.push_back(other); return this; } // @copydoc - virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message)=NULL); + virtual result_t resolve(MessageMap* messages, ostringstream& errorMessage, void (*readMessageFunc)(Message* message) = NULL); // @copydoc virtual bool isTrue(); @@ -1158,7 +1160,7 @@ public: * Construct a new instance. * @param addAll whether to add all messages, even if duplicate. */ - MessageMap(const bool addAll=false) : FileReader::FileReader(true), + MessageMap(const bool addAll = false) : FileReader::FileReader(true), m_addAll(addAll), m_maxIdLength(0), m_messageCount(0), m_conditionalMessageCount(0), m_passiveMessageCount(0) { m_scanMessage = Message::createScanMessage(); @@ -1179,7 +1181,7 @@ public: * @return @a RESULT_OK on success, or an error code. * Note: the caller may not free the added instance on success. */ - result_t add(Message* message, bool storeByName=true); + result_t add(Message* message, bool storeByName = true); // @copydoc virtual result_t addDefaultFromFile(vector< vector >& defaults, vector& row, @@ -1205,14 +1207,14 @@ public: * @param dstAddress the destination address, or @a SYN for the base scan @a Message. * @return the scan @a Message instance, or NULL if the dstAddress is no slave. */ - Message* getScanMessage(const unsigned char dstAddress=SYN); + Message* getScanMessage(const unsigned char dstAddress = SYN); /** * Resolve all @a Condition instances. * @param verbose whether to verbosely add all problems to the error message. * @return @a RESULT_OK on success, or an error code. */ - result_t resolveConditions(bool verbose=false); + result_t resolveConditions(bool verbose = false); /** * Resolve a @a Condition. @@ -1220,7 +1222,7 @@ public: * @param readMessageFunc the function to call for immediate reading of a @a Message from the bus, or NULL. * @return @a RESULT_OK on success, or an error code. */ - result_t resolveCondition(Condition* condition, void (*readMessageFunc)(Message* message)=NULL); + result_t resolveCondition(Condition* condition, void (*readMessageFunc)(Message* message) = NULL); /** * Run all executable @a Instruction instances. @@ -1229,7 +1231,7 @@ public: * @a Message values from the bus required for singleton instructions, or NULL. * @return @a RESULT_OK on success, or an error code. */ - result_t executeInstructions(ostringstream& log, void (*readMessageFunc)(Message* message)=NULL); + result_t executeInstructions(ostringstream& log, void (*readMessageFunc)(Message* message) = NULL); /** * Add a loaded file to a participant. @@ -1263,7 +1265,7 @@ public: * @return the @a Message instance, or NULL. * Note: the caller may not free the returned instance. */ - Message* find(const string& circuit, const string& name, const bool isWrite, const bool isPassive=false); + Message* find(const string& circuit, const string& name, const bool isWrite, const bool isPassive = false); /** * Find all active get @a Message instances for the specified circuit and name. @@ -1280,10 +1282,10 @@ public: * @param until the end time to which to add updates (exclusive, also removes messages with unset destination address), or 0 to ignore. * Note: the caller may not free the returned instances. */ - deque findAll(const string& circuit, const string& name, const bool completeMatch=true, - const bool withRead=true, const bool withWrite=false, const bool withPassive=false, - const bool completeMatchIgnoreCircuitSuffix=false, const bool onlyAvailable=true, - const time_t since=0, const time_t until=0); + deque findAll(const string& circuit, const string& name, const bool completeMatch = true, + const bool withRead = true, const bool withWrite = false, const bool withPassive = false, + const bool completeMatchIgnoreCircuitSuffix = false, const bool onlyAvailable = true, + const time_t since = 0, const time_t until = 0); /** * Find the @a Message instance for the specified master data. @@ -1295,8 +1297,8 @@ public: * @return the @a Message instance, or NULL. * Note: the caller may not free the returned instance. */ - Message* find(SymbolString& master, bool anyDestination=false, - const bool withRead=true, const bool withWrite=true, const bool withPassive=true); + Message* find(SymbolString& master, bool anyDestination = false, + const bool withRead = true, const bool withWrite = true, const bool withPassive = true); /** * Invalidate cached data of the @a Message and all other instances with a matching name key. @@ -1309,7 +1311,7 @@ public: * @param message the @a Message to poll. * @param toFront whether to add the @a Message to the very front of the poll queue. */ - void addPollMessage(Message* message, bool toFront=false); + void addPollMessage(Message* message, bool toFront = false); /** * Removes all @a Message instances. @@ -1364,7 +1366,7 @@ public: * @param output the @a ostream to append the formatted messages to. * @param withConditions whether to include the optional conditions prefix. */ - void dump(ostream& output, bool withConditions=false); + void dump(ostream& output, bool withConditions = false); private: @@ -1406,4 +1408,4 @@ private: }; -#endif // LIBEBUS_MESSAGE_H_ +#endif // LIB_EBUS_MESSAGE_H_ diff --git a/src/lib/ebus/result.cpp b/src/lib/ebus/result.cpp index 51c0cb6b..7530198a 100644 --- a/src/lib/ebus/result.cpp +++ b/src/lib/ebus/result.cpp @@ -51,8 +51,9 @@ const char* getResultCode(result_t resultCode) { case RESULT_ERR_SYN: return "ERR: SYN received"; default: - if (resultCode >= 0) + if (resultCode >= 0) { return "done: unknown result code"; + } return "ERR: unknown result code"; } } diff --git a/src/lib/ebus/result.h b/src/lib/ebus/result.h index 8b71c46b..3daa050b 100644 --- a/src/lib/ebus/result.h +++ b/src/lib/ebus/result.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_RESULT_H_ -#define LIBEBUS_RESULT_H_ +#ifndef LIB_EBUS_RESULT_H_ +#define LIB_EBUS_RESULT_H_ /** @file result.h * Functions, and constants related to execution results. @@ -70,4 +70,4 @@ enum result_t { */ const char* getResultCode(result_t resultCode); -#endif // LIBEBUS_RESULT_H_ +#endif // LIB_EBUS_RESULT_H_ diff --git a/src/lib/ebus/symbol.cpp b/src/lib/ebus/symbol.cpp index 6789b229..d813066c 100644 --- a/src/lib/ebus/symbol.cpp +++ b/src/lib/ebus/symbol.cpp @@ -17,9 +17,11 @@ */ #include "symbol.h" -#include "result.h" #include #include +#include +#include +#include "result.h" using namespace std; @@ -47,13 +49,12 @@ static const unsigned char CRC_LOOKUP_TABLE[] = }; -void SymbolString::addAll(const SymbolString& str, bool skipLastSymbol) -{ +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) { + if (end > 0 && skipLastSymbol) { end--; } for (size_t i = 0; i < end; i++) { @@ -64,8 +65,7 @@ void SymbolString::addAll(const SymbolString& str, bool skipLastSymbol) } } -result_t SymbolString::parseHex(const string& str, const bool isEscaped) -{ +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; @@ -83,8 +83,7 @@ result_t SymbolString::parseHex(const string& str, const bool isEscaped) return RESULT_OK; } -const string SymbolString::getDataStr(const bool unescape, const bool skipLastSymbol) -{ +const string SymbolString::getDataStr(const bool unescape, const bool skipLastSymbol) { stringstream sstr; bool previousEscape = false; @@ -111,8 +110,7 @@ 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) -{ +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); @@ -214,8 +212,8 @@ unsigned char getMasterPartIndex(unsigned char bits) { } bool isMaster(unsigned char addr) { - return getMasterPartIndex(addr & 0x0F)>0 - && getMasterPartIndex((addr & 0xF0) >> 4)>0; + return getMasterPartIndex(addr & 0x0F) > 0 + && getMasterPartIndex((addr & 0xF0)>>4) > 0; } bool isSlaveMaster(unsigned char addr) { @@ -245,11 +243,11 @@ unsigned char getMasterAddress(unsigned char addr) { unsigned char getMasterNumber(unsigned char addr) { unsigned char priority = getMasterPartIndex(addr & 0x0F); - if (priority==0) { + if (priority == 0) { return 0; } unsigned char index = getMasterPartIndex((addr & 0xF0) >> 4); - if (index==0) { + if (index == 0) { return 0; } return (unsigned char)(5*(priority-1) + index); diff --git a/src/lib/ebus/symbol.h b/src/lib/ebus/symbol.h index bd7af257..03dd08b8 100644 --- a/src/lib/ebus/symbol.h +++ b/src/lib/ebus/symbol.h @@ -16,14 +16,18 @@ * along with this program. If not, see . */ -#ifndef LIBEBUS_SYMBOL_H_ -#define LIBEBUS_SYMBOL_H_ +#ifndef LIB_EBUS_SYMBOL_H_ +#define LIB_EBUS_SYMBOL_H_ -#include "result.h" #include #include #include #include +#include +#include +#include "result.h" + +using namespace std; /** @file symbol.h * Classes, functions, and constants related to symbols on the eBUS. @@ -61,8 +65,6 @@ * non-acknowledge, the receiving slave has to repeat its data once. */ -using namespace std; - static const unsigned char ESC = 0xA9; //!< escape symbol, either followed by 0x00 for the value 0xA9, or 0x01 for the value 0xAA static const unsigned char SYN = 0xAA; //!< synchronization symbol static const unsigned char ACK = 0x00; //!< positive acknowledge @@ -81,14 +83,14 @@ public: * Creates a new empty escaped or unescaped instance. * @param escaped whether to create an escaped instance. */ - SymbolString(const bool escaped=true) : m_unescapeState(escaped ? 0 : 1), m_crc(0) {} + SymbolString(const bool escaped = true) : m_unescapeState(escaped ? 0 : 1), m_crc(0) {} /** * 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). */ - void addAll(const SymbolString& str, const bool skipLastSymbol=false); + void addAll(const SymbolString& str, const bool skipLastSymbol = false); /** * Parse the escaped or unescaped hex @a string, add all symbols, and add the calculated CRC if escaped. @@ -96,7 +98,7 @@ public: * @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, const bool isEscaped = false); /** * Return the symbols as hex string. @@ -104,28 +106,28 @@ public: * @param skipLastSymbol whether to skip the last symbol (probably the CRC). * @return the symbols as hex string. */ - const string getDataStr(const bool unescape=true, const bool skipLastSymbol=true); + const string getDataStr(const bool unescape = true, const bool skipLastSymbol = true); /** * Return a reference to the symbol at the specified index. * @param index the index of the symbol to return. * @return the reference to the symbol at the specified index. */ - unsigned char& operator[](const size_t index) { if (index >= m_data.size()) m_data.resize(index+1, 0); return m_data[index]; } + unsigned char& operator[](const size_t index) { if (index >= m_data.size()) { m_data.resize(index+1, 0); } return m_data[index]; } /** * 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). */ - bool operator==(SymbolString& other) { return m_unescapeState==other.m_unescapeState && m_data==other.m_data; } + bool operator == (SymbolString& other) { return m_unescapeState == other.m_unescapeState && m_data == other.m_data; } /** * Return whether this instance is different from the other instance. * @param other the other instance. * @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; } + bool operator != (SymbolString& other) { return m_unescapeState != other.m_unescapeState || 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). @@ -135,10 +137,18 @@ public: * 2 if this instance only differs from the other instance in the first byte (the master address). */ int compareMaster(SymbolString& other) { - if (m_unescapeState!=other.m_unescapeState || m_data.size()!=other.m_data.size()) return 1; - if (m_data==other.m_data) return 0; - if (m_data.size()==1) return 2; - if (equal(m_data.begin()+1, m_data.end()-1, other.m_data.begin()+1)) return 2; + if (m_unescapeState != other.m_unescapeState || m_data.size() != other.m_data.size()) { + return 1; + } + if (m_data == other.m_data) { + return 0; + } + if (m_data.size() == 1) { + return 2; + } + if (equal(m_data.begin()+1, m_data.end()-1, other.m_data.begin()+1)) { + return 2; + } return 1; } @@ -151,7 +161,7 @@ public: * 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); + result_t push_back(const unsigned char value, const bool isEscaped = true, const bool updateCRC = true); /** * Return the number of symbols in this symbol string. @@ -168,7 +178,7 @@ public: /** * Clear the symbols. */ - void clear() { m_data.clear(); m_unescapeState = m_unescapeState==0 ? 0 : 1; m_crc = 0; } + void clear() { m_data.clear(); m_unescapeState = m_unescapeState == 0 ? 0 : 1; m_crc = 0; } /** * Clear the symbols and adjust the escape mode. @@ -247,6 +257,6 @@ unsigned char getMasterNumber(unsigned char addr); * @param allowBroadcast whether to also allow @a addr to be the broadcast address (default true). * @return true if the specified address is a valid bus address. */ -bool isValidAddress(unsigned char addr, bool allowBroadcast=true); +bool isValidAddress(unsigned char addr, bool allowBroadcast = true); -#endif // LIBEBUS_SYMBOL_H_ +#endif // LIB_EBUS_SYMBOL_H_ diff --git a/src/lib/ebus/test/test_data.cpp b/src/lib/ebus/test/test_data.cpp index 342d9b31..15ea4b6d 100644 --- a/src/lib/ebus/test/test_data.cpp +++ b/src/lib/ebus/test/test_data.cpp @@ -16,17 +16,18 @@ * along with this program. If not, see . */ -#include "data.h" #include #include +#include +#include +#include "data.h" using namespace std; static bool error = false; void verify(bool expectFailMatch, string type, string input, - bool match, string expectStr, string gotStr) -{ + bool match, string expectStr, string gotStr) { match = match && expectStr == gotStr; if (expectFailMatch) { if (match) { @@ -45,8 +46,7 @@ void verify(bool expectFailMatch, string type, string input, } } -int main() -{ +int main() { string checks[][5] = { // entry: definition, decoded value, master data, slave data, flags // definition: name,part,type[:len][,[divisor|values][,[unit][,[comment]]]] @@ -63,9 +63,9 @@ int main() {"x,,str:*", "abcde", "10fe0700056162636465", "00", ""}, {"x,,str,2", "", "", "", "c"}, {"x,,str:10,=dummy", "", "10fe07000a48616c6c6f2044752120", "00", "W"}, - {"x,,str:10,==dummy", "", "10fe07000a48616c6c6f2044752120", "00", "rW"}, + {"x,,str:10, == dummy", "", "10fe07000a48616c6c6f2044752120", "00", "rW"}, {"x,,str:10,=dummy", "", "10fe07000a64756d6d792020202020", "00", ""}, - {"x,,str:10,==dummy", "", "10fe07000a64756d6d792020202020", "00", ""}, + {"x,,str:10, == dummy", "", "10fe07000a64756d6d792020202020", "00", ""}, {"x,,nts:10", "Hallo, Du!", "10fe07000a48616c6c6f2c20447521", "00", ""}, {"x,,nts:10", "Hallo, Du!", "10fe07000a48616c6c6f2c20447521", "00", ""}, {"x,,nts:10", "Hallo, Du", "10fe07000a48616c6c6f2c20447500", "00", ""}, @@ -83,9 +83,9 @@ int main() {"x,,hex:11", "", "10fe07000a48616c6c6f2c20447521", "00", "rW"}, {"x,,hex,2", "", "", "", "c"}, {"x,,hex:5,=48 61 6c 6c 6f", "", "10fe070005ababababab", "00", "W"}, - {"x,,hex:5,==48 61 6c 6c 6f", "", "10fe070005ababababab", "00", "rW"}, + {"x,,hex:5, == 48 61 6c 6c 6f", "", "10fe070005ababababab", "00", "rW"}, {"x,,hex:5,=48 61 6c 6c 6f", "", "10fe07000548616c6c6f", "00", ""}, - {"x,,hex:5,==48 61 6c 6c 6f", "", "10fe07000548616c6c6f", "00", ""}, + {"x,,hex:5, == 48 61 6c 6c 6f", "", "10fe07000548616c6c6f", "00", ""}, {"x,,bda", "26.10.2014","10fe07000426100614", "00", ""}, // Sunday {"x,,bda", "01.01.2000","10fe07000401010500", "00", ""}, // Saturday {"x,,bda", "31.12.2099","10fe07000431120399", "00", ""}, // Thursday @@ -264,9 +264,9 @@ int main() {"x,,uch,10", "3.8", "10feffff0126", "00", ""}, {"x,,uch,-10", "380","10feffff0126", "00", ""}, {"x,,uch,=48", "", "10feffff01ab", "00", "W"}, - {"x,,uch,==48", "", "10feffff01ab", "00", "rW"}, + {"x,,uch, == 48", "", "10feffff01ab", "00", "rW"}, {"x,,uch,=48", "", "10feffff0130", "00", ""}, - {"x,,uch,==48", "", "10feffff0130", "00", ""}, + {"x,,uch, == 48", "", "10feffff0130", "00", ""}, {"x,,sch", "-90", "10feffff01a6", "00", ""}, {"x,,sch", "0", "10feffff0100", "00", ""}, {"x,,sch", "-1", "10feffff01ff", "00", ""}, @@ -510,7 +510,7 @@ int main() fields = NULL; } vector::iterator it = entries.begin(); - result = DataField::create(it, entries.end(), templates, fields, isSet, isTemplate, !isTemplate && (mstr[1]==BROADCAST || isMaster(mstr[1]))); + result = DataField::create(it, entries.end(), templates, fields, isSet, isTemplate, !isTemplate && (mstr[1] == BROADCAST || isMaster(mstr[1]))); if (failedCreate) { if (result == RESULT_OK) { cout << "\"" << check[0] << "\": failed create error: unexpectedly succeeded" << endl; @@ -568,7 +568,7 @@ int main() if (result >= RESULT_OK) { result = fields->read(pt_slaveData, sstr, 0, output, verbosity|(numeric?OF_NUMERIC:0), -1, !output.str().empty()); } - if (failedRead) + if (failedRead) { if (result >= RESULT_OK) { cout << " failed read " << fields->getName() << " >" << check[2] << " " << check[3] << "< error: unexpectedly succeeded" << endl; @@ -577,21 +577,21 @@ int main() cout << " failed read " << fields->getName() << " >" << check[2] << " " << check[3] << "< OK" << endl; } - else if (result < RESULT_OK) { + } else if (result < RESULT_OK) { cout << " read " << fields->getName() << " >" << check[2] << " " << check[3] << "< error: " << getResultCode(result) << endl; error = true; - } - else { + } else { bool match = strcasecmp(output.str().c_str(), expectStr.c_str()) == 0; verify(failedReadMatch, "read", check[2], match, expectStr, output.str()); } - if (verbosity==0) { + if (verbosity == 0) { istringstream input(expectStr); result = fields->write(input, pt_masterData, writeMstr, 0); - if (result >= RESULT_OK) + if (result >= RESULT_OK) { result = fields->write(input, pt_slaveData, writeSstr, 0); + } if (failedWrite) { if (result >= RESULT_OK) { cout << " failed write " << fields->getName() << " >" @@ -601,8 +601,7 @@ int main() cout << " failed write " << fields->getName() << " >" << expectStr << "< OK" << endl; } - } - else if (result < RESULT_OK) { + } else if (result < RESULT_OK) { cout << " write " << fields->getName() << " >" << expectStr << "< error: " << getResultCode(result) << endl; error = true; diff --git a/src/lib/ebus/test/test_device.cpp b/src/lib/ebus/test/test_device.cpp index b06ab253..f88d23a9 100644 --- a/src/lib/ebus/test/test_device.cpp +++ b/src/lib/ebus/test/test_device.cpp @@ -16,14 +16,13 @@ * along with this program. If not, see . */ -#include "device.h" #include #include +#include "device.h" using namespace std; -int main () -{ +int main () { Device* device = Device::create("/dev/ttyUSB20", true, false, false); if (device == NULL) { cout << "unable to create device" << endl; @@ -33,26 +32,27 @@ int main () if (result != RESULT_OK) { cout << "open failed: " << getResultCode(result) << endl; } else { - if (!device->isValid()) + if (!device->isValid()) { cout << "device not available." << endl; - + } int count = 0; while (1) { unsigned char byte = 0; result = device->recv(0, byte); - if (result == RESULT_OK) + if (result == RESULT_OK) { cout << hex << setw(2) << setfill('0') << static_cast(byte) << endl; - + } count++; } device->close(); - if (!device->isValid()) + if (!device->isValid()) { cout << "close successful." << endl; + } } delete device; diff --git a/src/lib/ebus/test/test_filereader.cpp b/src/lib/ebus/test/test_filereader.cpp index c94c18d7..462fade2 100644 --- a/src/lib/ebus/test/test_filereader.cpp +++ b/src/lib/ebus/test/test_filereader.cpp @@ -16,17 +16,18 @@ * along with this program. If not, see . */ -#include "filereader.h" #include #include +#include +#include +#include "filereader.h" using namespace std; static bool error = false; void verify(bool expectFailMatch, string type, string input, - bool match, string expectStr, string gotStr) -{ + bool match, string expectStr, string gotStr) { match = match && expectStr == gotStr; if (expectFailMatch) { if (match) { @@ -45,8 +46,7 @@ void verify(bool expectFailMatch, string type, string input, } } -int main() -{ +int main() { istringstream ifs( "line 1 col 1,line 1 col 2,line 1 col 3\n" "line 2 col 1,\"line 2 col 2\",\"line 2 \"\"col 3\"\"\"\n" diff --git a/src/lib/ebus/test/test_message.cpp b/src/lib/ebus/test/test_message.cpp index 9ace336e..77158034 100644 --- a/src/lib/ebus/test/test_message.cpp +++ b/src/lib/ebus/test/test_message.cpp @@ -16,41 +16,43 @@ * along with this program. If not, see . */ -#include "message.h" #include #include #include +#include +#include +#include +#include "message.h" using namespace std; void verify(bool expectFailMatch, string type, string input, - bool match, string expectStr, string gotStr) -{ + bool match, string expectStr, string gotStr) { if (expectFailMatch) { - if (match) + if (match) { cout << " failed " << type << " match >" << input << "< error: unexpectedly succeeded" << endl; - else + } else { cout << " failed " << type << " match >" << input << "< OK" << endl; - } - else if (match) + } + } else if (match) { cout << " " << type << " match >" << input << "< OK" << endl; - else + } else { cout << " " << type << " match >" << input << "< error: got >" << gotStr << "<, expected >" << expectStr << "<" << endl; + } } DataFieldTemplates* templates = NULL; -DataFieldTemplates* getTemplates(const string filename) -{ - if (filename=="") // avoid compiler warning +DataFieldTemplates* getTemplates(const string filename) { + if (filename == "") { // avoid compiler warning return templates; + } return templates; } -int main() -{ +int main() { // message: [type],[circuit],name,[comment],[QQ[;QQ]*],[ZZ],[PBSB],[ID],fields... // field: name,part,type[:len][,[divisor|values][,[unit][,[comment]]]] // template: name,type[:len][,[divisor|values][,[unit][,[comment]]]] @@ -167,17 +169,16 @@ int main() DataField* fields = NULL; vector::iterator it = entries.begin(); result = DataField::create(it, entries.end(), templates, fields, false, true, false); - if (result != RESULT_OK) + if (result != RESULT_OK) { cout << "\"" << check[0] << "\": template fields create error: " << getResultCode(result) << endl; - else if (it != entries.end()) { + } else if (it != entries.end()) { cout << "\"" << check[0] << "\": template fields create error: trailing input " << static_cast(entries.end()-it) << endl; - } - else { + } else { cout << "\"" << check[0] << "\": create template OK" << endl; result = templates->add(fields, "", true); - if (result == RESULT_OK) + if (result == RESULT_OK) { cout << " store template OK" << endl; - else { + } else { cout << " store template error: " << getResultCode(result) << endl; delete fields; } @@ -189,21 +190,22 @@ int main() vector::iterator it = entries.begin(); size_t oldSize = conditions.size(); result = messages->addDefaultFromFile(defaultsRows, entries, it, "", "", "", "no file", 1); - if (result != RESULT_OK) + if (result != RESULT_OK) { cout << "\"" << check[0] << "\": defaults read error: " << getResultCode(result) << endl; - else if (it != entries.end()) + } else if (it != entries.end()) { cout << "\"" << check[0] << "\": defaults read error: trailing input " << static_cast(entries.end()-it) << endl; - else { + } else { cout << "\"" << check[0] << "\": read defaults OK" << endl; if (isCondition) { - if (conditions.size()==oldSize) { + if (conditions.size() == oldSize) { cout << " create condition error" << endl; } else { result = messages->resolveConditions(); - if (result != RESULT_OK) + if (result != RESULT_OK) { cout << " resolve conditions error: " << getResultCode(result) << " " << messages->getLastError() << endl; - else + } else { cout << " resolve conditions OK" << endl; + } } } } @@ -214,10 +216,11 @@ int main() string token; istringstream stream(check[2]); while (getline(stream, token, VALUE_SEPARATOR)) { - if (pos >= mstrs.size()) + if (pos >= mstrs.size()) { mstrs.resize(pos+1); - else if (mstrs[pos]!=NULL) + } else if (mstrs[pos] != NULL) { delete mstrs[pos]; + } mstrs[pos] = new SymbolString(false); result = mstrs[pos]->parseHex(token); if (result != RESULT_OK) { @@ -230,10 +233,11 @@ int main() stream.str(check[3]); stream.clear(); while (getline(stream, token, VALUE_SEPARATOR)) { - if (pos >= sstrs.size()) + if (pos >= sstrs.size()) { sstrs.resize(pos+1); - else if (sstrs[pos]!=NULL) + } else if (sstrs[pos] != NULL) { delete sstrs[pos]; + } sstrs[pos] = new SymbolString(false); result = sstrs[pos]->parseHex(token); if (result != RESULT_OK) { @@ -242,19 +246,22 @@ int main() } pos++; } - if (result != RESULT_OK) + if (result != RESULT_OK) { continue; + } } else { - if (mstrs[0]!=NULL) + if (mstrs[0] != NULL) { delete mstrs[0]; + } mstrs[0] = new SymbolString(false); result = mstrs[0]->parseHex(check[2]); if (result != RESULT_OK) { cout << "\"" << check[0] << "\": parse \"" << check[2] << "\" error: " << getResultCode(result) << endl; continue; } - if (sstrs[0]!=NULL) + if (sstrs[0] != NULL) { delete sstrs[0]; + } sstrs[0] = new SymbolString(false); result = sstrs[0]->parseHex(check[3]); if (result != RESULT_OK) { @@ -263,7 +270,7 @@ int main() } } - if (deleteMessages.size()>0) { + if (deleteMessages.size() > 0) { for (vector::iterator it = deleteMessages.begin(); it != deleteMessages.end(); it++) { Message* deleteMessage = *it; delete deleteMessage; @@ -282,15 +289,16 @@ int main() string types = *it; Condition* condition = NULL; result = messages->readConditions(types, "no file", condition); - if (result==RESULT_OK) { + if (result == RESULT_OK) { *it = types; result = Message::create(it, entries.end(), &defaultsRows, condition, "no file", templates, deleteMessages); } if (failedCreate) { - if (result == RESULT_OK) + if (result == RESULT_OK) { cout << "\"" << check[0] << "\": failed create error: unexpectedly succeeded" << endl; - else + } else { cout << "\"" << check[0] << "\": failed create OK" << endl; + } continue; } if (result != RESULT_OK) { @@ -299,7 +307,7 @@ int main() printErrorPos(cout, entries.begin(), entries.end(), it, "", 0, result); continue; } - if (deleteMessages.size()==0) { + if (deleteMessages.size() == 0) { cout << "\"" << check[0] << "\": create error: NULL" << endl; continue; } @@ -307,11 +315,11 @@ int main() cout << "\"" << check[0] << "\": create error: trailing input " << static_cast(entries.end()-it) << endl; continue; } - if (multi && deleteMessages.size()==1) { + if (multi && deleteMessages.size() == 1) { cout << "\"" << check[0] << "\": create error: single message instead of multiple" << endl; continue; } - if (!multi && deleteMessages.size()>1) { + if (!multi && deleteMessages.size() > 1) { cout << "\"" << check[0] << "\": create error: multiple messages instead of single" << endl; continue; } @@ -327,28 +335,31 @@ int main() break; } } - if (result != RESULT_OK) + if (result != RESULT_OK) { continue; + } cout << " map OK" << endl; message = deleteMessages.front(); deleteMessages.clear(); - if (onlyMap) + if (onlyMap) { continue; + } Message* foundMessage = messages->find(*mstrs[0]); - if (foundMessage == message) + if (foundMessage == message) { cout << " find OK" << endl; - else if (foundMessage == NULL) + } else if (foundMessage == NULL) { cout << " find error: NULL" << endl; - else + } else { cout << " find error: different" << endl; - } - else + } + } else { message = deleteMessages.front(); + } } if (message->isPassive() || decode) { ostringstream output; - for (unsigned char index=0; indexgetCount(); index++) { + for (unsigned char index = 0; index < message->getCount(); index++) { message->storeLastData(*mstrs[index], *sstrs[index]); } if (withMessageDump && !decodeJson) { @@ -370,10 +381,11 @@ int main() SymbolString writeMstr(false); result = message->prepareMaster(0xff, writeMstr, input); if (failedPrepare) { - if (result == RESULT_OK) + if (result == RESULT_OK) { cout << " \"" << inputStr << "\": failed prepare error: unexpectedly succeeded" << endl; - else + } else { cout << " \"" << inputStr << "\": failed prepare OK" << endl; + } continue; } @@ -384,12 +396,12 @@ int main() } cout << " \"" << inputStr << "\": prepare OK" << endl; - bool match = writeMstr==*mstrs[0]; + bool match = writeMstr == *mstrs[0]; verify(failedPrepareMatch, "prepare", inputStr, match, mstrs[0]->getDataStr(true, false), writeMstr.getDataStr(true, false)); } } - if (deleteMessages.size()>0) { + if (deleteMessages.size() > 0) { for (vector::iterator it = deleteMessages.begin(); it != deleteMessages.end(); it++) { Message* deleteMessage = *it; delete deleteMessage; @@ -399,10 +411,10 @@ int main() delete templates; delete messages; - for (vector::iterator it = mstrs.begin(); it!=mstrs.end(); it++) { + for (vector::iterator it = mstrs.begin(); it != mstrs.end(); it++) { delete *it; } - for (vector::iterator it = sstrs.begin(); it!=sstrs.end(); it++) { + for (vector::iterator it = sstrs.begin(); it != sstrs.end(); it++) { delete *it; } return 0; diff --git a/src/lib/ebus/test/test_symbol.cpp b/src/lib/ebus/test/test_symbol.cpp index 248f2576..78f92cc7 100644 --- a/src/lib/ebus/test/test_symbol.cpp +++ b/src/lib/ebus/test/test_symbol.cpp @@ -16,17 +16,17 @@ * along with this program. If not, see . */ -#include "symbol.h" #include #include +#include +#include "symbol.h" using namespace std; static bool error = false; void verify(bool expectFailMatch, string type, string input, - bool match, string expectStr, string gotStr) -{ + bool match, string expectStr, string gotStr) { match = match && expectStr == gotStr; if (expectFailMatch) { if (match) { @@ -45,11 +45,10 @@ void verify(bool expectFailMatch, string type, string input, } } -int main(int argc, char** argv) -{ +int main(int argc, char** argv) { SymbolString sstr(true); - if (argc>1) { + if (argc > 1) { result_t result = sstr.parseHex(argv[1], true); if (result != RESULT_OK) { cout << "parse escaped error: " << getResultCode(result) << endl; @@ -76,7 +75,7 @@ int main(int argc, char** argv) ostr.str(""); ostr << nouppercase << setw(2) << hex << setfill('0') << static_cast(gotCrc); gotStr = ostr.str(); - verify(false, "CRC", "10feb5050427a915aa", gotCrc==expectCrc, expectStr, gotStr); + verify(false, "CRC", "10feb5050427a915aa", gotCrc == expectCrc, expectStr, gotStr); gotStr = sstr.getDataStr(true, false), expectStr = "10feb5050427a915aa77"; verify(false, "unescape", "10feb5050427a915aa", true, expectStr, gotStr); diff --git a/src/lib/utils/clock.cpp b/src/lib/utils/clock.cpp index 4e31b0a2..61a25889 100644 --- a/src/lib/utils/clock.cpp +++ b/src/lib/utils/clock.cpp @@ -27,8 +27,7 @@ static bool clockInitialized = false; static clock_serv_t clockServ; #endif -void clockGettime(struct timespec* t) -{ +void clockGettime(struct timespec* t) { #ifdef __MACH__ if (!clockInitialized) { clockInitialized = true; diff --git a/src/lib/utils/clock.h b/src/lib/utils/clock.h index b2ef1f42..53fb79aa 100644 --- a/src/lib/utils/clock.h +++ b/src/lib/utils/clock.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_CLOCK_H_ -#define LIBUTILS_CLOCK_H_ +#ifndef LIB_UTILS_CLOCK_H_ +#define LIB_UTILS_CLOCK_H_ #include @@ -29,4 +29,4 @@ */ void clockGettime(struct timespec* t); -#endif // LIBUTILS_CLOCK_H_ +#endif // LIB_UTILS_CLOCK_H_ diff --git a/src/lib/utils/log.cpp b/src/lib/utils/log.cpp index d5ab11f9..edc63e01 100644 --- a/src/lib/utils/log.cpp +++ b/src/lib/utils/log.cpp @@ -57,8 +57,7 @@ static LogLevel s_logLevel = ll_notice; /** the current log FILE. */ static FILE* s_logFile = stdout; -bool setLogFacilities(const char* facilities) -{ +bool setLogFacilities(const char* facilities) { char *input = strdup(facilities); char *opt = (char*)input, *value = NULL; int newFacilites = 0; @@ -80,14 +79,13 @@ bool setLogFacilities(const char* facilities) return true; } -bool getLogFacilities(char* buffer) -{ - if (s_logFacilites==LF_ALL) { +bool getLogFacilities(char* buffer) { + if (s_logFacilites == LF_ALL) { return strcpy(buffer, facilityNames[lf_COUNT]) != NULL; } *buffer = 0; // for strcat to work bool found = false; - for (int val=0; val= level); } -void logWrite(const char* facility, const char* level, const char* message, va_list ap) -{ +void logWrite(const char* facility, const char* level, const char* message, va_list ap) { struct timespec ts; struct tm* tm; clockGettime(&ts); @@ -168,16 +160,14 @@ void logWrite(const char* facility, const char* level, const char* message, va_l } } -void logWrite(const LogFacility facility, const LogLevel level, const char* message, ...) -{ +void logWrite(const LogFacility facility, const LogLevel level, const char* message, ...) { va_list ap; va_start(ap, message); logWrite(facilityNames[facility], levelNames[level], message, ap); va_end(ap); } -void logWrite(const char* facility, const LogLevel level, const char* message, ...) -{ +void logWrite(const char* facility, const LogLevel level, const char* message, ...) { va_list ap; va_start(ap, message); logWrite(facility, levelNames[level], message, ap); diff --git a/src/lib/utils/log.h b/src/lib/utils/log.h index 8cf9159f..6bec2829 100644 --- a/src/lib/utils/log.h +++ b/src/lib/utils/log.h @@ -16,19 +16,19 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_LOG_H_ -#define LIBUTILS_LOG_H_ +#ifndef LIB_UTILS_LOG_H_ +#define LIB_UTILS_LOG_H_ /** \file log.h */ /** the available log facilities. */ enum LogFacility { - lf_main=0, //!< main loop - lf_network, //!< network related - lf_bus, //!< eBUS related - lf_update, //!< updates found while listening to the bus - lf_other, //!< all other log facilities - lf_COUNT=5 //!< number of available log facilities + lf_main = 0, //!< main loop + lf_network, //!< network related + lf_bus, //!< eBUS related + lf_update, //!< updates found while listening to the bus + lf_other, //!< all other log facilities + lf_COUNT = 5 //!< number of available log facilities }; /** macro for enabling all log facilities. */ @@ -36,12 +36,12 @@ enum LogFacility { /** the available log levels. */ enum LogLevel { - ll_none=0, //!< no level at all - ll_error, //!< error message - ll_notice, //!< important message - ll_info, //!< informational message - ll_debug, //!< debugging message (normally suppressed) - ll_COUNT=5 //!< number of available log levels + ll_none = 0, //!< no level at all + ll_error, //!< error message + ll_notice, //!< important message + ll_info, //!< informational message + ll_debug, //!< debugging message (normally suppressed) + ll_COUNT = 5 //!< number of available log levels }; /** @@ -136,4 +136,4 @@ void logWrite(const char* facility, const LogLevel level, const char* message, . /** A macro for a debug message that calls the logging function only if needed. */ #define logOtherDebug(facility, ...) (needsLog(lf_other, ll_debug) ? logWrite(facility, ll_debug, __VA_ARGS__) : void(0)) -#endif // LIBUTILS_LOG_H_ +#endif // LIB_UTILS_LOG_H_ diff --git a/src/lib/utils/notify.h b/src/lib/utils/notify.h index 09f3efd8..93afbae4 100644 --- a/src/lib/utils/notify.h +++ b/src/lib/utils/notify.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_NOTIFY_H_ -#define LIBUTILS_NOTIFY_H_ +#ifndef LIB_UTILS_NOTIFY_H_ +#define LIB_UTILS_NOTIFY_H_ #include #include @@ -73,6 +73,6 @@ private: }; -#endif // LIBUTILS_NOTIFY_H_ +#endif // LIB_UTILS_NOTIFY_H_ diff --git a/src/lib/utils/queue.h b/src/lib/utils/queue.h index d33ed4ed..7556146e 100644 --- a/src/lib/utils/queue.h +++ b/src/lib/utils/queue.h @@ -16,12 +16,12 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_QUEUE_H_ -#define LIBUTILS_QUEUE_H_ +#ifndef LIB_UTILS_QUEUE_H_ +#define LIB_UTILS_QUEUE_H_ -#include #include #include +#include #include "clock.h" /** \file queue.h */ @@ -82,22 +82,23 @@ public: * @param timeout the maximum time in seconds to wait for the queue being filled, or 0 for no wait. * @return the item, or NULL if no item is available within the specified time. */ - T pop(int timeout=0) + T pop(int timeout = 0) { T item; pthread_mutex_lock(&m_mutex); - if (timeout>0) { + if (timeout > 0) { struct timespec t; clockGettime(&t); t.tv_sec += timeout; while (m_queue.empty()) { - if (pthread_cond_timedwait(&m_cond, &m_mutex, &t)==ETIMEDOUT) + if (pthread_cond_timedwait(&m_cond, &m_mutex, &t) == ETIMEDOUT) { break; + } } } - if (m_queue.empty()) + if (m_queue.empty()) { item = NULL; - else { + } else { item = m_queue.front(); m_queue.pop_front(); } @@ -111,7 +112,7 @@ public: * @param wait true to wait for the item to appear in the queue. * @return whether the item was removed. */ - bool remove(T item, bool wait=false) + bool remove(T item, bool wait = false) { bool ret = false; pthread_mutex_lock(&m_mutex); @@ -138,10 +139,11 @@ public: { T item; pthread_mutex_lock(&m_mutex); - if (m_queue.empty()) + if (m_queue.empty()) { item = NULL; - else + } else { item = m_queue.front(); + } pthread_mutex_unlock(&m_mutex); return item; } @@ -158,4 +160,4 @@ private: }; -#endif // LIBUTILS_QUEUE_H_ +#endif // LIB_UTILS_QUEUE_H_ diff --git a/src/lib/utils/rotatefile.cpp b/src/lib/utils/rotatefile.cpp index fd2272c6..7e74f8b6 100644 --- a/src/lib/utils/rotatefile.cpp +++ b/src/lib/utils/rotatefile.cpp @@ -17,28 +17,27 @@ */ #include "rotatefile.h" -#include "clock.h" -#include -#include -#include -#include #include #include +#include #include +#include +#include +#include +#include +#include "clock.h" using namespace std; -RotateFile::~RotateFile() -{ +RotateFile::~RotateFile() { if (m_stream) { fclose(m_stream); m_stream = NULL; } } -bool RotateFile::setEnabled(bool enabled) -{ - if (enabled==m_enabled) { +bool RotateFile::setEnabled(bool enabled) { + if (enabled == m_enabled) { return false; } m_enabled = enabled; @@ -53,8 +52,7 @@ bool RotateFile::setEnabled(bool enabled) return true; } -void RotateFile::write(unsigned char* value, unsigned int size, bool received) -{ +void RotateFile::write(unsigned char* value, unsigned int size, bool received) { if (!m_enabled || !m_stream) { return; } @@ -68,7 +66,7 @@ void RotateFile::write(unsigned char* value, unsigned int size, bool received) tm->tm_hour, tm->tm_min, tm->tm_sec, ts.tv_nsec/1000000, received ? '<' : '>' ); - for (unsigned int pos=0; pos. */ -#ifndef LIBUTILS_ROTATEFILE_H_ -#define LIBUTILS_ROTATEFILE_H_ +#ifndef LIB_UTILS_ROTATEFILE_H_ +#define LIB_UTILS_ROTATEFILE_H_ #include #include #include +#include /** @file rotatefile.h * Helpers for writing to rotating files. @@ -41,7 +42,7 @@ public: * @param maxSize the maximum size of the file to write to. * @param textMode whether to write each byte with prefixed timestamp and direction as text. */ - RotateFile(const string fileName, const unsigned long maxSize, const bool textMode=false) + RotateFile(const string fileName, const unsigned long maxSize, const bool textMode = false) : m_enabled(false), m_fileName(fileName), m_maxSize(maxSize), m_textMode(textMode), m_stream(), m_fileSize(0) {} /** @@ -54,7 +55,7 @@ public: * @param enabled @p true to enable writing to the file, @p false to disable it. * @return @p true when the state was changed, @p false otherwise. */ - bool setEnabled(bool enabled=true); + bool setEnabled(bool enabled = true); /** * Return whether writing to the file is enabled. @@ -68,7 +69,7 @@ public: * @param size the number of bytes to write. * @param received @a true on reception, @a false on sending (only relevant in text mode). */ - void write(unsigned char* value, unsigned int size, bool received=true); + void write(unsigned char* value, unsigned int size, bool received = true); private: /** whether writing to the file is enabled. */ @@ -91,5 +92,5 @@ private: }; -#endif // LIBUTILS_ROTATEFILE_H_ +#endif // LIB_UTILS_ROTATEFILE_H_ diff --git a/src/lib/utils/tcpsocket.cpp b/src/lib/utils/tcpsocket.cpp index 2e386c53..c8f2d321 100644 --- a/src/lib/utils/tcpsocket.cpp +++ b/src/lib/utils/tcpsocket.cpp @@ -17,30 +17,27 @@ */ #include "tcpsocket.h" -#include #include #include #include #include +#include using namespace std; -TCPSocket::TCPSocket(int sfd, struct sockaddr_in* address) : m_sfd(sfd) -{ +TCPSocket::TCPSocket(int sfd, struct sockaddr_in* address) : m_sfd(sfd) { char ip[17]; inet_ntop(AF_INET, (struct in_addr*)&(address->sin_addr.s_addr), ip, (socklen_t)sizeof(ip)-1); m_ip = ip; m_port = (uint16_t)ntohs(address->sin_port); } -bool TCPSocket::isValid() -{ +bool TCPSocket::isValid() { return fcntl(m_sfd, F_GETFL) != -1; } -TCPSocket* TCPClient::connect(const string& server, const uint16_t& port) -{ +TCPSocket* TCPClient::connect(const string& server, const uint16_t& port) { struct sockaddr_in address; int ret; @@ -76,8 +73,7 @@ TCPSocket* TCPClient::connect(const string& server, const uint16_t& port) } -int TCPServer::start() -{ +int TCPServer::start() { if (m_listening) { return 0; } @@ -109,8 +105,7 @@ int TCPServer::start() return result; } -TCPSocket* TCPServer::newSocket() -{ +TCPSocket* TCPServer::newSocket() { if (!m_listening) { return NULL; } diff --git a/src/lib/utils/tcpsocket.h b/src/lib/utils/tcpsocket.h index 601a86b1..4ef54f87 100644 --- a/src/lib/utils/tcpsocket.h +++ b/src/lib/utils/tcpsocket.h @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_TCPSOCKET_H_ -#define LIBUTILS_TCPSOCKET_H_ +#ifndef LIB_UTILS_TCPSOCKET_H_ +#define LIB_UTILS_TCPSOCKET_H_ #include #include -#include #include +#include /** \file tcpsocket.h */ @@ -181,5 +181,5 @@ private: }; -#endif // LIBUTILS_TCPSOCKET_H_ +#endif // LIB_UTILS_TCPSOCKET_H_ diff --git a/src/lib/utils/thread.cpp b/src/lib/utils/thread.cpp index 3fd12a73..90dd6cbf 100644 --- a/src/lib/utils/thread.cpp +++ b/src/lib/utils/thread.cpp @@ -23,22 +23,19 @@ #include "thread.h" #include "clock.h" -void* Thread::runThread(void* arg) -{ +void* Thread::runThread(void* arg) { ((Thread*)arg)->enter(); return NULL; } -Thread::~Thread() -{ +Thread::~Thread() { if (m_started) { pthread_cancel(m_threadid); pthread_detach(m_threadid); } } -bool Thread::start(const char* name) -{ +bool Thread::start(const char* name) { int result = pthread_create(&m_threadid, NULL, runThread, this); @@ -58,8 +55,7 @@ bool Thread::start(const char* name) return false; } -bool Thread::join() -{ +bool Thread::join() { int result = -1; if (m_started) { @@ -82,36 +78,31 @@ void Thread::enter() { WaitThread::WaitThread() - : Thread() -{ + : Thread() { pthread_mutex_init(&m_mutex, NULL); pthread_cond_init(&m_cond, NULL); } -WaitThread::~WaitThread() -{ +WaitThread::~WaitThread() { pthread_mutex_destroy(&m_mutex); pthread_cond_destroy(&m_cond); } -void WaitThread::stop() -{ +void WaitThread::stop() { pthread_mutex_lock(&m_mutex); pthread_cond_signal(&m_cond); pthread_mutex_unlock(&m_mutex); Thread::stop(); } -bool WaitThread::join() -{ +bool WaitThread::join() { pthread_mutex_lock(&m_mutex); pthread_cond_signal(&m_cond); pthread_mutex_unlock(&m_mutex); return Thread::join(); } -bool WaitThread::Wait(int seconds) -{ +bool WaitThread::Wait(int seconds) { struct timespec t; clockGettime(&t); t.tv_sec += seconds; diff --git a/src/lib/utils/thread.h b/src/lib/utils/thread.h index 6a6c3a79..405e3140 100644 --- a/src/lib/utils/thread.h +++ b/src/lib/utils/thread.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef LIBUTILS_THREAD_H_ -#define LIBUTILS_THREAD_H_ +#ifndef LIB_UTILS_THREAD_H_ +#define LIB_UTILS_THREAD_H_ #include @@ -145,4 +145,4 @@ private: }; -#endif // LIBUTILS_THREAD_H_ +#endif // LIB_UTILS_THREAD_H_ diff --git a/src/tools/ebusctl.cpp b/src/tools/ebusctl.cpp index 368a397d..1897bcb0 100644 --- a/src/tools/ebusctl.cpp +++ b/src/tools/ebusctl.cpp @@ -21,16 +21,17 @@ #endif #include -#include "tcpsocket.h" #include +#ifdef HAVE_PPOLL +# include +#endif #include #include #include #include +#include +#include "tcpsocket.h" -#ifdef HAVE_PPOLL -# include -#endif using namespace std; @@ -84,8 +85,7 @@ static const struct argp_option argpoptions[] = { * @param arg the option argument, or NULL. * @param state the parsing state. */ -error_t parse_opt(int key, char *arg, struct argp_state *state) -{ +error_t parse_opt(int key, char *arg, struct argp_state *state) { struct options *opt = (struct options*)state->input; char* strEnd = NULL; unsigned int port; @@ -116,8 +116,7 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) return 0; } -string fetchData(TCPSocket* socket, bool& listening) -{ +string fetchData(TCPSocket* socket, bool& listening) { char data[1024]; ssize_t datalen; ostringstream ostream; @@ -150,13 +149,13 @@ string fetchData(TCPSocket* socket, bool& listening) FD_SET(STDIN_FILENO, &checkfds); FD_SET(socket->getFD(), &checkfds); maxfd = STDIN_FILENO; - if (socket->getFD()>maxfd) + if (socket->getFD() > maxfd) { maxfd = socket->getFD(); + } #endif #endif while(true) { - #ifdef HAVE_PPOLL // wait for new fd event ret = ppoll(fds, nfds, &tdiff, NULL); @@ -198,19 +197,20 @@ string fetchData(TCPSocket* socket, bool& listening) break; } - for (int i = 0; i < datalen; i++) + for (int i = 0; i < datalen; i++) { ostream << data[i]; - + } string str = ostream.str(); - if (listening) + if (listening) { return str; - if (str.length() >= 2 && str[str.length()-2] == '\n' && str[str.length()-1] == '\n') + } + if (str.length() >= 2 && str[str.length()-2] == '\n' && str[str.length()-1] == '\n') { return str; - } - else + } + } else { break; - } - else if (newInput) { + } + } else if (newInput) { getline(cin, message); sendmessage = message+'\n'; socket->send(sendmessage.c_str(), sendmessage.size()); @@ -221,7 +221,6 @@ string fetchData(TCPSocket* socket, bool& listening) exit(EXIT_SUCCESS); return ""; } - message.clear(); } } @@ -229,8 +228,7 @@ string fetchData(TCPSocket* socket, bool& listening) return ostream.str(); } -void connect(const char* host, uint16_t port, char* const *args, int argCount) -{ +void connect(const char* host, uint16_t port, char* const *args, int argCount) { TCPClient* client = new TCPClient(); TCPSocket* socket = client->connect(host, port); @@ -247,14 +245,17 @@ void connect(const char* host, uint16_t port, char* const *args, int argCount) } else { for (int i = 0; i < argCount; i++) { - if (i > 0) + if (i > 0) { message += " "; + } bool quote = strchr(args[i], ' ') != NULL && strchr(args[i], '"') == NULL; - if (quote) + if (quote) { message += "\""; + } message += args[i]; - if (quote) + if (quote) { message += "\""; + } } } @@ -273,32 +274,28 @@ void connect(const char* host, uint16_t port, char* const *args, int argCount) while (listening && !cin.eof()) { string result(fetchData(socket, listening)); cout << result; - if (strcasecmp(result.c_str(), "LISTEN STOPPED") == 0) + if (strcasecmp(result.c_str(), "LISTEN STOPPED") == 0) { break; + } } - } - else + } else { cout << fetchData(socket, listening); + } } - } while (!once && !cin.eof()); - delete socket; - - } - else + } else { cout << "error connecting to " << host << ":" << port << endl; - + } delete client; } -int main(int argc, char* argv[]) -{ +int main(int argc, char* argv[]) { struct argp argp = { argpoptions, parse_opt, argpargsdoc, argpdoc, NULL, NULL, NULL }; setenv("ARGP_HELP_FMT", "no-dup-args-note", 0); - if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, NULL, &opt) != 0) + if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, NULL, &opt) != 0) { return EINVAL; - + } connect(opt.server, opt.port, opt.args, opt.argCount); exit(EXIT_SUCCESS); diff --git a/src/tools/ebusfeed.cpp b/src/tools/ebusfeed.cpp index 2090b91c..59b802f9 100644 --- a/src/tools/ebusfeed.cpp +++ b/src/tools/ebusfeed.cpp @@ -21,13 +21,13 @@ #endif #include -#include "device.h" #include -#include #include +#include #include #include #include +#include "device.h" using namespace std; @@ -85,8 +85,7 @@ static const struct argp_option argpoptions[] = { * @param arg the option argument, or NULL. * @param state the parsing state. */ -error_t parse_opt(int key, char *arg, struct argp_state *state) -{ +error_t parse_opt(int key, char *arg, struct argp_state *state) { struct options *opt = (struct options*)state->input; char* strEnd = NULL; switch (key) { @@ -122,50 +121,44 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) } -int main(int argc, char* argv[]) -{ +int main(int argc, char* argv[]) { struct argp argp = { argpoptions, parse_opt, argpargsdoc, argpdoc, NULL, NULL, NULL }; setenv("ARGP_HELP_FMT", "no-dup-args-note", 0); - if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, NULL, &opt) != 0) + if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, NULL, &opt) != 0) { return EINVAL; - + } Device* device = Device::create(opt.device, false, false, NULL); if (device == NULL) { cout << "unable to create device " << opt.device << endl; return EINVAL; } result_t result = device->open(); - if (result != RESULT_OK) + if (result != RESULT_OK) { cout << "unable to open " << opt.device << ": " << getResultCode(result) << endl; - - if (!device->isValid()) + } + if (!device->isValid()) { cout << "device " << opt.device << " not available" << endl; - else { + } else { cout << "device opened" << endl; - fstream file(opt.dumpFile, ios::in | ios::binary); - if (file.is_open()) { - while (true) { unsigned char byte = (unsigned char)file.get(); - if (file.eof()) + if (file.eof()) { break; + } cout << hex << setw(2) << setfill('0') << static_cast(byte) << endl; - device->send(byte); usleep(opt.time); } - file.close(); - } - else + } else { cout << "error opening file " << opt.dumpFile << endl; + } } delete device; - exit(EXIT_SUCCESS); }