From 63d451c42415b82c790a87be154b0c612413eb0a Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sun, 16 Jun 2024 05:42:01 -0600 Subject: [PATCH 1/4] Modify checkConnection() - Define MESH_CONNECTION_CHECK_ATTEMPTS - Return from checkConnection() if -2 received, retry if -1, success if address matches, fail otherwise --- RF24Mesh.cpp | 17 +++++++++++++---- RF24Mesh_config.h | 11 +++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index f7bf09a..0c531e2 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -159,12 +159,21 @@ template bool ESBMesh::checkConnection() { // getAddress() doesn't use auto-ack; do a double-check to manually retry 1 more time - if (getAddress(_nodeID) < 1) { - if (getAddress(_nodeID) < 1) { - return false; + for (uint8_t i = 0; i < MESH_CONNECTION_CHECK_ATTEMPTS; i++) { + + int16_t result = getAddress(_nodeID); + switch (result) { + case -2: return false; break; // Address not found in list or is default + case -1: continue; break; // Write failed or timed out + case 0: return false; break; // This is a master node + default: + if ((uint16_t)result == mesh_address) { + return true; + } + break; // Successful address lookup if result == RF24Network address } } - return true; + return false; } /*****************************************************/ diff --git a/RF24Mesh_config.h b/RF24Mesh_config.h index 64bd74a..6f35fa7 100644 --- a/RF24Mesh_config.h +++ b/RF24Mesh_config.h @@ -54,6 +54,17 @@ #define MESH_MEM_ALLOC_SIZE 10 #endif // MESH_MEM_ALLOC_SIZE +/** + * @brief Number of attempts to verify a connection + * + * On child nodes, when calling `mesh.checkConnection();`, configure how many attempts will be made to contact the master node to verify connectivity + * Raising this number can result in a more stable mesh, since nodes can more easily verify that a connection is active + */ + +#ifndef MESH_CONNECTION_CHECK_ATTEMPTS + #define MESH_CONNECTION_CHECK_ATTEMPTS 3 +#endif + /**************************/ /*** Debug ***/ //#define RF24MESH_DEBUG_MINIMAL /** Uncomment for the Master Node to print out address assignments as they are assigned */ From 49383829db812bc340cd6d2d808eb4275dd70f53 Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sun, 16 Jun 2024 05:57:03 -0600 Subject: [PATCH 2/4] Update RF24Mesh_config.h Co-authored-by: Brendan <2bndy5@gmail.com> --- RF24Mesh_config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/RF24Mesh_config.h b/RF24Mesh_config.h index 6f35fa7..0c0d1a7 100644 --- a/RF24Mesh_config.h +++ b/RF24Mesh_config.h @@ -60,7 +60,6 @@ * On child nodes, when calling `mesh.checkConnection();`, configure how many attempts will be made to contact the master node to verify connectivity * Raising this number can result in a more stable mesh, since nodes can more easily verify that a connection is active */ - #ifndef MESH_CONNECTION_CHECK_ATTEMPTS #define MESH_CONNECTION_CHECK_ATTEMPTS 3 #endif From 97c5f3dc1d20f05523b951cd3093bf4e2f2ec5ee Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sun, 16 Jun 2024 06:00:16 -0600 Subject: [PATCH 3/4] Remove breaks; from switch - Per @2bndy5 in #240 --- RF24Mesh.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index 0c531e2..45446e9 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -163,9 +163,9 @@ bool ESBMesh::checkConnection() int16_t result = getAddress(_nodeID); switch (result) { - case -2: return false; break; // Address not found in list or is default - case -1: continue; break; // Write failed or timed out - case 0: return false; break; // This is a master node + case -2: return false; // Address not found in list or is default + case -1: continue; // Write failed or timed out + case 0: return false; // This is a master node default: if ((uint16_t)result == mesh_address) { return true; From f3f877bf98d146870d850930f176b05e3ab9c5dd Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sun, 16 Jun 2024 06:37:16 -0600 Subject: [PATCH 4/4] Update comment --- RF24Mesh.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index 45446e9..c9ec79c 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -167,10 +167,10 @@ bool ESBMesh::checkConnection() case -1: continue; // Write failed or timed out case 0: return false; // This is a master node default: - if ((uint16_t)result == mesh_address) { + if ((uint16_t)result == mesh_address) { // Successful address lookup if result == RF24Network address return true; } - break; // Successful address lookup if result == RF24Network address + break; } } return false;