Roadmap
What’s still on the table. Order isn’t fixed; each item is
contained to its own package and lands independently. The historic
log of shipped work lives in
CHANGELOG.md.
DMR ARC4 / RC4 known-key voice decryption (issue #276)
DMR systems that protect voice with ARC4-based “Enhanced Privacy”
can be given known keys per system under
trunking.systems[].encryption_keys. The decode pipeline is
complete for unencrypted DMR voice — it decodes end-to-end to a
playable WAV via the DMR voice superframe decoder + AMBE+2
forward-error-correction
(internal/radio/dmr/voice/),
the composer DMR voice chain, and the AMBE+2 3600x2450 vocoder.
The dependency-free RC4 keystream generator
(internal/crypto/rc4/)
is in place; the one remaining stage for encrypted calls is the
in-process RC4 descramble (PI-header parse + keystream
application). See dmr-encryption.md for the
full status, configuration guide, and out-of-band decode recipe.
Decryption is known-key only — no key recovery — matching the SDRTrunk / DSD-FME / OP25 model.
DVSI USB-3000 / AMBE-3003 hardware backend
The Vocoder + AMBE-3003 wire protocol + voice.Vocoder
interface conformance ship in
internal/voice/dvsi/
behind -tags dvsi. CI exercises the wire protocol + Vocoder
plumbing through the scripted mock Transport and the
software-loopback Transport (make test-dvsi).
The USB / FTDI bulk-endpoint plumbing that talks to a physical
chip remains a stub returning ErrNoDevice — the recorder
fallback chain activates cleanly when no chip is connected. The
actual FTDI hardware integration lands when a DVSI USB-3000 is
available for round-trip testing.
Vocoder level calibration (reference data)
The plumbing ships — comparison harness at
internal/voice/calibrate, per-vocoder testdata READMEs at
internal/voice/{imbe,ambe2}/testdata/, end-to-end recipe at
voice-calibration.md, and a one-off CLI
wrapper at cmd/voice-calibrate:
go run ./cmd/voice-calibrate -raw call.raw -ref-wav ref.wav -vocoder imbe
Operators just need to drop reference WAVs decoded by DSD-FME /
OP25 from the same .raw into testdata; the existing calibrate
tests run unguarded once both files are present.
AMBE+2 DTMF dual-tone synthesis (b₁ ∈ [128, 143]) is wired
against the ITU-T Q.23 4×4 matrix. Knox / call-alert pairs
(b₁ ∈ [144, 163]) are vendor-specific — operators with a
per-vendor reference register the (freqA, freqB) pair via
ambe2.SetKnoxTone or load a curated ambe2.KnoxPreset bundle
via ambe2.RegisterPreset.
YSF on-air interleaver / puncture validation
The spec-level on-air codec ships in
internal/radio/ysf/fich_trellis.go’s EncodeFICHOnAir /
DecodeFICHOnAir per the MMDVMHost / DSDcc / Pi-Star reference
(puncture positions {0, 1, 102, 103}, column-major 10×10
interleave). Unit tests confirm every single-bit-flip is
Viterbi-corrected.
The remaining work is calibration against a real captured YSF
transmission — if the captured FICH fails CRC after on-air
decode, swap to the alternate schedule per
samples/ysf/README.md.