feat: MeshCore decoder, Watchman, test corpus, sparkline TX indicators
Firmware: - fix(protocol): SNR type i8→i16 to match lora_phy PacketStatus - fix(display): combine splash + waiting into one screen - fix(display): move TX power to row 0 right-justified - feat(display): sparkline distinguishes TX from RX — TX bars are dotted (alternating pixel rows), RX bars are solid. TX-only slots show a short marker. TX takes precedence over RX in the same time slot. Host tool (tools/meshcore_rx.py): - feat: full MeshCore packet decoder with colored ANSI output - feat: GRP_TXT decryption using 276 channels from channels.csv - feat: Watchman loop/collision reporter to #watchman - feat: ADVERT-informed node registry with 12h TTL persistence - feat: transport code fallback for older MeshCore firmware - fix: robust error handling for long-running operation - fix: collision detection uses evidence-based reasoning from advert cache Channel directory (tools/channels.csv): 276 channels Test corpus (corpus/): JSON Schema, 28 hand-crafted vectors, Hypothesis generator
This commit is contained in:
43 files changed
+3309
-315
No files matched your search
+1
-1
@@ -50,7 +50,7 @@ pub async fn radio_task(
|
||||
Ok((len, pkt_status)) => {
|
||||
state.rx_count = state.rx_count.wrapping_add(1);
|
||||
let rssi = pkt_status.rssi;
|
||||
let snr = pkt_status.snr as i8;
|
||||
let snr = pkt_status.snr;
|
||||
state.last_rssi = Some(rssi);
|
||||
state.last_snr = Some(snr);
|
||||
status.sender().send(state.clone());
|
||||
|
||||
Reference in new issue
Block a user