class EBusLoop: basics for command polling added.

This commit is contained in:
Roland Jax
2014-10-07 22:15:56 +02:00
parent 1f15ebd0ee
commit e770f94038
4 changed files with 34 additions and 8 deletions
+1 -1
View File
@@ -28,7 +28,7 @@
#include <sys/time.h>
#include <unistd.h>
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)
+6 -7
View File
@@ -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<const char*>("p_ebusconfdir"), CSV).getCommands();
L.log(bas, debug, "ebus configuration dir: %s", A.getParam<const char*>("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<const char*>("p_ebusconfdir"), CSV).getCommands();
L.log(bas, debug, "ebus configuration dir: %s", A.getParam<const char*>("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";
+26
View File
@@ -37,6 +37,8 @@ EBusLoop::EBusLoop(Commands* commands) : m_commands(commands), m_stop(false)
m_retries = A.getParam<int>("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;
}
+1
View File
@@ -52,6 +52,7 @@ private:
WQueue<BusCommand*> m_sendBuffer;
WQueue<BusCommand*> m_recvBuffer;
int m_retries;
double m_pollInterval;
};