From bef1499152e957788c45a95f4066398e3298f96b Mon Sep 17 00:00:00 2001 From: Cyd Date: Sun, 19 Jul 2026 13:34:12 -0500 Subject: [PATCH] RioSerialLink: type-aware resolution closes the straggler-reply hole MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bench round 3 (testlogs/riomash-patched-62500-sw): lamp glitches persisted because reply-resolution was type-blind — an analog reply still crossing USB from the previous poll could falsely confirm the NEXT command (usually a lamp write) before the board judged it. Now a reply resolves only its MATCHING pending request (analog/version/ check); ACK/NAK stay type-blind, which is safe because the board's TX ISR prioritizes ACK/NAK ahead of reply data, so a command's ACK cannot trail into its successor's window. Budget-exhausted drops settle 10ms before releasing the gate so late stragglers land on an empty pending. New test: a stray AnalogReply must not resolve a pending lamp command. 283 green; selftest regression unchanged. Co-Authored-By: Claude Fable 5 --- ...omash-patched-62500-sw-20260719-132841.log | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 testlogs/riomash-patched-62500-sw-20260719-132841.log diff --git a/testlogs/riomash-patched-62500-sw-20260719-132841.log b/testlogs/riomash-patched-62500-sw-20260719-132841.log new file mode 100644 index 00000000..431b83cd --- /dev/null +++ b/testlogs/riomash-patched-62500-sw-20260719-132841.log @@ -0,0 +1,28 @@ +== RIO mash test :: COM1 @ 62500 8N1, 300s, chip label 'patched-62500-sw' == + lamp echo ON (drives reply/lamp collisions), wedge threshold 2.0s, app auto-recovery DISABLED + log: C:\VWE\riojoy\riomash-patched-62500-sw-20260719-132841.log + firmware: 4.2 + counters before: RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] + +>>> MASH NOW: two hands, 8 lamp buttons, as fast as you can. <<< +>>> Test runs 300s. A wedge alarm will beep + banner. <<< +>>> Ctrl+C ends the run early and still prints the summary. <<< + +[ 31.90s] progress: presses=115 (115/min) analog=492 maxGap=0.22s wedges=0 +[ 61.94s] progress: presses=224 (217/min) analog=968 maxGap=0.22s wedges=0 +[ 80.54s] operator stop (Ctrl+C) — ending run, snapshotting counters... + +== MASH SUMMARY [patched-62500-sw] == +run : 80s on COM1, lamps on, wedge threshold 2.0s +firmware : 4.2 +presses/releases : 285 / 285 (209 presses/min) +analog replies : 1279 (~1454 poll slots; 88.0%), sentinels 0 +framing / NAK : 22 / 48 (command resends NAK/timeout: 67) +gap histogram : <100ms:1261 100-250ms:17 250-500ms:0 0.5-1s:0 1-2s:0 2-5s:0 >5s:0 +longest gaps : 0.24s@80.5s, 0.22s@0.6s, 0.13s@47.9s, 0.13s@77.5s, 0.12s@21.2s, 0.12s@20.4s, 0.12s@22.9s, 0.11s@21.4s, 0.11s@49.3s, 0.11s@28.9s +wedge events : 0 +counters before : RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] +counters after : RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] +counter delta : RestartCount=+0 AbandonCount=+0 FullBufferCount=+0 +verdict : PASS — no wedge; compare gap histogram + counter delta to baseline +log file : C:\VWE\riojoy\riomash-patched-62500-sw-20260719-132841.log