From 2c7b3acbb9f7534d7dc7cc07fbc8524fb1a5f7d7 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Wed, 2 Mar 2022 18:55:11 -0800 Subject: [PATCH] Fix tophone build error --- src/airtime.cpp | 8 +++---- src/mesh/FloodingRouter.cpp | 38 ++++++++++++++++++++++++++---- src/mesh/FloodingRouter.h | 4 +++- src/mesh/generated/deviceonly.pb.h | 2 +- src/mesh/generated/mesh.pb.c | 2 +- src/mesh/generated/mesh.pb.h | 12 +++++----- 6 files changed, 49 insertions(+), 17 deletions(-) diff --git a/src/airtime.cpp b/src/airtime.cpp index 5c0378cfa..598820782 100644 --- a/src/airtime.cpp +++ b/src/airtime.cpp @@ -31,7 +31,7 @@ void AirTime::logAirtime(reportTypes reportType, uint32_t airtime_ms) uint8_t AirTime::currentPeriodIndex() { - return ((getSecondsSinceBoot() / SECONDS_PER_PERIOD) % PERIODS_TO_LOG); + return ((getSecondsSinceBoot() / SECONDS_PER_PERIOD) % myNodeInfo.air_period_rx_count); } uint8_t AirTime::getPeriodUtilMinute() { @@ -48,7 +48,7 @@ void AirTime::airtimeRotatePeriod() if (this->airtimes.lastPeriodIndex != this->currentPeriodIndex()) { DEBUG_MSG("Rotating airtimes to a new period = %u\n", this->currentPeriodIndex()); - for (int i = PERIODS_TO_LOG - 2; i >= 0; --i) { + for (int i = myNodeInfo.air_period_rx_count - 2; i >= 0; --i) { this->airtimes.periodTX[i + 1] = this->airtimes.periodTX[i]; this->airtimes.periodRX[i + 1] = this->airtimes.periodRX[i]; this->airtimes.periodRX_ALL[i + 1] = this->airtimes.periodRX_ALL[i]; @@ -83,7 +83,7 @@ uint32_t *AirTime::airtimeReport(reportTypes reportType) uint8_t AirTime::getPeriodsToLog() { - return PERIODS_TO_LOG; + return myNodeInfo.air_period_rx_count; } uint32_t AirTime::getSecondsPerPeriod() @@ -140,7 +140,7 @@ int32_t AirTime::runOnce() } // Init airtime windows to all 0 - for (int i = 0; i < PERIODS_TO_LOG; i++) { + for (int i = 0; i < myNodeInfo.air_period_rx_count; i++) { this->airtimes.periodTX[i] = 0; this->airtimes.periodRX[i] = 0; this->airtimes.periodRX_ALL[i] = 0; diff --git a/src/mesh/FloodingRouter.cpp b/src/mesh/FloodingRouter.cpp index 14ce6dd02..0a14552ab 100644 --- a/src/mesh/FloodingRouter.cpp +++ b/src/mesh/FloodingRouter.cpp @@ -1,5 +1,5 @@ -#include "configuration.h" #include "FloodingRouter.h" +#include "configuration.h" #include "mesh-pb-constants.h" FloodingRouter::FloodingRouter() {} @@ -27,11 +27,41 @@ bool FloodingRouter::shouldFilterReceived(MeshPacket *p) return Router::shouldFilterReceived(p); } +bool FloodingRouter::inRangeOfRouter() +{ + + uint32_t maximum_router_sec = 300; + + // FIXME : Scale minimum_snr to accomodate different modem configurations. + float minimum_snr = 2; + + for (int i = 0; i < myNodeInfo.router_count; i++) { + // A router has been seen and the heartbeat was heard within the last 300 seconds + if ( + ((myNodeInfo.router_sec[i] > 0) && (myNodeInfo.router_sec[i] < maximum_router_sec)) && + (myNodeInfo.router_snr[i] > minimum_snr) + ) { + return true; + } + } + + return false; +} + void FloodingRouter::sniffReceived(const MeshPacket *p, const Routing *c) { - // If a broadcast, possibly _also_ send copies out into the mesh. - // (FIXME, do something smarter than naive flooding here) - if (p->to == NODENUM_BROADCAST && p->hop_limit > 0 && getFrom(p) != getNodeNum()) { + bool rebroadcastPacket = true; + + 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"); + + rebroadcastPacket = false; + } + + if ((p->to == NODENUM_BROADCAST) && (p->hop_limit > 0) && (getFrom(p) != getNodeNum() && rebroadcastPacket)) { if (p->id != 0) { MeshPacket *tosend = packetPool.allocCopy(*p); // keep a copy because we will be sending it diff --git a/src/mesh/FloodingRouter.h b/src/mesh/FloodingRouter.h index 2fae67666..9b54008d0 100644 --- a/src/mesh/FloodingRouter.h +++ b/src/mesh/FloodingRouter.h @@ -54,9 +54,11 @@ class FloodingRouter : public Router, protected PacketHistory /** * Are we in range of a router? + * + * "range" here may not be the right term. * @return true if we're in range of a router */ - virtual bool rangeOfRouter(const MeshPacket *p); + virtual bool inRangeOfRouter(); /** * Look for broadcasts we need to rebroadcast diff --git a/src/mesh/generated/deviceonly.pb.h b/src/mesh/generated/deviceonly.pb.h index 75dd95bef..c7183ba9a 100644 --- a/src/mesh/generated/deviceonly.pb.h +++ b/src/mesh/generated/deviceonly.pb.h @@ -87,7 +87,7 @@ extern const pb_msgdesc_t ChannelFile_msg; #define ChannelFile_fields &ChannelFile_msg /* Maximum encoded size of messages (where known) */ -#define DeviceState_size 10109 +#define DeviceState_size 9885 #define ChannelFile_size 832 #ifdef __cplusplus diff --git a/src/mesh/generated/mesh.pb.c b/src/mesh/generated/mesh.pb.c index 6846dc540..636535936 100644 --- a/src/mesh/generated/mesh.pb.c +++ b/src/mesh/generated/mesh.pb.c @@ -27,7 +27,7 @@ PB_BIND(MeshPacket, MeshPacket, 2) PB_BIND(NodeInfo, NodeInfo, AUTO) -PB_BIND(MyNodeInfo, MyNodeInfo, 2) +PB_BIND(MyNodeInfo, MyNodeInfo, AUTO) PB_BIND(LogRecord, LogRecord, AUTO) diff --git a/src/mesh/generated/mesh.pb.h b/src/mesh/generated/mesh.pb.h index 1bc2d32ac..bda47e04c 100644 --- a/src/mesh/generated/mesh.pb.h +++ b/src/mesh/generated/mesh.pb.h @@ -163,9 +163,9 @@ typedef struct _MyNodeInfo { uint32_t min_app_version; uint32_t max_channels; pb_size_t air_period_tx_count; - uint32_t air_period_tx[24]; + uint32_t air_period_tx[8]; pb_size_t air_period_rx_count; - uint32_t air_period_rx[24]; + uint32_t air_period_rx[8]; bool has_wifi; float channel_utilization; float air_util_tx; @@ -344,7 +344,7 @@ extern "C" { #define Data_init_default {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0} #define MeshPacket_init_default {0, 0, 0, 0, {Data_init_default}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN} #define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0} -#define MyNodeInfo_init_default {0, 0, "", "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}} +#define MyNodeInfo_init_default {0, 0, "", "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}} #define LogRecord_init_default {"", 0, "", _LogRecord_Level_MIN} #define FromRadio_init_default {0, 0, {MyNodeInfo_init_default}} #define ToRadio_init_default {0, {MeshPacket_init_default}} @@ -356,7 +356,7 @@ extern "C" { #define Data_init_zero {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0} #define MeshPacket_init_zero {0, 0, 0, 0, {Data_init_zero}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN} #define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0} -#define MyNodeInfo_init_zero {0, 0, "", "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}} +#define MyNodeInfo_init_zero {0, 0, "", "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}, 0, {0, 0, 0, 0}} #define LogRecord_init_zero {"", 0, "", _LogRecord_Level_MIN} #define FromRadio_init_zero {0, 0, {MyNodeInfo_init_zero}} #define ToRadio_init_zero {0, {MeshPacket_init_zero}} @@ -661,9 +661,9 @@ extern const pb_msgdesc_t ToRadio_PeerInfo_msg; #define Data_size 267 #define MeshPacket_size 318 #define NodeInfo_size 273 -#define MyNodeInfo_size 506 +#define MyNodeInfo_size 282 #define LogRecord_size 81 -#define FromRadio_size 515 +#define FromRadio_size 327 #define ToRadio_size 321 #define ToRadio_PeerInfo_size 8