u/MagicMatt84

▲ 0 r/GopherTrunk+1 crossposts

GopherTrunk v0.1.7 — P25 cc-lock fixes, per-system Prometheus metrics, RadioReference import unblocked

v0.1.7 is out.

This release is mostly observability + fixing two silent-failure

modes that kept the P25 control channel from locking on a freshly

plugged-in RTL-SDR. Twelve PRs.

## The fixes that matter if you actually run this thing

- **P25 cc never locks after device open** (issue #275). The pool

was opening devices and applying PPM / gain / bias-tee but never

calling `SetSampleRate`. The chip's resampler stayed at whatever

divisor it powered up with while every decoder did matched-filter

and symbol-clock math against your configured rate. Symbol timing

wrong, FSW sync never matched, and the only log line you saw was

the cc-hunt retune. Now programs the rate at open and drops the

device if `SetSampleRate` fails.

- **`sdr list --probe` fatal on Windows cold boot.** The WinUSB

warmup write returned `ErrTimeout` (Windows equivalent of the

Linux EPIPE stall), but the bring-up `USBDEVFS_RESET` + re-claim

envelope only matched EPIPE. Now treats timeout as resetable too.

- **RadioReference PDF parser broken on newer exports.** RR shipped

a new PDF font encoding (proper CMap instead of +27-shifted raw

glyphs); the extractor now sniffs anchor strings and only applies

the shift when needed.

- **Non-US RR systems work.** Australian MMR layout (dash-joined

`RFSS-Site (X-Y)` rows, `System Frequencies` / `System Talkgroups`

markers, `Display` alias for `Alpha Tag`, `a`-suffix secondary cc,

hex columns with leading zeros) is now accepted.

- **`import-pdf` TUI usable on large systems.** Sites + talkgroups

paginate to terminal height with pgup/pgdn/home/end/g/G nav and a

`Site N of M (showing X-Y)` indicator.

## New observability

- **`gophertrunk_sdr_iq_power_dbfs{system}`** updated ~1 Hz from the

cc decoder. Idle ~-45 dBFS, healthy ~-25, > -3 means the ADC is

clipping. Paired with a throttled `iq power very low — check

antenna, gain, USB` log when it drops below -55 dBFS. Catches the

gain-at-zero / antenna-disconnected / USB-stuck cases without

flooding the log.

- **Per-system call rate, encryption breakdown, cc transitions, SDR

tuning state** (gain / auto-gain / PPM / bias-tee) — all as labeled

Prometheus series. `gophertrunk_calls_total` and `_calls_active`

now carry `{system,protocol,encrypted}` labels (breaking — recover

the old shape with

`sum without(system,protocol,encrypted) (...)`).

## New telemetry

- **P25 affiliation + unit-registration events** on

`/api/v1/events`. TSBK opcodes 0x28 and 0x2C were being recognised

but silently dropped at `dispatchTSBK`'s default branch. Now flow

through as `KindAffiliation` and `KindUnitRegistration` DTOs with

pinned JSON shape for Grafana / dashboards.

## Native RadioReference CSV import

`/db/sid/<sid>/download` ships a flat talkgroup-only CSV with no

metadata. New `-name` / `-sysid` flags supply the missing fields;

combine with a `-pdf` (or bundle CSV) for control-channel

frequencies. `-extract-only` dumps positioned-text rows as JSON for

bug-report fixtures so you don't have to share the original PDF.

## Plus

- Per-(VID, PID) bias-tee GPIO table in the pure-Go RTL-SDR driver

— the GPIO 0 constant is gone, the table is the source of truth,

non-standard pinouts can be added without forking the driver.

- "The Story of GopherTrunk" page on the docs site.

## Links

- Download (Linux/macOS/Windows/ARM64): https://gophertrunk.org/downloads.html

- Release notes: https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.1.7

- Full changelog: https://github.com/MattCheramie/GopherTrunk/blob/main/CHANGELOG.md

- Source: https://github.com/MattCheramie/GopherTrunk

Feedback on hardware that still doesn't lock after the cc-rate fix

is the most useful thing you can send — `RTLSDR_DEBUG_USB=1

gophertrunk sdr list --probe 2> usb-trace.log` plus the matching

`LIBUSB_DEBUG=4 rtl_test -t 2> rtl-test-trace.log` is the trace pair

that tells us where librtlsdr and gophertrunk diverge on your

specific dongle.

reddit.com
u/MagicMatt84 — 3 days ago
▲ 37 r/sdr+1 crossposts

Release: GopherTrunk - A new pure-Go digital trunking scanner (P25, DMR, TETRA, NXDN)

Hey everyone,

I want to share a project I’ve been building for the community called GopherTrunk (GopherTrunk.org). It is a software-defined-radio scanner designed to follow digital trunked-radio voice calls and decode them directly to audio.
I wanted to create something incredibly easy to deploy, so the entire engine is written natively in Go. This allows it to ship as a single ~10 MB static binary for Linux, macOS, and Windows without any C dependencies (no librtlsdr or libusb required). It is built to run entirely on a pool of cheap RTL-SDR dongles.

Key Features:

  • Extensive Protocol Support: Decodes P25 Phase 1 + Phase 2, DMR Tier II + Tier III, TETRA TMO, NXDN, Motorola Type II, EDACS, LTR, MPT 1327, dPMR, D-STAR, and YSF.
  • Pure-Go Voice Path: Includes Go-native IMBE and AMBE+2 vocoders, so there is no reliance on mbelib or external DVSI hardware to get intelligible audio.
  • Terminal Interface: Features an 11-panel Bubbletea TUI cockpit for managing systems, talkgroups, and live audio.
  • Easy Setup: Includes an import-pdf command that parses RadioReference.com PDF exports or CSV bundles directly into your config file.

Where I need your help: Every trunked control modulation listed above currently has an end-to-end IQ-to-Control-Channel chain shipping. However, I need folks to throw real-world RF at it! I am actively looking for testers to run real-air captures so I can dial in the vocoder level calibrations and validate the on-air FEC layers.
If you want to test it out, you can grab the prebuilt binaries (including a Windows installer) here: https://gophertrunk.org/downloads.html
Check out the GitHub repo for the full documentation and architecture breakdown. Let me know what you think, what breaks, and what features you'd like to see next!

reddit.com
u/MagicMatt84 — 7 days ago