The complete read path now works with no Instantel software in the loop.
Three divergences from Series III, all simplifications:
- No arming sequence. Series III ignores a 5A probe unless preceded by
1E / 0A / 1E(0xFE) / 0C / 1F(0xFE) / POLL x3. The Micromate answers a bare
5A request with nothing before it.
- The offset word is a LENGTH, not a position: 0x1000 + 2*pages, where
pages = ceil(event_size / 512), and event_size comes from the chain walk.
ONE request returns the entire event -- no chunk loop, no STRT end-offset
parsing, no TERM frame. Over-requesting is safe; the device caps at the
real size.
- Params are the Series III probe form: [0x00][key4][6 x 0x00].
The payload is the .IDFW file byte for byte. It begins 00 12 01 00 00 00
"Instantel\0" -- _THOR_PREFIX + _INSTANTEL_TAG from micromate/idf_file.py --
and the first 32 bytes are identical to a production .IDFW from the store.
Responses are DLE-stuffed, so destuff before locating the file (11,781 raw ->
11,049 destuffed for an 11,032-byte event).
End-to-end: event 055d4a82 downloaded over USB and fed straight to
read_idf_file() yields serial UM12947, timestamp 2026-09-23 16:33:19, and
3072 samples on all four channels. Cross-check: the 0C record reports a
stored Vert peak of 1.3720 for this event; the decoded samples give 1.3706 --
two unrelated paths agreeing to 0.1%.
Consequence: no new codec work is needed. The bytes off the wire are the same
bytes thor-watcher forwards today, so /db/import/idf_file ingests a directly
downloaded event unchanged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ru8Lg9HkkYvX9VWWo65SmL