Add new ROUTER_LATE role (#5528)

Will always rebroadcast packets, but will do so after all other modes.
Intended for router nodes that are there to provide additional coverage
in areas not already covered by other routers, or to bridge around
problematic terrain, but should not be given priority over other routers
in order to avoid unnecessaraily consuming hops.

By default, this role will rebroadcast during the normal client window.
However, if another node is overheard rebroadcasting the packet, then it
will be moved to a second window *after* the normal client one, with the
same timing behaviour.
This commit is contained in:
Erayd
2024-12-28 11:52:18 +13:00
committed by GitHub
parent 2b33be2fea
commit b2808063d0
7 changed files with 120 additions and 30 deletions

View File

@@ -140,10 +140,16 @@ class RadioLibInterface : public RadioInterface, protected concurrency::Notified
* doing the transmit */
void setTransmitDelay();
/** random timer with certain min. and max. settings */
/**
* random timer with certain min. and max. settings
* @return Timestamp after which the packet may be sent
*/
void startTransmitTimer(bool withDelay = true);
/** timer scaled to SNR of to be flooded packet */
/**
* timer scaled to SNR of to be flooded packet
* @return Timestamp after which the packet may be sent
*/
void startTransmitTimerSNR(float snr);
void handleTransmitInterrupt();
@@ -193,4 +199,9 @@ class RadioLibInterface : public RadioInterface, protected concurrency::Notified
virtual void setStandby();
const char *radioLibErr = "RadioLib err=";
/**
* If the packet is not already in the late rebroadcast window, move it there
*/
void clampToLateRebroadcastWindow(NodeNum from, PacketId id);
};