avoid polling if message is up-to-date within interval

This commit is contained in:
John
2022-02-12 11:25:15 +01:00
parent f7c0a63a90
commit 0aeb0a4aaf
+3
View File
@@ -482,6 +482,8 @@ result_t BusHandler::handleSymbol() {
Message* message = m_messages->getNextPoll(); Message* message = m_messages->getNextPoll();
if (message != nullptr) { if (message != nullptr) {
m_lastPoll = now; m_lastPoll = now;
if (difftime(now, message->getLastUpdateTime()) > m_pollInterval) {
// only poll this message if it was not updated already by other means within the interval
auto request = new PollRequest(message); auto request = new PollRequest(message);
result_t ret = request->prepare(m_ownMasterAddress); result_t ret = request->prepare(m_ownMasterAddress);
if (ret != RESULT_OK) { if (ret != RESULT_OK) {
@@ -494,6 +496,7 @@ result_t BusHandler::handleSymbol() {
} }
} }
} }
}
if (startRequest != nullptr) { // initiate arbitration if (startRequest != nullptr) { // initiate arbitration
logDebug(lf_bus, "start request %2.2x", startRequest->m_master[0]); logDebug(lf_bus, "start request %2.2x", startRequest->m_master[0]);
result_t ret = m_device->startArbitration(startRequest->m_master[0]); result_t ret = m_device->startArbitration(startRequest->m_master[0]);