diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp index f9782679..8ac1ee3e 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_lookbusretries = A.getParam("p_lookbusretries"); + m_pollInterval = A.getParam("p_pollinterval"); m_bus->connect(); @@ -59,6 +61,7 @@ void* EBusLoop::run() { int busResult; int retries = 0; + int lookbusretries = 0; bool busCommandActive = false; time_t start, end; time(&start); @@ -151,6 +154,7 @@ void* EBusLoop::run() // send bus command if (busResult == 1 && busCommandActive == true) { L.log(bus, trace, " getBus success"); + lookbusretries = 0; m_bus->sendCommand(); BusCommand* busCommand = m_bus->recvCommand(); L.log(bus, trace, " %s", busCommand->getResult().c_str()); @@ -174,8 +178,16 @@ void* EBusLoop::run() } } - if (busResult == 0) + if (busResult == 0) { L.log(bus, trace, " getBus failure"); + if (lookbusretries >= m_lookbusretries) { + L.log(bus, event, " getBus failed - command deleted"); + m_bus->delCommand(); + lookbusretries = 0; + }else { + lookbusretries++; + } + } if (busResult == -1) L.log(bus, event, " getBus error"); diff --git a/src/ebusloop.h b/src/ebusloop.h index 4fb4e751..b67c5990 100644 --- a/src/ebusloop.h +++ b/src/ebusloop.h @@ -52,6 +52,7 @@ private: WQueue m_sendBuffer; WQueue m_recvBuffer; int m_retries; + int m_lookbusretries; double m_pollInterval; }; diff --git a/src/main.cpp b/src/main.cpp index ca2bbffb..8c33585f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,6 +52,10 @@ void define_args() "\tnumber retries send ebus command (2)", Appl::type_int, Appl::opt_mandatory); + A.addItem("p_lookbusretries", Appl::Param(5), "", "lookbusretries", + "number retries to look ebus (5)", + Appl::type_int, Appl::opt_mandatory); + A.addItem("p_recvtimeout", Appl::Param(15000), "", "recvtimeout", "receive timeout in 'us' (15000)\n", Appl::type_long, Appl::opt_mandatory);