From bb79aa94628257850ef9cc208c4a78af5ff6a4b1 Mon Sep 17 00:00:00 2001 From: john30 Date: Mon, 20 Oct 2014 21:46:53 +0200 Subject: [PATCH 1/4] adjusted to libebus udpates, start using SymbolString --- src/baseloop.cpp | 6 +++--- src/ebusloop.cpp | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) mode change 100644 => 100755 src/baseloop.cpp mode change 100644 => 100755 src/ebusloop.cpp diff --git a/src/baseloop.cpp b/src/baseloop.cpp old mode 100644 new mode 100755 index 26c13a02..8ec416c2 --- a/src/baseloop.cpp +++ b/src/baseloop.cpp @@ -159,7 +159,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) if (!busCommand->isErrorResult()) { // decode data - Command* command = new Command(index, (*m_commands)[index], busCommand->getResult()); + Command* command = new Command(index, (*m_commands)[index], busCommand->getResultStr()); // TODO use getResult() // return result result << command->calcResult(cmd); @@ -214,7 +214,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) // decode result if (busCommand->getType()==broadcast) result << "done"; - else if (busCommand->getResult().substr(busCommand->getResult().length()-8) == "00000000") + else if (busCommand->getResultStr().substr(busCommand->getResultStr().length()-8) == "00000000") // TODO use getResult() result << "done"; else result << "error"; @@ -286,7 +286,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) L.log(bas, error, " %s", busCommand->getResultCodeCStr()); result << busCommand->getResultCodeCStr(); } else { - result << busCommand->getResult(); + result << busCommand->getResultStr(); // TODO use getResult() } delete busCommand; diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp old mode 100644 new mode 100755 index df14d78b..0c8ac33b --- a/src/ebusloop.cpp +++ b/src/ebusloop.cpp @@ -80,15 +80,15 @@ void* EBusLoop::run() // new cyc message arrived if (busResult == RESULT_SYN || busResult == RESULT_BUS_LOCKED) { - std::string data = m_bus->getCycData(); + SymbolString data = m_bus->getCycData(); if (data.size() == 0 && m_logAutoSyn == true) - L.log(bus, trace, "%s", "aa"); + L.log(bus, trace, "aa"); if (data.size() != 0) { - L.log(bus, trace, "%s", data.c_str()); + L.log(bus, trace, "%s", data.getDataStr().c_str()); - int index = m_commands->storeCycData(data); + int index = m_commands->storeCycData(data.getDataStr()); if (index == -1) { L.log(bus, debug, " command not found"); @@ -116,7 +116,7 @@ void* EBusLoop::run() if (busResult == RESULT_SYN && busCommandActive == false && m_sendBuffer.size() != 0) { BusCommand* busCommand = m_sendBuffer.remove(); L.log(bus, debug, " type: %s msg: %s", - busCommand->getTypeCStr(), busCommand->getCommand().c_str()); + busCommand->getTypeCStr(), busCommand->getCommandStr().c_str()); m_bus->addCommand(busCommand); L.log(bus, debug, " addCommand success"); busCommandActive = true; @@ -168,7 +168,7 @@ void* EBusLoop::run() lookbusretries = 0; m_bus->sendCommand(); BusCommand* busCommand = m_bus->recvCommand(); - L.log(bus, trace, " %s", busCommand->getResult().c_str()); + L.log(bus, trace, " %s", busCommand->getResultStr().c_str()); if (busCommand->isErrorResult() && retries < m_retries) { retries++; @@ -180,7 +180,7 @@ void* EBusLoop::run() if (pollCommandActive == true) { // only save correct results if (!busCommand->isErrorResult()) - m_commands->storePolData(busCommand->getResult().c_str()); + m_commands->storePolData(busCommand->getResultStr().c_str()); // TODO use getResult() delete busCommand; pollCommandActive = false; From b47d3f5f3bdc237dd82863255b8a1b7001fe44f5 Mon Sep 17 00:00:00 2001 From: john30 Date: Tue, 21 Oct 2014 08:59:41 +0200 Subject: [PATCH 2/4] file modes --- src/baseloop.cpp | 0 src/ebusloop.cpp | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/baseloop.cpp mode change 100755 => 100644 src/ebusloop.cpp diff --git a/src/baseloop.cpp b/src/baseloop.cpp old mode 100755 new mode 100644 diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp old mode 100755 new mode 100644 From dcbe8e61572dea676573fe509cbde7dc48a7955b Mon Sep 17 00:00:00 2001 From: john30 Date: Tue, 21 Oct 2014 09:23:38 +0200 Subject: [PATCH 3/4] removed BusCommand::getCommandStr() and getResultStr() --- src/baseloop.cpp | 6 +++--- src/ebusloop.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/baseloop.cpp b/src/baseloop.cpp index c6c210a7..22c312e4 100644 --- a/src/baseloop.cpp +++ b/src/baseloop.cpp @@ -159,7 +159,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) if (!busCommand->isErrorResult()) { // decode data - Command* command = new Command(index, (*m_commands)[index], busCommand->getResultStr()); // TODO use getResult() + Command* command = new Command(index, (*m_commands)[index], busCommand->getMessageStr()); // TODO use getCommand()+getResult() // return result result << command->calcResult(cmd); @@ -214,7 +214,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) // decode result if (busCommand->getType()==broadcast) result << "done"; - else if (busCommand->getResultStr().substr(busCommand->getResultStr().length()-8) == "00000000") // TODO use getResult() + else if (busCommand->getMessageStr().substr(busCommand->getMessageStr().length()-8) == "00000000") // TODO use getResult() result << "done"; else result << "error"; @@ -283,7 +283,7 @@ std::string BaseLoop::decodeMessage(const std::string& data) L.log(bas, error, " %s", busCommand->getResultCodeCStr()); result << busCommand->getResultCodeCStr(); } else { - result << busCommand->getResultStr(); // TODO use getResult() + result << busCommand->getMessageStr(); // TODO use getCommand()+getResult() } delete busCommand; diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp index a4b4c6b3..e3466291 100644 --- a/src/ebusloop.cpp +++ b/src/ebusloop.cpp @@ -115,7 +115,7 @@ void* EBusLoop::run() // add new bus command to send if (busResult == RESULT_SYN && busCommandActive == false && m_sendBuffer.size() != 0) { BusCommand* busCommand = m_sendBuffer.remove(); - L.log(bus, debug, " msg: %s", busCommand->getCommandStr().c_str()); + L.log(bus, debug, " msg: %s", busCommand->getCommand().getDataStr(true).c_str()); m_bus->addCommand(busCommand); L.log(bus, debug, " addCommand success"); busCommandActive = true; @@ -167,7 +167,7 @@ void* EBusLoop::run() lookbusretries = 0; m_bus->sendCommand(); BusCommand* busCommand = m_bus->recvCommand(); - L.log(bus, trace, " %s", busCommand->getResultStr().c_str()); + L.log(bus, trace, " %s", busCommand->getMessageStr().c_str()); if (busCommand->isErrorResult() == true && retries < m_retries) { retries++; @@ -179,7 +179,7 @@ void* EBusLoop::run() if (pollCommandActive == true) { // only save correct results if (busCommand->isErrorResult() == false) - m_commands->storePolData(busCommand->getResultStr().c_str()); // TODO use getResult() + m_commands->storePolData(busCommand->getMessageStr().c_str()); // TODO use getResult() delete busCommand; pollCommandActive = false; From 897c70c3a89800f48d2a61185b074f17fa6ef2a0 Mon Sep 17 00:00:00 2001 From: john30 Date: Thu, 23 Oct 2014 22:18:11 +0200 Subject: [PATCH 4/4] notify BusCommand of finished result instead of having two queues in Bus, added isPoll to BusCommand to avoid missing/unallowed deletion of poll/non-poll commands, also return BusCommand in Bus::delCommand() for cleanup --- src/baseloop.cpp | 12 ++++++------ src/ebusloop.cpp | 16 ++++++++++------ src/ebusloop.h | 2 -- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/baseloop.cpp b/src/baseloop.cpp index 22c312e4..f0042543 100644 --- a/src/baseloop.cpp +++ b/src/baseloop.cpp @@ -151,11 +151,11 @@ std::string BaseLoop::decodeMessage(const std::string& data) ebusCommand += m_commands->getEbusCommand(index); std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower); - BusCommand* busCommand = new BusCommand(ebusCommand); + BusCommand* busCommand = new BusCommand(ebusCommand, false); L.log(bas, trace, " msg: %s", ebusCommand.c_str()); // send busCommand m_ebusloop->addBusCommand(busCommand); - busCommand = m_ebusloop->getBusCommand(); + busCommand->waitSignal(); if (!busCommand->isErrorResult()) { // decode data @@ -204,11 +204,11 @@ std::string BaseLoop::decodeMessage(const std::string& data) std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower); - BusCommand* busCommand = new BusCommand(ebusCommand); + BusCommand* busCommand = new BusCommand(ebusCommand, false); L.log(bas, event, " msg: %s", ebusCommand.c_str()); // send busCommand m_ebusloop->addBusCommand(busCommand); - busCommand = m_ebusloop->getBusCommand(); + busCommand->waitSignal(); if (!busCommand->isErrorResult()) { // decode result @@ -273,11 +273,11 @@ std::string BaseLoop::decodeMessage(const std::string& data) ebusCommand += cmd[1]; std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower); - BusCommand* busCommand = new BusCommand(ebusCommand); + BusCommand* busCommand = new BusCommand(ebusCommand, false); L.log(bas, trace, " msg: %s", ebusCommand.c_str()); // send busCommand m_ebusloop->addBusCommand(busCommand); - busCommand = m_ebusloop->getBusCommand(); + busCommand->waitSignal(); if (busCommand->isErrorResult()) { L.log(bas, error, " %s", busCommand->getResultCodeCStr()); diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp index e3466291..836aa7c2 100644 --- a/src/ebusloop.cpp +++ b/src/ebusloop.cpp @@ -148,7 +148,7 @@ void* EBusLoop::run() ebusCommand += m_commands->getEbusCommand(index); std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower); - BusCommand* busCommand = new BusCommand(ebusCommand); + BusCommand* busCommand = new BusCommand(ebusCommand, true); L.log(bus, trace, " msg: %s", ebusCommand.c_str()); m_bus->addCommand(busCommand); @@ -165,8 +165,7 @@ void* EBusLoop::run() if (busResult == RESULT_BUS_ACQUIRED && busCommandActive == true) { L.log(bus, trace, " getBus success"); lookbusretries = 0; - m_bus->sendCommand(); - BusCommand* busCommand = m_bus->recvCommand(); + BusCommand* busCommand = m_bus->sendCommand(); L.log(bus, trace, " %s", busCommand->getMessageStr().c_str()); if (busCommand->isErrorResult() == true && retries < m_retries) { @@ -176,7 +175,7 @@ void* EBusLoop::run() m_bus->addCommand(busCommand); } else { retries = 0; - if (pollCommandActive == true) { + if (busCommand->isPoll() == true) { // only save correct results if (busCommand->isErrorResult() == false) m_commands->storePolData(busCommand->getMessageStr().c_str()); // TODO use getResult() @@ -184,7 +183,7 @@ void* EBusLoop::run() delete busCommand; pollCommandActive = false; } else { - m_recvBuffer.add(busCommand); + busCommand->sendSignal(); } busCommandActive = false; @@ -199,7 +198,12 @@ void* EBusLoop::run() L.log(bus, trace, " getBus failure"); if (lookbusretries >= m_lookbusretries) { L.log(bus, event, " getBus failed - command deleted"); - m_bus->delCommand(); + BusCommand* busCommand = m_bus->delCommand(); + if (busCommand->isPoll() == true) { + delete busCommand; + } else { + busCommand->sendSignal(); + } lookbusretries = 0; busCommandActive = false; pollCommandActive = false; diff --git a/src/ebusloop.h b/src/ebusloop.h index 99801458..d65c4b27 100644 --- a/src/ebusloop.h +++ b/src/ebusloop.h @@ -38,7 +38,6 @@ public: void stop() { m_stop = true; } void addBusCommand(BusCommand* busCommand) { m_sendBuffer.add(busCommand); } - BusCommand* getBusCommand() { return m_recvBuffer.remove(); } void dump(const bool dumpState) { m_bus->setDumpState(dumpState); } @@ -50,7 +49,6 @@ private: Bus* m_bus; bool m_stop; WQueue m_sendBuffer; - WQueue m_recvBuffer; int m_retries; int m_lookbusretries; double m_pollInterval;