From e770f9403875ec809a16781d29dbe79ca98ac340 Mon Sep 17 00:00:00 2001 From: Roland Jax Date: Tue, 7 Oct 2014 22:15:56 +0200 Subject: [PATCH] class EBusLoop: basics for command polling added. --- lib/logger.cpp | 2 +- src/baseloop.cpp | 13 ++++++------- src/ebusloop.cpp | 26 ++++++++++++++++++++++++++ src/ebusloop.h | 1 + 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/logger.cpp b/lib/logger.cpp index 9319b1a5..11b8ac16 100644 --- a/lib/logger.cpp +++ b/lib/logger.cpp @@ -28,7 +28,7 @@ #include #include -static const char* AreaNames[Size_of_Areas] = { "bas", "net", "bus", }; +static const char* AreaNames[Size_of_Areas] = { "bas", "net", "bus" }; static const char* LevelNames[Size_of_Level] = { "error", "event", "trace", "debug" }; int calcAreas(const std::string areas) diff --git a/src/baseloop.cpp b/src/baseloop.cpp index 80888ac9..a4864e75 100644 --- a/src/baseloop.cpp +++ b/src/baseloop.cpp @@ -325,15 +325,14 @@ std::string BaseLoop::decodeMessage(const std::string& data) } if (strcasecmp(cmd[1].c_str(), "reload") == 0) { + // create Commands DB + Commands* commands = ConfigCommands(A.getParam("p_ebusconfdir"), CSV).getCommands(); + L.log(bas, debug, "ebus configuration dir: %s", A.getParam("p_ebusconfdir")); + L.log(bas, event, "commands DB with %d entries created", commands->sizeCmd()); + L.log(bas, event, " data DB with %d entries created", commands->sizeData()); delete m_commands; - - // create Commands DB - m_commands = ConfigCommands(A.getParam("p_ebusconfdir"), CSV).getCommands(); - L.log(bas, debug, "ebus configuration dir: %s", A.getParam("p_ebusconfdir")); - L.log(bas, event, "commands DB with %d entries created", m_commands->sizeCmd()); - L.log(bas, event, " data DB with %d entries created", m_commands->sizeData()); - + m_commands = commands; m_ebusloop->newCommands(m_commands); result << "done"; diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp index 3698daf7..298fdc9a 100644 --- a/src/ebusloop.cpp +++ b/src/ebusloop.cpp @@ -37,6 +37,8 @@ EBusLoop::EBusLoop(Commands* commands) : m_commands(commands), m_stop(false) m_retries = A.getParam("p_retries"); + m_pollInterval = 5.0; + m_bus->connect(); if (m_bus->isConnected() == false) @@ -58,6 +60,9 @@ void* EBusLoop::run() int busResult; int retries = 0; bool busCommandActive = false; + time_t start, end; + time(&start); + double pollDelta = 0.0; for (;;) { if (m_bus->isConnected() == true) { @@ -103,6 +108,26 @@ void* EBusLoop::run() busCommandActive = true; } + // check polling delta + time(&end); + pollDelta = difftime(end, start); + + // add new polling command to send + if (busResult == 4 && busCommandActive == false && pollDelta >= m_pollInterval) { + L.log(bus, trace, "%.f seconds elapsed - polling next value", pollDelta); + + //~ BusCommand* busCommand = m_sendBuffer.remove(); + // fetch new polling command + + //~ L.log(bus, debug, " type: %s msg: %s", + //~ busCommand->getType().c_str(), busCommand->getCommand().c_str()); + //~ m_bus->addCommand(busCommand); + //~ L.log(bus, debug, " addCommand success"); + //~ busCommandActive = true; + + time(&start); + } + // send bus command if (busResult == 1 && busCommandActive == true) { L.log(bus, trace, " getBus success"); @@ -117,6 +142,7 @@ void* EBusLoop::run() m_bus->addCommand(busCommand); } else { retries = 0; + // ToDo: check for poll event m_recvBuffer.add(busCommand); busCommandActive = false; } diff --git a/src/ebusloop.h b/src/ebusloop.h index fcc1980b..4fb4e751 100644 --- a/src/ebusloop.h +++ b/src/ebusloop.h @@ -52,6 +52,7 @@ private: WQueue m_sendBuffer; WQueue m_recvBuffer; int m_retries; + double m_pollInterval; };