class EBusLoop: basics for command polling added.
This commit is contained in:
+1
-1
@@ -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
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ private:
|
||||
WQueue<BusCommand*> m_sendBuffer;
|
||||
WQueue<BusCommand*> m_recvBuffer;
|
||||
int m_retries;
|
||||
double m_pollInterval;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user