Also known as: HackRF, HackRF One
HackRF One is an open-source, wideband, half-duplex software-defined radio transceiver from Great Scott Gadgets, covering 1 MHz to 6 GHz with up to ~20 MHz bandwidth and the ability to transmit.1
Overview
Its huge range and TX capability make it popular for experimentation, but it uses 8-bit sampling (less dynamic range than Airspy) and transmit is irrelevant to receive-only scanning.
Relevance to SDR
For decoding trunked voice, HackRF is overkill; an RTL-SDR or Airspy is usually the better fit, but GopherTrunk can use it as a receiver.
Setup (Linux)
GopherTrunk talks to the HackRF directly over USB — no libhackrf or
hackrf-tools install required. The one host-side step is a udev rule so
non-root processes can open the device node. Without it, gophertrunk sdr list
still shows the device (it only reads sysfs), but opening it — sdr list
--probe, sdr doctor, and normal capture — fails with permission denied on
/dev/bus/usb/….
sudo tee /etc/udev/rules.d/20-hackrf.rules <<'EOF'
# HackRF One / Jawbreaker / Rad1o (Great Scott Gadgets, VID 0x1d50)
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6089", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="604b", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="cc15", MODE="0666"
EOF
sudo udevadm control --reload
sudo udevadm trigger
Unplug and re-plug the HackRF once so the rule applies to a freshly-enumerated
device. Swap MODE="0666" for MODE="0660", GROUP="plugdev" if you’d rather
scope access. Then confirm:
gophertrunk sdr list --probe
Setup (Windows)
GopherTrunk drives the HackRF through the in-box WinUSB driver — no
libhackrf/hackrf-tools and no SoapySDR install
required. A HackRF One advertises a Microsoft OS (WCID) descriptor, so Windows
10/11 usually binds WinUSB automatically and it just works: plug it in and run
gophertrunk sdr list --probe
gophertrunk sdr doctor
sdr doctor prints a row per known SDR (RTL-SDR and HackRF) showing which
function driver is bound and whether it’s the expected WinUSB. If the HackRF row
shows STATUS BAD — or sdr list --probe reports WinUsb_Initialize failed —
a different driver is bound. Fix it with Zadig:
- Run Zadig, then Options → List All Devices.
- Select the HackRF One entry (Interface 0).
- Choose WinUSB as the target driver and click Replace Driver.
If --probe fails with an access-denied error, another program (SDR#, GQRX,
SDRangel, the HackRF tools) already holds the device — close it and retry.
Using the HackRF with the daemon
gophertrunk sdr list only enumerates devices; the daemon (and the web UI
Devices panel) opens the SDRs named in your config.yaml. If the panel says
“No SDRs known to the daemon”, add the HackRF under sdr.devices:
sdr:
sample_rate: 8_000_000
devices:
- serial: "0000000000000000457863c8284a625f" # from `gophertrunk sdr list`
role: control # or voice / wideband
gain: auto # or tenths-of-dB, e.g. "320" for 32.0 dB
bias_tee: false
Copy the serial straight from gophertrunk sdr list. The match is
case-insensitive and tolerant of a partial serial — a distinctive tail like
457863c8284a625f, or a value captured from an older build that displayed only
the 0000000000000000 prefix, still binds as long as it’s unambiguous (the
daemon logs when it matches by a partial serial). With multiple HackRFs, use the
full serial so each entry pins exactly one device.
Serial number. A HackRF reports a full 32-hex-digit
part_id + serial_nostring — the leading 16 digits are a constant prefix (commonly all zeros) and the trailing digits are the unique part.gophertrunk sdr listprints the whole string, matchinghackrf_info’s “Serial number”.
Sources
-
HackRF One — Wikipedia, on the HackRF One wideband half-duplex transceiver and its specifications. ↩