2 Commits

Author SHA1 Message Date
claude c2ab94f20c docs: mark fi==9 decoder skip as fixed in CLAUDE.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 23:34:43 -04:00
claude b5828de534 fix: remove hardcoded fi==9 skip in _decode_a5_waveform
Frame index 9 was assumed to be the device terminator based on the
9-frame original blast capture. For streams with >9 frames (current
device produces 35), fi==9 is live waveform data — the skip was
dropping ~133 sample-sets per event.

Terminator detection is handled upstream via page_key==0x0000 in
read_bulk_waveform_stream, so no index-based skip is needed here.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 23:34:33 -04:00
2 changed files with 8 additions and 8 deletions
+5 -4
View File
@@ -175,12 +175,13 @@ in the chunk loop passes `timeout=10.0` explicitly.
end-of-stream. Chunks with uniform 1,036-byte data are all-zero ADC samples (post-event end-of-stream. Chunks with uniform 1,036-byte data are all-zero ADC samples (post-event
silence). Only the initial variable-size chunks contain actual signal. silence). Only the initial variable-size chunks contain actual signal.
### SUB 5A — known decoder issue: fi==9 hardcoded skip (not yet fixed) ### SUB 5A — fi==9 hardcoded skip (FIXED 2026-04-06)
`_decode_a5_waveform()` in `client.py` has `elif fi == 9: continue` — a leftover from the `_decode_a5_waveform()` previously had `elif fi == 9: continue` — a leftover from the
9-frame original blast capture where frame 9 was assumed to be a terminator. For current 9-frame original blast capture where frame 9 was assumed to be a terminator. For current
35-frame streams, fi==9 is live waveform data (~133 sample-sets dropped). Terminator 35-frame streams, fi==9 is live waveform data (~133 sample-sets were being dropped).
detection is via `page_key == 0x0000`, not frame index. This skip should be removed. Removed. Terminator detection is via `page_key == 0x0000` in `read_bulk_waveform_stream`,
not frame index.
### SUB 1E / 1F — event iteration null sentinel and token position (FIXED, do not re-introduce) ### SUB 1E / 1F — event iteration null sentinel and token position (FIXED, do not re-introduce)
+3 -4
View File
@@ -930,10 +930,9 @@ def _decode_a5_waveform(
elif fi == 7: elif fi == 7:
continue continue
# A5[9] is the device terminator frame (page_key=0x0000), also no data. # Terminator frames have page_key=0x0000 and are excluded upstream
elif fi == 9: # (read_bulk_waveform_stream returns early on page_key==0).
continue # No hardcoded frame-index skip here — all non-metadata frames are data.
else: else:
# Strip the 8-byte per-frame header (ctr + 6 zero bytes) # Strip the 8-byte per-frame header (ctr + 6 zero bytes)
if len(w) < 8: if len(w) < 8: