From 4172c7d6a132a311984a2cf7a26a2a47910d8d48 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 13 Mar 2022 18:01:21 +0100 Subject: [PATCH] add arbitration state timeout --- src/ebusd/bushandler.cpp | 3 ++- src/lib/ebus/device.cpp | 4 ++-- src/lib/ebus/device.h | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 56130e32..d268f4ef 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -652,7 +652,8 @@ result_t BusHandler::handleSymbol() { } switch (arbitrationState) { case as_lost: - logDebug(lf_bus, "arbitration lost"); + case as_timeout: + logDebug(lf_bus, arbitrationState == as_lost ? "arbitration lost" : "arbitration lost (timed out)"); if (m_currentRequest == nullptr) { BusRequest *startRequest = m_nextRequests.peek(); if (startRequest != nullptr && m_nextRequests.remove(startRequest)) { diff --git a/src/lib/ebus/device.cpp b/src/lib/ebus/device.cpp index 7fec3398..d5ab9f82 100755 --- a/src/lib/ebus/device.cpp +++ b/src/lib/ebus/device.cpp @@ -596,10 +596,10 @@ bool Device::read(symbol_t* value, bool isAvailable, ArbitrationState* arbitrati case ENH_RES_RECEIVED: *value = data; if (data == SYN && *arbitrationState == as_running && m_arbitrationCheck) { - if (m_arbitrationCheck < 2) { // wait for two SYN symbols before switching to timeout + if (m_arbitrationCheck < 3) { // wait for three SYN symbols before switching to timeout m_arbitrationCheck++; } else { - *arbitrationState = as_lost; + *arbitrationState = as_timeout; m_arbitrationMaster = SYN; m_arbitrationCheck = 0; } diff --git a/src/lib/ebus/device.h b/src/lib/ebus/device.h index 9d9f69cf..f1454f21 100755 --- a/src/lib/ebus/device.h +++ b/src/lib/ebus/device.h @@ -61,6 +61,7 @@ enum ArbitrationState { as_error, //!< error while sending master address as_running, //!< arbitration currently running (master address sent, waiting for reception) as_lost, //!< arbitration lost + as_timeout, //!< arbitration timed out as_won, //!< arbitration won };