From 0defe3d2e31f19feee21be847deba17af347fe65 Mon Sep 17 00:00:00 2001 From: Andrew Andrianov Date: Fri, 26 Feb 2021 22:24:30 +0300 Subject: [PATCH] MyTransportHal: Implement MY_TRANSPORT_SEND_RETRIES Signed-off-by: Andrew Andrianov --- MyConfig.h | 9 +++++++++ hal/transport/MyTransportHAL.cpp | 8 ++++++++ keywords.txt | 1 + 3 files changed, 18 insertions(+) diff --git a/MyConfig.h b/MyConfig.h index b4e776d4c..e7d1c3dda 100755 --- a/MyConfig.h +++ b/MyConfig.h @@ -1153,6 +1153,15 @@ #define MY_TRANSPORT_DISCOVERY_INTERVAL_MS (20*60*1000ul) #endif +/** + * @def MY_TRANSPORT_SEND_RETRIES + * @brief If defined to a positive number N, the node will try to send the payload to the + * uplink up to N times before actually failing. Useful when working in a noisy environment + * @note Setting this option too high will + * + */ +//#define MY_TRANSPORT_SEND_RETRIES (5) + /** *@def MY_TRANSPORT_UPLINK_CHECK_DISABLED *@brief If defined, disables uplink check to GW during transport initialisation diff --git a/hal/transport/MyTransportHAL.cpp b/hal/transport/MyTransportHAL.cpp index 7fdd6cd9d..369cab397 100644 --- a/hal/transport/MyTransportHAL.cpp +++ b/hal/transport/MyTransportHAL.cpp @@ -173,7 +173,15 @@ bool transportHALSend(const uint8_t nextRecipient, const MyMessage *outMsg, cons const uint8_t finalLength = len; #endif +#ifdef MY_TRANSPORT_SEND_RETRIES + uint8_t retries = MY_TRANSPORT_RETRIES; + bool result = false; + while (retries-- && (!result)) { + result = transportSend(nextRecipient, (void *)tx_data, finalLength, noACK); + } +#else bool result = transportSend(nextRecipient, (void *)tx_data, finalLength, noACK); +#endif TRANSPORT_HAL_DEBUG(PSTR("THA:SND:MSG LEN=%" PRIu8 ",RES=%" PRIu8 "\n"), finalLength, result); return result; } diff --git a/keywords.txt b/keywords.txt index 4a94ded78..831d2e046 100755 --- a/keywords.txt +++ b/keywords.txt @@ -66,6 +66,7 @@ MY_SIGNAL_REPORT_ENABLED LITERAL1 MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS LITERAL1 MY_SMART_SLEEP_WAIT_DURATION_MS LITERAL1 MY_TRANSPORT_CHKUPL_INTERVAL_MS LITERAL1 +MY_TRANSPORT_SEND_RETRIES LITERAL1 MY_TRANSPORT_DISCOVERY_INTERVAL_MS LITERAL1 MY_TRANSPORT_MAX_TSM_FAILURES LITERAL1 MY_TRANSPORT_MAX_TX_FAILURES LITERAL1