From 032c2b397127e0277715fd03623096b76083b4df Mon Sep 17 00:00:00 2001 From: R0ck Date: Fri, 16 Oct 2026 22:46:54 +0100 Subject: [PATCH 1/3] debugging: a collision says whether it hit the header or the payload --- pages/debugging.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pages/debugging.md b/pages/debugging.md index 4da6cfb..49fec24 100644 --- a/pages/debugging.md +++ b/pages/debugging.md @@ -26,6 +26,13 @@ consoles and link budgets, with the Inspector for whichever node is selected. | no route | nothing relayed it | regions, `flood_max`, loop detection | | dropped by region | the node does not hold the scope | the region map, or the scope being sent on | +A collision says where it landed. "Decoded its header, then N symbol(s) were +destroyed" is a frame whose payload failed its CRC; "locked on, then N of its 8 +header symbols were destroyed" is a header the receiver could not read. The +receiving node's firmware is told the same thing its radio would report: a CRC +error, with the damaged bytes, or a header error and nothing more. A frame the +receiver never locked onto reaches the firmware not at all. + "It did not arrive" and "it arrived 3 dB under the floor" lead to completely different fixes, which is why the cause is recorded rather than a boolean. From 732ba3ab145ddd63f7d919414f6bb01911b07aa8 Mon Sep 17 00:00:00 2001 From: R0ck Date: Fri, 16 Oct 2026 22:54:25 +0100 Subject: [PATCH 2/3] debugging: say which nodes are told a frame failed --- pages/debugging.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pages/debugging.md b/pages/debugging.md index 49fec24..b2476bc 100644 --- a/pages/debugging.md +++ b/pages/debugging.md @@ -31,7 +31,8 @@ destroyed" is a frame whose payload failed its CRC; "locked on, then N of its 8 header symbols were destroyed" is a header the receiver could not read. The receiving node's firmware is told the same thing its radio would report: a CRC error, with the damaged bytes, or a header error and nothing more. A frame the -receiver never locked onto reaches the firmware not at all. +receiver never locked onto reaches the firmware not at all. Only native +firmware builds that support it are told; emulated boards are not yet. "It did not arrive" and "it arrived 3 dB under the floor" lead to completely different fixes, which is why the cause is recorded rather than a boolean. From cbf3cfca062f7941f39c769140afe273a3be4c3e Mon Sep 17 00:00:00 2001 From: R0ck Date: Sat, 17 Oct 2026 05:10:40 +0100 Subject: [PATCH 3/3] debugging: a frame never locked onto leaves the preamble flag set --- pages/debugging.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pages/debugging.md b/pages/debugging.md index b2476bc..f133936 100644 --- a/pages/debugging.md +++ b/pages/debugging.md @@ -31,8 +31,11 @@ destroyed" is a frame whose payload failed its CRC; "locked on, then N of its 8 header symbols were destroyed" is a header the receiver could not read. The receiving node's firmware is told the same thing its radio would report: a CRC error, with the damaged bytes, or a header error and nothing more. A frame the -receiver never locked onto reaches the firmware not at all. Only native -firmware builds that support it are told; emulated boards are not yet. +receiver could detect and never locked onto, because something stronger +swamped it while its preamble was still to be found, raises nothing, as on the +radio: on a native node the preamble flag stays set until the firmware clears +it, and a receiver re-armed part-way through a frame loses that frame. Only +native firmware builds that support it are told; emulated boards are not yet. "It did not arrive" and "it arrived 3 dB under the floor" lead to completely different fixes, which is why the cause is recorded rather than a boolean.