Repository navigation
Releases
Releases · lukejenkins/diaggulp
diaggulp 2026.11.8
diaggulp 2026.11.8, the first release on PyPI: pip install diaggulp (extras: serial, decode). The PyPI version is the same code as this tag.
Packaging
- The base install depends on
diagmunge>=2026.11.8, and thedecodeextra ondiaggrok>=2026.11.8, from PyPI instead of pinned git URLs. Mixed installs no longer fail withResolutionImpossible. - The PyPI page carries the README, license and project links.
Changes
- Telit arming in seconds. On Telit modems each SET_MASK acknowledgment was often read during the write that sent the next command, and was missed, so every group waited out a 4 s timeout. Replies read during the write now count. Start logging on an LM960 arms in about 2 s instead of about 33 s.
- A stop while arming still disarms. From the first latching arm until the read loop starts, SIGTERM / SIGINT / SIGHUP are held and acted on once setup finishes, so the stop always reaches the disarming teardown instead of leaving the modem's masks armed.
- The SPC step sends
DIAG_SPC_F(0x41), matching diagmunge; it used to send 0x46.
diaggulp 2026.10.31
diaggulp 2026.10.31. Pins diagmunge v2026.10.31; the decode extra pins diaggrok v2026.10.31.
New
--pcapreplay works again on an install with thedecodeextra. Inv2026.10.13it refused, because its replay core was not available to a public install; the core is nowdiagmunge.diag_source.--disarm-logs-on-exit: on exit, clear the binary log mask (LOG_CONFIG op 0) and event reporting, then verify on the stream that LOG and event frames stopped. Both are sticky on the modem, so a left-armed port otherwise keeps streaming to nobody and floods the next reader. Use it with--disarm-qsh-on-exitand--restore-f3-mask-on-exitfor a one-shot capture.- Rotating captures anchor every segment. With
--rotate-size/--rotate-interval, each segment now gets its own timestamp anchor, so every file maps DIAG time to host / UTC time on its own. --wait-readykeeps reopening the port until DIAG answers, for a modem that re-enumerates on USB.
Fixes
--pcap-outno longer breaks a live, non-rotating capture. It reused the capture writer's variable, so the capture loop wrote to the pcap writer, raised, and left a 0-byte capture.- Teardown with any
--disarm-*-on-exit/--restore-f3-mask-on-exitflag completes even when the process is signalled again, receives SIGHUP, or loses its stderr pipe. Only SIGKILL can cut it short. -o /dev/nullis a valid sink (no output lock on a non-regular file), so two concurrent quiesce runs no longer refuse each other.- The all-logs mask handshake fails clearly on a "success" reply with all-zero log ranges, instead of arming nothing silently.
Install
diaggulp is not on PyPI. Install it from GitHub at the tag:
pip install "diaggulp @ git+https://github.com/lukejenkins/diaggulp@v2026.10.31"
pip install "diaggulp[serial] @ git+https://github.com/lukejenkins/diaggulp@v2026.10.31" # + live USB-serial capture
pip install "diaggulp[decode] @ git+https://github.com/lukejenkins/diaggulp@v2026.10.31" # + --decode, --pcap-out, --pcap replayThe base install needs diagmunge and zstandard; it pulls diagmunge at the tag it pins.