From ec86246da97b83451c060d210742cc7d8ecb5466 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sat, 5 Mar 2022 12:38:26 -0800 Subject: [PATCH] Update to flooding router --- src/mesh/FloodingRouter.cpp | 24 +++++++++++++++++++++--- src/mesh/FloodingRouter.h | 8 ++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/mesh/FloodingRouter.cpp b/src/mesh/FloodingRouter.cpp index 0a14552ab..a08edafec 100644 --- a/src/mesh/FloodingRouter.cpp +++ b/src/mesh/FloodingRouter.cpp @@ -48,6 +48,14 @@ bool FloodingRouter::inRangeOfRouter() return false; } +bool FloodingRouter::isPacketLocal(const MeshPacket *p) +{ + + // TODO: Figure out if a packet is from a local node + + return false; +} + void FloodingRouter::sniffReceived(const MeshPacket *p, const Routing *c) { bool rebroadcastPacket = true; @@ -55,10 +63,20 @@ void FloodingRouter::sniffReceived(const MeshPacket *p, const Routing *c) if (radioConfig.preferences.role == Role_Repeater || radioConfig.preferences.role == Role_Router) { rebroadcastPacket = true; - } else if ((radioConfig.preferences.role == Role_Default) && inRangeOfRouter()) { - DEBUG_MSG("Role_Default - rx_snr > 13\n"); + } else if ((radioConfig.preferences.role == Role_Default)) { - rebroadcastPacket = false; + + if (inRangeOfRouter()) { + // In Range of a router + rebroadcastPacket = false; + + } else if (!isPacketLocal(p)) { + // The packet did not come from a local source + rebroadcastPacket = false; + + } + + rebroadcastPacket = true; } if ((p->to == NODENUM_BROADCAST) && (p->hop_limit > 0) && (getFrom(p) != getNodeNum() && rebroadcastPacket)) { diff --git a/src/mesh/FloodingRouter.h b/src/mesh/FloodingRouter.h index 9b54008d0..299ad690e 100644 --- a/src/mesh/FloodingRouter.h +++ b/src/mesh/FloodingRouter.h @@ -60,6 +60,14 @@ class FloodingRouter : public Router, protected PacketHistory */ virtual bool inRangeOfRouter(); + /** + * Is the packet from a device that is physically near this node? + * + * Calculated based on the received SNR. + * @return true if the received packet is physically close to this node. + */ + virtual bool isPacketLocal(const MeshPacket *p); + /** * Look for broadcasts we need to rebroadcast */