From 29ebc7565609100133e6613d30326745e7a14572 Mon Sep 17 00:00:00 2001 From: Brian Harrison Date: Tue, 5 May 2026 20:48:58 -0400 Subject: [PATCH] doc: update readme v0.14.3 --- README.md | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e0aafb7..27dda6c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# seismo-relay `v0.12.6` +# seismo-relay `v0.14.3` A ground-up replacement for **Blastware** — Instantel's aging Windows-only software for managing MiniMate Plus seismographs. @@ -10,6 +10,10 @@ over direct RS-232 or cellular modem (Sierra Wireless RV50 / RV55). > pipeline working end-to-end over TCP/cellular. ACH Auto Call Home server > handles inbound unit connections, downloads events, and persists everything > to a SQLite database. SFM REST API exposes device control and DB queries. +> **As of v0.14.3 (2026-05-05): SUB 5A bulk waveform protocol is verified +> byte-perfect against Blastware captures across 2-sec, 3-sec, and 10-sec +> events.** Generated `.G10` / `.AB0` files open cleanly in Blastware with +> full Event Reports, frequency analysis, and waveform plots. > See [CHANGELOG.md](CHANGELOG.md) for full version history. --- @@ -194,9 +198,14 @@ with client: client.delete_all_events() # Erase all (SUB 0xA3 → 0x1C → 0x06 → 0xA2) ``` -`get_events()` runs the full per-event sequence: `1E → 0A → 0C → 5A → 1F`. -SUB 5A bulk stream provides `client`, `operator`, and `sensor_location` as they -existed at record time — not backfilled from the current compliance config. +`get_events()` runs the full per-event sequence: +`1E → 0A → 1E(arm token=0xFE) → 0C → 1F(arm) → POLL×3 → 5A → 1F(browse)`. +SUB 5A bulk stream walks chunks bounded by the `end_offset` extracted from +the STRT record at byte 17 of the probe response — no over-reading, no +chunk-count cap. Project / client / operator / sensor location strings come +from the dedicated metadata pages at counter `0x1002` and `0x1004`, +read once per session (they reflect the compliance setup at session start, +not per individual event). --- @@ -253,7 +262,7 @@ Full protocol documentation: [`docs/instantel_protocol_reference.md`](docs/insta --- -## Compliance Config Features (v0.12.2–v0.12.3) +## Compliance Config Features The REST API and web UI expose full control over device compliance settings: @@ -295,34 +304,36 @@ Use **com0com** or **VSPD** to create the virtual COM pair on Windows. --- -## Key Features (v0.10–v0.12) +## Key Features -**Device support (v0.12.5):** +**Device support:** - [x] Full read/write/erase pipelines - [x] Compliance config (recording mode, sample rate, histogram interval, geo sensitivity, project strings) - [x] Auto Call Home config (read/write ACH settings, dial string, time slots, retries) - [x] Monitor control (start/stop, status polling, battery/memory) - [x] Monitor log entries (continuous monitoring intervals without full waveform download) -**Data persistence (v0.11):** +**Data persistence:** - [x] SQLite database (`seismo_relay.db`) with 4 tables: ach_sessions, events, monitor_log, plus false_trigger flag - [x] Deduplication by waveform key (handles re-runs and repeat call-homes) - [x] Post-erase key-reuse detection (tracks high-water mark) - [x] Session state (`ach_state.json`) with downloaded keys and max key -**REST API (v0.12.1):** +**REST API:** - [x] Live device endpoints with in-memory caching (`_LiveCache`) - [x] Cache statistics (`/cache/stats`) and manual invalidation (`/cache/device`) - [x] DB query endpoints (units, events, monitor_log, sessions, false_trigger PATCH) - [x] Call Home config read/write endpoints - [x] Blastware file download endpoint (`/device/event/{index}/blastware_file`) -**File output (v0.7+):** -- [x] Blastware-compatible `.AB0` file generation (waveform + metadata) +**File output (v0.7+, byte-perfect as of v0.14.3):** +- [x] Blastware-compatible `.AB0` / `.G10` file generation (waveform + metadata) - [x] Multi-channel waveform decode from SUB 5A bulk stream - [x] Second-resolution timestamp encoding in Blastware filename +- [x] **Byte-perfect against BW reference captures** (verified across 2-sec / 3-sec / 10-sec event durations, both event 0 and event N continuation events) +- [x] STRT-bounded chunk walk + correct event-N probe counter + partial DLE stuffing of `0x10` in 5A params (the four fixes that landed in v0.14.0–v0.14.3) -**Capture tools (v0.12.5):** +**Capture tools:** - [x] Serial-to-TCP bridge with raw BW/S3 capture (s3_bridge.py, defaults to auto-capture) - [x] GUI bridge with raw capture checkboxes (gui_bridge.py) - [x] ACH inbound server with bidirectional capture (ach_server.py saves raw_tx + raw_rx) @@ -333,14 +344,15 @@ Use **com0com** or **VSPD** to create the virtual COM pair on Windows. - [x] gui_analyzer.py — standalone analyzer GUI - [x] frame_db.py — SQLite frame database for capture analysis -**seismo_lab.py GUI (v0.12.5):** +**seismo_lab.py GUI:** - [x] Bridge tab — Serial/TCP mode selector with raw capture options - [x] Analyzer tab — BW/S3 capture playback and differencing -- [x] Download tab — Live wire-byte capture during event download (new v0.12.5) +- [x] Download tab — Live wire-byte capture during event download - [x] Console tab — Logging and diagnostics ## Roadmap (Future) +- [ ] Verify 30-sec event download — body may exceed `0xFFFF` and force the device into a different `end_key` encoding (none of 2/3/10-sec test cases hit this boundary) - [ ] Terra-view integration — seismo-relay router, unit detail page, VISON-style event listing - [ ] Vibration summary reports — highest legit PPV per project → Word doc (false trigger filtering first) - [ ] Compliance config encoder — build raw write payloads from a `ComplianceConfig` object