Native POCSAG paging transmitter for the HackRF, with a Qt desktop GUI. Compose one-off pages, drive transmissions from live feeds (CSV files, APRS-IS), and operate as a legitimate amateur station with automatic CW identification and band-plan awareness.
Licensed operators only. This software keys a radio transmitter. You are responsible for operating within your license privileges, on frequencies and at power levels you are authorized to use, and for identifying your station. POCSAG paging on amateur bands is regulated; know your local rules.
- Native
libhackrftransmit path (no shelling out to external tools) - POCSAG encoder: alphanumeric, numeric (BCD), and tone-only; correct BCH(31,21) + parity; multi-message batching
- FSK modulator with optional Gaussian (GFSK) pulse shaping, key-edge ramping, and PPM frequency correction
- Qt6 GUI:
- Transmit — frequency, baud (512/1200/2400), deviation, gain, amplitude, invert, capcode, function, content type, message
- Feeds — CSV file feeds and APRS-IS with callsign → capcode mapping
- Station — operator callsign, region/band-plan, automatic CW (MCW) ID
- Arm gate + ON-AIR indicator; settings persist between sessions
- CLI tools:
pocsag_tx,pocsag_test,hello_hackrf
- HackRF One (or compatible)
- A 70 cm band-pass filter and a small PA are strongly recommended — the HackRF outputs only ~ -10 dBm and produces wideband products; filter and amplify before any antenna.
- On Windows the HackRF needs the WinUSB driver (install via Zadig).
From the MSYS2 MINGW64 shell:
pacman -S --needed \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-ninja \
mingw-w64-x86_64-hackrf \
mingw-w64-x86_64-qt6-base \
mingw-w64-x86_64-qt6-tools
cmake --preset windows-mingw
cmake --build --preset windows-mingwBinaries land in build/bin/. To make the GUI self-contained for distribution:
windeployqt6 build/bin/openpocsag-gui.exethen copy any remaining MinGW runtime DLLs reported by ldd build/bin/*.exe.
Install Qt6, libhackrf, CMake, Ninja and a C/C++ toolchain from your package manager, then:
cmake --preset linux # or: macos
cmake --build --preset linux# transmit an alphanumeric page (default 439.9875 MHz, capcode 1139775)
pocsag_tx -m "HELLO"
# numeric page
pocsag_tx -N -m "12345"
# dump IQ to a file instead of transmitting
pocsag_tx -m "HELLO" -o page.cs8
# send a CW (MCW) identification
pocsag_tx -C "N0CALL" -W 20- CSV — one page per line,
capcode,message(blank lines and#comments ignored). Appended lines are transmitted live. - APRS-IS — connects to an APRS-IS server, maps callsigns to capcodes, and
pages when a matching message arrives. Receive-only login uses passcode
-1.
Feed definitions are stored as JSON in the app config directory and can be shared/imported.
core/ libopenpocsag (POCSAG encode, FSK/CW modulation, HackRF TX) + C API
cli/ command-line tools
app/ Qt6 GUI
GPL-3.0-or-later. See LICENSE.
Issues and pull requests are welcome. If OpenPOCSAG is useful to you, please consider supporting development.