v1.7.0: spurious end-of-decode hardening + session-resilient start.sh
The decoder could end decode() early on an idle/busy live line; the frontend symptom was a flood of "sr_session_stop: session was NULL" after the session stopped. Harden the EOF detection and stop the capture from dropping. pd.py: - _at_eof(): a step that consumes only queued bytes (_replay / peeked_byte, e.g. the invalid-INS re-frame) no longer counts as end-of-capture; bounded to 64 consecutive no-advance steps. - _stall_check(track=False): the idle-LEVEL wait in wait_data_falling returns immediately at the same sample on an idle line -- not EOF. Only "pins is None" ends the wait there; sample-stall detection is kept for the edge wait. - resync_idle(): guard wait()==None (was an unguarded pins[...] TypeError at stream end). Effect: samsung_phone_sample.sr had halted at ~21.9M/320M samples with 1 APDU; it now decodes through ~293M to a true end (939 APDUs, CHKSUM 176). The 6 CONCAT packets are real mis-framed STK bursts now reachable (known Samsung de-concatenation family). All other traces unchanged. start.sh: - Auto-restart is now the default (--no-loop disables) so an intermittent FX2 USB stop reconnects instead of ending the session. - Per-session pcap suffix (FILE.N.ext) so a restart never overwrites the previous capture. - Filter the repetitive "sr_session_stop: session was NULL" teardown line from stderr (real decoder errors still pass). Validation: test_8 56/0/OK, test_7 65/0/OK, xiaomi_phone 640, xiaomi_cold 473, 4gmodem 327, A55 407/395, S21p 399/375, target S21p 369; 0 CONCAT; 65/65 unit tests (10 new). VERSION -> 1.7.0.
This commit is contained in:
1 parent
bca1b85b94
commit
690cc132ca
5 files changed
+205
-23
No files matched your search
@@ -192,11 +192,16 @@ is the usual suspect.
|
||||
`start.sh` captures a continuous stream at the configured rate (default 16
|
||||
MHz) until Ctrl+C (`rc=130`). A healthy capture never ends by itself; if the
|
||||
FX2 drops the USB transfer mid-session (a flaky device, `rc=0` "device
|
||||
stopped streaming"), pass `--loop` to auto-restart — it re-launches the
|
||||
capture on every `rc=0` until you press Ctrl+C or hit `--max-restarts=N`
|
||||
(default 20; `0` = unlimited), with a `--restart-delay=S` gap (default 2 s).
|
||||
stopped streaming"), the capture auto-restarts so the session is not lost —
|
||||
it re-launches on every `rc=0` until you press Ctrl+C or hit
|
||||
`--max-restarts=N` (default 20; `0` = unlimited), with a `--restart-delay=S`
|
||||
gap (default 2 s). When restarting with `--pcap=FILE`, each session's capture
|
||||
is written to `FILE.<N>.<ext>` so a restart never overwrites the previous one,
|
||||
and the repetitive `sr_session_stop: session was NULL` teardown line is
|
||||
filtered from stderr.
|
||||
|
||||
- `--loop` auto-restarts the capture when it ends on its own (`rc=0`).
|
||||
- `--no-loop` disables auto-restart (single capture only).
|
||||
- `--loop` forces auto-restart on (this is the default).
|
||||
- `--max-restarts=N` caps restarts (default 20; `0` = unlimited).
|
||||
- `--restart-delay=S` seconds to wait between restarts (default 2).
|
||||
- `--log` captures the `rc=` verdict line for the session end.
|
||||
|
||||
Reference in new issue
Block a user