From cfce4964bfee8f1253f1285a135645dbb16414e2 Mon Sep 17 00:00:00 2001 From: proddy Date: Mon, 6 Jul 2020 13:29:41 +0200 Subject: [PATCH] fixes to checking bus status --- src/emsesp.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 3c6d30f36..bd81b8147 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -107,8 +107,10 @@ void EMSESP::reset_tx(uint8_t const tx_mode) { txservice_.telegram_read_count(0); txservice_.telegram_write_count(0); txservice_.telegram_fail_count(0); - EMSuart::stop(); - EMSuart::start(tx_mode); // reset the UART + if (tx_mode) { + EMSuart::stop(); + EMSuart::start(tx_mode); // reset the UART + } } // return status of bus: connected, connected but Tx is broken, disconnected @@ -117,8 +119,21 @@ uint8_t EMSESP::bus_status() { return BUS_STATUS_OFFLINE; } - // check if we have Tx issues - if (txservice_.telegram_read_count() < 2) { + // check if we have Tx issues. + uint32_t total_sent = txservice_.telegram_read_count() + txservice_.telegram_write_count(); + + // nothing sent successfully, also no errors - must be ok + if ((total_sent == 0) && (txservice_.telegram_fail_count() == 0)) { + return BUS_STATUS_CONNECTED; + } + + // nothing sent successfully, but have Tx errors + if ((total_sent == 0) && (txservice_.telegram_fail_count() != 0)) { + return BUS_STATUS_TX_ERRORS; + } + + // Tx Failure rate > 5% + if (((txservice_.telegram_fail_count() * 100) / total_sent) >= 5) { return BUS_STATUS_TX_ERRORS; }