From ff8982148f8fbf00087a9a57dc8c608751fc860e Mon Sep 17 00:00:00 2001 From: Olivier Date: Fri, 1 Jul 2016 14:29:57 +0200 Subject: [PATCH] Improve radio fail state check (#498) --- libraries/MySensors/core/MyTransport.cpp | 5 ++++- libraries/MySensors/core/MyTransport.h | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/MySensors/core/MyTransport.cpp b/libraries/MySensors/core/MyTransport.cpp index b284df3..305ef97 100644 --- a/libraries/MySensors/core/MyTransport.cpp +++ b/libraries/MySensors/core/MyTransport.cpp @@ -36,6 +36,7 @@ void stInitTransition() { // initialize status variables _transportSM.failedUplinkTransmissions = 0; _transportSM.pingActive = false; + _transportSM.transportActive = false; // Read node settings (ID, parentId, GW distance) from EEPROM hwReadConfigBlock((void*)&_nc, (void*)EEPROM_NODE_ID_ADDRESS, sizeof(NodeConfig)); @@ -48,6 +49,7 @@ void stInitTransition() { } else { debug(PSTR("RADIO:OK\n")); + _transportSM.transportActive = true; #if defined(MY_GATEWAY_FEATURE) // Set configuration for gateway debug(PSTR("TSM:GW MODE\n")); @@ -170,6 +172,7 @@ void stOKUpdate() { void stFailureTransition() { debug(PSTR("!TSM:FAILURE\n")); _transportSM.uplinkOk = false; + _transportSM.transportActive = false; // power down transport, no need until re-init debug(PSTR("TSM:PDT\n")); transportPowerDown(); @@ -221,7 +224,7 @@ void transportProcess() { // update state machine transportUpdateSM(); // process transport FIFO - transportProcessFIFO(); + if (_transportSM.transportActive) transportProcessFIFO(); } diff --git a/libraries/MySensors/core/MyTransport.h b/libraries/MySensors/core/MyTransport.h index 4530a45..15eed5d 100644 --- a/libraries/MySensors/core/MyTransport.h +++ b/libraries/MySensors/core/MyTransport.h @@ -63,7 +63,8 @@ typedef struct { bool preferredParentFound : 1; //!< flag preferred parent found bool uplinkOk : 1; //!< flag uplink ok bool pingActive : 1; //!< flag ping active - uint8_t reserved : 4; //!< reserved + bool transportActive : 1; //!< flag transport active + uint8_t reserved : 3; //!< reserved uint8_t retries : 4; //!< retries / state re-enter uint8_t failedUplinkTransmissions : 4; //!< counter failed uplink transmissions uint8_t pingResponse; //!< stores hops received in I_PONG