v0.12.6 #10
Reference in New Issue
Block a user
Delete Branch "seismo-lab-new"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
v0.12.6 — 2026-05-01
Fixed
blastware_file.py— waveform frame classification — A5 frame classification forwaveform-only vs header-only frames now uses
frame.record_typeinstead of frame index.Only waveform frames (0x46) are written to the file body; metadata frames are skipped.
Fixes spurious data corruption from incorrectly classified frames.
s3_analyzer.py— A5/5A frame naming — Bulk waveform stream frames (SUB 5A response)are now correctly labeled "A5" in analyzer output instead of being conflated with other
multi-frame responses (SUB A4, E5, etc.).
S3FrameParser— frame terminator detection — Corrected the bare ETX terminatordetection. Frame termination is now correctly identified by a standalone
ETX=0x03byte,not by the
DLE+ETXsequence (which is part of the payload when it appears within a frame).v0.12.5 — 2026-04-21
Added
seismo_lab.py— Download tab — New fourth tab for live wire-byte capture during eventdownloads. Captures both BW→device and device→S3 frames in real time, allowing inspection
of the 5A bulk stream chunk sequence and frame-by-frame analysis without needing a bridge
or MITM proxy. Files are saved with user-specified labels for easy tracking.
Changed
s3_bridge.py— raw captures always-on by default —--raw-bwand--raw-s3nowdefault to
"auto"instead ofNone. Every bridge session automatically generatestimestamped
raw_bw_<ts>.binandraw_s3_<ts>.binfiles alongside the.bin/.logsession files. Pass
--raw-bw ""(explicit empty string) to disable if needed.gui_bridge.py— raw capture checkboxes pre-checked — Both "BW→S3 raw" and"S3→BW raw" checkboxes start checked. Path fields are empty by default (bridge auto-names
the files). Unchecking a box passes
--raw-bw ""to explicitly disable capture.Bridge tab— TCP mode added — Serial/TCP radio toggle allows connection via cellularmodem (RV50/RV55) instead of direct RS-232. Supports multi-capture design (simultaneous
Bridge + Analyzer + Download sessions).
ach_server.py— TX capture added (raw_tx_<ts>.bin) — Every ACH inbound sessionnow saves both directions:
raw_rx_<ts>.bin(device → us, S3 side, as before) andraw_tx_<ts>.bin(us → device, BW side). Both files are usable in the Analyzer.TX bytes are buffered in memory until startup handshake succeeds (same as RX), preventing
scanner probes from creating empty files.
Add classify_frame() which categorises each A5 frame by content: terminator — page_key == 0x0000 probe_or_strt — contains b"STRT" metadata — contains compliance-config ASCII markers (Project:, Client:, Standard Recording Setup, …) waveform — binary-heavy (< 20% printable ASCII), i.e. raw ADC data unknown — fallback Update write_blastware_file() body loop: frame 0 (probe) is still always processed; frames 1+ are only included when classify_frame returns "waveform". Metadata frames (compliance config block with Project:/Client:/etc.) and any stray STRT-bearing frames are skipped with a warning/debug log. Terminator frame handling is unchanged. Adds temporary print() diagnostics so each frame's classification is visible in the server log to aid debugging. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>parse_s3 had the S3 terminator logic inverted vs the real S3FrameParser in framing.py. It was terminating on DLE+ETX and treating bare ETX as payload, which caused every bare 0x03 to be swallowed — bundling multiple real S3 frames into one giant body until a DLE+ETX sequence happened to appear. Result: 583-byte POLL_RESPONSE 'frames' containing many real frames concatenated, all showing BAD CHK. Fix: mirror S3FrameParser exactly — - Bare ETX (0x03) = real frame terminator - DLE+ETX (0x10 0x03) = inner-frame literal data (A4/E5 sub-frames), appended to body and parsing continues https://claude.ai/code/session_014NczSHUz9uTzCAf4cVASTJMatches serial bridge naming: raw_bw_{ts}_{label}.bin / raw_s3_{ts}_{label}.bin https://claude.ai/code/session_014NczSHUz9uTzCAf4cVASTJ