Files
firmware/src
James Rich 42e64cfa59 Suppress duplicate BLE relays, and measure what an advertisement actually holds
perhapsCancelDupe was gated on TRANSPORT_LORA, so a node that overheard a
neighbour relaying a packet over BLE advertised its own copy anyway. The gate is
now per medium: a LoRa dupe cancels the LoRa queue as before, a BLE dupe cancels
the BLE ring and nothing else. Cancelling across media would be wrong in the
other direction - hearing a neighbour on BLE is no evidence at all about who
heard us on LoRa, and standing the LoRa rebroadcast down on that would thin the
flood wherever the two meshes overlap.

MeshTransportBase gains cancelTransportsOn(), carrying the medium so each
transport can ignore a cancel that is not for its own radio. AdvSlot carries
from/id, and runOnce remembers the identity of the burst it started, so a cancel
reaches a payload already repeating on air as well as the ones still queued.

Separately, buildAdvPayload has always refused packets that do not fit one
unfragmented advertisement, and the existing test only proved that at 256 bytes.
The real ceiling is 219 bytes of ciphertext against the 239 a LoRa frame carries,
and 198 for a relay, because the packet is encoded as it stands and so puts the
rx_rssi, rx_snr and rx_time it was received with on the air - rx_rssi being a
negative int32 at ten bytes, and the relayer's own link quality. Both numbers are
now binary-searched and pinned, so a field added to MeshPacket shows up as a
failing test rather than as quietly shorter reach, and the refusals are counted
rather than only logged.
2026-09-14 17:36:03 -05:00
..
2026-08-20 12:28:57 +00:00
2026-08-20 12:28:57 +00:00
…
…
2026-07-16 18:57:50 -05:00
…
…