Skip to content

v1.1 — Production release

Latest

Choose a tag to compare

@n0mjs710 n0mjs710 released this 01 May 22:45
· 52 commits to main since this release

Stable, hardware-verified IPSC↔HBP translator. Tested against a Motorola MOTOTRBO XPR8400 repeater and HBLink4. The main branch at this tag is the recommended starting point for production deployments.

Bug fixes

  • Fix HBP→IPSC voice burst mis-classification — dtype convention mismatch (0-indexed vs HBLink4's 1-indexed) caused wrong packet lengths to be sent to the repeater, producing audio loss for some users
  • Fix IPSC→HBP outbound dtype — bursts B–F now correctly send dtype 1–5 per the HBP/HBLink standard; downstream clients were receiving subtly wrong burst labels
  • Fix dual-timeslot blocking — all call state is now isolated per timeslot; a call on TS1 no longer blocked translation on TS2
  • Add per-TS call timeout — recovers cleanly from a lost VOICE_TERM without manual intervention

Observability

  • Wire logging normalized: both IPSC and HBP emit PROTO RECV/SEND N hex lines, readable by a single log capture
  • New tools/decode_ipsc.py and tools/decode_hbp.py — decode wire logs into human-readable call analysis with LC decode, AMBE hex, RTP sequence gap detection, and burst counts
  • Known-but-unhandled IPSC opcodes now log at DEBUG ("received, not handled") rather than WARNING; genuinely unknown opcodes log at WARNING with the full raw payload

Resilience & hardening

  • IPSC registration hijack protection — only the first registered peer IP is accepted; configurable allowlist
  • Registration config simplified — registration_mode and id_match removed

Testing

  • 51-test suite covering per-timeslot isolation, call timeout, and roundtrip translation scenarios