diff --git a/src/ebusloop.cpp b/src/ebusloop.cpp index 079c22c7..224425a7 100644 --- a/src/ebusloop.cpp +++ b/src/ebusloop.cpp @@ -35,6 +35,8 @@ EBusLoop::EBusLoop() : m_stop(false) A.getParam("p_dumpsize"), A.getParam("p_dump")); + m_retries = A.getParam("p_retries"); + m_bus->connect(); if (m_bus->isConnected() == false) @@ -54,6 +56,7 @@ EBusLoop::~EBusLoop() void* EBusLoop::run() { int busResult; + int retries = 0; bool busCommandActive = false; for (;;) { @@ -85,8 +88,17 @@ void* EBusLoop::run() m_bus->sendCommand(); BusCommand* busCommand = m_bus->recvCommand(); L.log(bus, trace, " %s", busCommand->getResult().c_str()); - m_recvBuffer.add(busCommand); - busCommandActive = false; + + if (busCommand->getResult().c_str()[0] == '-' && retries < m_retries) { + retries++; + L.log(bus, trace, " retry number: %d", retries); + busCommand->setResult(std::string()); + m_bus->addCommand(busCommand); + } else { + retries = 0; + m_recvBuffer.add(busCommand); + busCommandActive = false; + } } if (busResult == 0) diff --git a/src/ebusloop.h b/src/ebusloop.h index 53b9fd5c..8212b995 100644 --- a/src/ebusloop.h +++ b/src/ebusloop.h @@ -51,6 +51,7 @@ private: bool m_stop; WQueue m_sendBuffer; WQueue m_recvBuffer; + int m_retries; }; diff --git a/src/main.cpp b/src/main.cpp index 807ea4d1..241e1ba7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,6 +60,10 @@ void define_args() "disable valid ebus device test\n", Appl::type_bool, Appl::opt_none); + A.addItem("p_retries", Appl::Param(2), "r", "retries", + "\tnumber retries send ebus command (default: 2)\n", + Appl::type_int, Appl::opt_mandatory); + A.addItem("p_ebusconfdir", Appl::Param("/etc/ebus-daemon"), "e", "ebusconfdir", "directory for ebus configuration (default: /etc/ebus-daemon)\n", Appl::type_string, Appl::opt_mandatory);