Using "data load" on very large trace files (e.g. dumps with 700k samples,
such as COTAG dumps) was causing crashes on some platforms due to stack overflow
since VLA temporary buffers were used.
Replace VLAs in computeSignalProperties() and removeSignalOffset() with
heap-allocated buffers instead.
- "lf cotag reader": now behaves mostly the same as "lf read",
except it is dedicated for COTAG.
- It makes sure to send COTAG start sequence and to use
real time sampling mode to get enough samples.
- "lf cotag demod": Working client-side COTAG demodulation implementation
(high-low raw demod + Manchester demodulation from high/low demod).
- Now uses samples directly from g_GraphBuffer
- Supports 3 types of COTAG preamble (1 active, 2 passive), which
can start anywhere in the samples.
- Prints full 128-bits of COTAG tag data in 3 formats: raw,
groupped by nibbles, and in hex, and identifies and
prints out the card number.
Signed-off-by: andrej@towelbyte.net
Continuous 16-slot inventory now shows a persistent, in-place presence table: one row
per UID seen this session (kept as rows, never removed), redrawn in place each scan with
present / gone (Ns ago) status and a present/total count.
Also keep the RF field up across scans in continuous mode (drop it once on exit) instead
of re-initialising every round -- faster, and avoids per-scan 'Setting ISODEP' churn when
APDU logging is enabled. Fix the reader help text (the polling loop exits on Enter, not
the pm3 button).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 16-slot inventory reused the single-slot read timeout (ISO15693_READER_TIMEOUT,
~1558us) for every slot, so each empty slot waited the full window. That timeout only
needs to catch the START of a response (a SOF) within t1 (~320us)+margin -- once a SOF
is seen it stops applying and the full response is still received. Add a dedicated
ISO15693_INVENTORY_SLOT_TIMEOUT (~755us) for the inventory slot 0 + EOF slots, leaving
the single-slot and WRITE timeouts untouched.
Verified on-device via hf 15 list (carrier-period timestamps): per-slot ~1.0ms vs
~1.8ms, ~1.8x faster rounds, no tags missed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add ISO 15693 16-slot inventory with anti-collision tree-walking, reachable via 'hf 15 reader --all'; single-tag reading stays the default. The firmware steps the 16 slots with EOF markers and flags 'signal but no decode' slots as collision hints; the client walks the UID mask tree, validates CRC per slot to confirm real collisions, and dedups discovered tags. Single-tag reading (default) and 16-slot inventory (--all) both run under hf 15 reader.