Twelve projects built by the Polish ham radio community — from a base station and SDR receivers, through mobile apps, to a SIM card applet. All hand-built, on open hardware.
📡
TetraSpot — TETRA hotspot
TETRA stack — base station (TETRA hotspot) with microservice architecture
Pre-alpha
TetraSpot is an implementation of the TETRA protocol stack. The project enables running a TETRA base station with support for voice calls (group, individual simplex and full-duplex), SDS messages, packet data with internet access, GPS location (LIP) and integration with external networks (TetraPack via the TetraPoland hub, SIP/PABX). The microservice-based architecture allows flexible deployment — from a single Raspberry Pi 5 to multi-site configurations.
Features
Full BS radio stack: PHY → LMAC → UMAC → LLC → MLE → MM/CMCE/SNDCP
SYNC/SYSINFO broadcast — network visible as a valid TETRA network
Terminal registration (MM Location Update) and group attachment
Group voice calls — our own ACELP codec implementation per the ETSI specification
Individual P2P calls (half-duplex and full-duplex)
Floor control for half-duplex calls
SDS messages — individual and group, send, receive, store & forward
Private-call relay between apps — the hub brokers the call setup
GPS/LIP location — terminal position tracking
Packet data — the radio gets an IP address and reaches the internet through the station
WAP portal on the radio — the handset’s own browser opens pages served by the station: cell status, call log with callsigns, SDS log and the list of attached radios
Voice takes precedence over data — a call reclaims the packet-data timeslot, and a dormant radio is woken when data arrives for it
Dual carrier — more simultaneous calls from one station, with the data channel on its own carrier
APRS bridge — radio and station positions reach APRS maps, with callsigns mapped to radio numbers
Optional TEA1 authentication with whitelist
OTAR key distribution (Over-The-Air Rekeying) — SCK/CCK/GCK
Dynamic group assignment (DGNA)
Sign in to the network with BrandMeister credentials
Integration with TetraPack via the TetraPoland hub
TetraPoland hub: floor arbitration, dashboard accounts, event log and live updates
TetraPoland apps for Android and iOS recognized in the hub — with each client’s version
Hub admin console: talk straight from the browser onto the air, listen in on a chosen source (group, station or app), record calls and ban stations
Remote station control over SDS — a status or a text message (restart, reboot, power off), with delivery acknowledgement
Echo (parrot) service — call in and hear yourself, to check network access and audio quality
SIP/PABX telephony gateway
GSM cellular gateway — an SMS from the mobile network reaches the radio as SDS and back
The first SDR terminal in ham radio with hardware requirements this modest
Alphasince March 2026
One device instead of several radios — Multi-Radio today works in nine systems: analogue FM (with AM and SSB), TETRA, DMR, P25, M17, D-STAR, YSF (System Fusion), plus NXDN and dPMR — the last two not yet verified against a commercial radio. The whole thing fits on a Raspberry Pi with a single SDR board. We have been building it since March 2026, and it is the first SDR terminal in the ham radio world with hardware requirements this modest: it registers with the network, authenticates, attaches to talkgroups, transmits and receives voice and exchanges messages — without a commercial radio costing thousands. Every mode is checked against real gear: DMR against an AnyTone, P25 against a Harris, YSF against a Yaesu, D-STAR against an ICOM, and TETRA against a Motorola EBTS and a TetraSpot. The radio can also cycle through the systems on its own and stop wherever someone is transmitting. You drive it from a phone app, from the browser or from the touch panel on the station itself, and all the credentials — ISSI, MCC/MNC and talkgroups — go in online. No programming cable, no vendor software, no codeplug procedure.
Operating modes — working today
Analogue FM — receive and transmit, narrowband and wideband
AM and SSB (LSB/USB) — new analogue modes alongside FM
TETRA TMO — terminal registered to the network, checked against a Motorola EBTS and a TetraSpot
TETRA DMO — live monitoring of direct-mode traffic
DMR — two-way voice, confirmed on air against an AnyTone AT-D878UVII Plus
P25 — two-way voice, confirmed on air against a Harris P7100
M17 — two-way voice between our own stations; not yet tested against a commercial radio
D-STAR — two-way voice, confirmed on air against an ICOM ID-51
YSF (System Fusion) — two-way voice, confirmed on air against a Yaesu FT-991A
NXDN — full voice path (transmit and receive); not yet verified against a commercial radio
dPMR — full voice path (transmit and receive); not yet verified against a commercial radio
Mode switching at the press of a button — the new system is ready in about a second
Scanning across systems — the radio cycles through the modes and stops wherever someone is transmitting
Applications
Voice
Group calls on a TETRA network
Individual (private) calls
Conversations in DMR, P25, M17, D-STAR and YSF — transmit and receive
Monitoring TETRA direct mode, outside infrastructure coverage
Analogue FM communication from the same device
Data
SDS text messages with delivery reports
GPS position reports (LIP) — tracking on the map
Status messages — canned reports at one button press
Callsign, short messages and GPS position on air in D-STAR
Where it fits
An affordable terminal where a commercial radio costs too much
A monitoring and test station while building out a network
Learning and experimenting — full insight into what happens on air
Nine systems from one device, instead of buying several radios
Already working in TETRA mode
Network registration and TAA1 authentication
Attaching to talkgroups
Group and individual calls — setup and release
Voice reception (our own ACELP codec implementation)
Live view of network parameters and received signal level
Login settings configured online — no cable, no codeplug
Already working in the digital modes
DMR: live reception — who is transmitting, to which talkgroup, on what frequency
DMR: voice transmission straight on air with a PTT button
DMR: your own ID, talkgroup, Color Code and power set from the app
P25: voice transmission and reception with the radio and talkgroup identifiers decoded
P25: your own NAC, talkgroup and transmitting identifier set from the app
M17: two-way voice with the callsign in every frame — checked between our own stations
D-STAR: two-way voice, callsign and short messages
YSF (System Fusion): two-way voice, confirmed against a real Yaesu radio
TETRA DMO: monitoring — who is transmitting, to whom, and on which network
NXDN and dPMR: voice transmits and receives on our own hardware — compatibility with a commercial radio still unconfirmed (no radio to test against)
Optional voice encryption in the digital modes (DMR and P25)
Scanning across systems, stopping on activity — dwell time per mode is configurable
S-meter and receive/transmit indicators in every mode
Control — phone, browser, panel
Android app — full control of the radio from your phone
Pick the link to the phone: automatic, Bluetooth or Wi-Fi
PTT, monitoring and a live view in every mode
Frequency, talkgroups and parameters changed without touching the station config
Cross-system scanning started from the app — with a view of the mode the radio stopped on
Web panel still available — the same features from a browser, audio included
Touch control head on the station — every mode and setting, without a phone or a computer
Bluetooth pairing opened deliberately and only briefly — nobody outside takes over the transmitter
Paired-phone management — device list and unpairing from either side
Battery (UPS) monitoring — charge level, charging state and power draw in the app
Remote restart and shutdown of the station from the app
In development
Verifying NXDN and dPMR against commercial radiosTransmission in TETRA direct mode (DMO)Voice transmission in TETRA network mode (TMO)Mutual authenticationPacket data transmissionDMR through a repeater (time slots)Running several modes at once"Plecki" back-plate module — the whole Multi-Radio station on the back of a smartphone, with its own battery and a 2 W amplifier (architecture and parts list done, schematic and PCB next)
Hardware requirements
Raspberry Pi · SDR HAT — that is all it takes to have a nine-system terminal. The board handles one mode at a time, so you switch between systems at the press of a button.
Web-based TETRA network analyzer on Raspberry Pi. Real-time monitoring of 64 channels with voice playback, call recording, spectrum analysis, SDS decoding and terminal location tracking — all from a browser.
Features
Monitoring
Real-time monitoring of 64 TETRA channels
GSSI/ISSI identifier display
Call type recognition (group, individual, PSTN)
Encryption detection (none / TEA1)
Color-coded channel activity grid
Audio
Live call playback (our own ACELP implementation)
Automatic call recording to MP3
Channel selection and muting
Download and manage recordings
Spectrum & signal
FFT spectrum with waterfall visualization
DQPSK constellation diagram
Signal/noise/SNR monitoring
Quality metrics: MER, burst errors, carrier number
AFC tracking (automatic frequency correction)
Data
SDS message decoding
Terminal location tracking via LIP protocol
Call registry with full session history
Network statistics (call count, active terminals)
Export reports to PDF
Network
MCC/MNC identification with operator name
Known networks database with quick tuning
Neighbor frequency detection
Auto-tune to NETINFO frequencies
Auto PPM correction from AFC value
System
Responsive web UI (desktop and mobile)
Bilingual UI (Polish / English)
Light / dark theme
HTTPS with SSL certificate
Optional password protection
Support for multiple SDR receivers (RTL-SDR, HackRF, Airspy, SDRplay, LimeSDR, USRP)
Android app connecting to the TetraPoland hub over a fast, resilient QUIC link. It works as a software TETRA terminal — users get full radio functionality (group and individual calls, SDS, talkgroup scanning) on a regular phone with a cellular or Wi-Fi connection. Compatible with hardware PTT buttons, wireless Bluetooth LE buttons and headsets (SCO). It supports private calls between users, sign-in with your BrandMeister network credentials, and GPS positions reported to the tetra-poland.pl map.
Features
Group PTT calls (RX/TX) with floor control
Individual calls (half/full-duplex)
Sign in with your BrandMeister network credentials
SDS messages — individual and group, with delivery reports and quick replies
Talkgroup scanning with hold, priority and DSP presets
GPS position reporting to the tetra-poland.pl map and GPX track logging
Bluetooth LE PTT buttons (PTT-Z01, AnyTone, HM-10)
Hardware PTT and Bluetooth SCO headset
Own ACELP codec implementation per the ETSI specification
QUIC transport (Brew-over-QUIC) — fast resume after a network change
Software TETRA terminal for iPhone and iPad — PTT-over-Cellular
TestFlight
The same TetraPoland network, now on iPhone and iPad. The app connects to the TetraPoland hub over the same fast QUIC link as the Android version and turns the phone into a software TETRA terminal — group PTT calls and private calls (simplex and full-duplex) over mobile data or Wi-Fi. A full-duplex private call behaves like a regular iPhone call: it shows on the lock screen and in the system (CallKit). Only an identity verified by BrandMeister (a verified DMR ID) gets on the network — no more anonymous login. Distributed through TestFlight.
Features
Group PTT calls — transmit and receive
Private calls — simplex and full-duplex
Full-duplex calls integrated with iOS (CallKit) — on the lock screen, like a regular phone
Automatic hang-up of a simplex call after a short idle
Call setup tones (ringback)
Talkgroup scanning with answering on the scanned group
PTT beep and an optional roger beep audible to the other side
The tetra-poland.pl map built into the app
Receive-quality bars with a threshold legend
Reception mixes with music and podcasts instead of pausing them
The radio survives a phone call — reception comes back on its own, no re-login
Sign in only with a BrandMeister-verified DMR ID
Optional GPS position reporting to the tetra-poland.pl map
ACELP codec core shared with the Android version, per the ETSI specification
QUIC / WSS transport to the TetraPoland hub
In development
Wireless Bluetooth LE PTT button (PTT-Z01, AnyTone, HM-10) — hardware testing in progressPush notifications — waking the app for an incoming call while it is closedApp Store release (currently available via TestFlight)
How to install
iPhone / iPad · iOS 16+ · TestFlight — install the app through TestFlight (link and invite code on the “Download” page). Current version 1.0.4.
Plugin for ATAK (Android Team Awareness Kit) integrating the tactical map with TETRA radio. Terminal positions (LIP) appear on the ATAK map as CoT (Cursor on Target), SDS messages show as alerts, and PTT allows transmission without leaving the map. Radio connection via USB/Serial, Bluetooth SPP or TCP gateway.
Features
SDS — short text messages (SDS-1 / SDS-2)
LIP — automatic position reporting on CoT map
Status messages — predefined and custom
PTT — transmit button from the tactical map
Group and individual calls
Team positions visible on the ATAK map
Floating PTT overlay on map (draggable)
RX / TX, signal and radio battery indicators
Talkgroup switching from radio keypad (+MCTGS)
Connection: USB/Serial, Bluetooth SPP or TCP gateway
Periodic position reporting (30 s moving / 15 min static)
Auto-reconnect and background operation (foreground service)
🔐
TSIM — TETRA SIM Applet
JavaCard SIM applet for TETRA terminals
JavaCard applet implementing the TETRA identity module (TIM/TSIM) per ETSI TS 100 812-2. Provides the full TAA1 authentication chain (HURDLE + TA11/TA12/TA21/TA22/TB4), OTAR key management (TA32/TA52/TA71/TA82/TA92) and the DF_TETRA file structure with required EFs (ITSI, SPN, forbidden networks, SCK/CCK/GCK addresses). Operates via UICC/APDU interface — can replace the original card in any TETRA terminal.
ETSI TS 100 812-2 V2.4.1 — TSIM ApplicationETSI EN 300 812-3 V2.3.1 — IC card TSIMETSI EN 300 392-7 — Security (TAA1, TEA1)
🎛
TETRA Remote Head
Remote TETRA radio control panel via PEI
Web control panel for a Motorola TETRA radio driven by AT commands over the PEI (RS232) interface. The backend exposes a REST API, SSE event stream and full-duplex audio over WebRTC — so any browser can operate the radio like a physical control head: group and individual calls, SDS, talkgroup switching, scanning, GPS, network status. It can also run as a full remote operator console: it captures the GPS positions of other radios by polling Remote SDS and visualizes them on a map. Designed for vehicle mounting (e.g. BMW R1250RT) with the radio in the case and the panel on a phone. A newer variant integrates a motorcycle-helmet intercom (Cardo) and a wireless PTT button through an ESP32 bridge.
Features
Full radio control via AT/PEI
WebRTC full-duplex audio (RX/TX) with low latency
PTT from the browser (click, key, touchscreen)
Wireless Bluetooth LE PTT button (ELET-PTT603E34)
Motorcycle-helmet bridge: ESP32 + Cardo intercom (HFP) — audio and PTT over Bluetooth
Group and individual calls, SDS
Talkgroup selection and scanning
GPS, RSSI, battery, network status, alarm/TXI
Captures GPS positions of other radios by polling Remote SDS
Live map visualization of terminal positions
Runs as a full remote operator console
Remotely clear an alarm and control many functions of remote terminals (requires the option programmed in CPS)
PEI multiplexer (pei_mux) — shared port for svxlink + remotehead
Radio watchdog — automatic recovery of the radio link
HTTPS + optional authentication
systemd service, autostart
Architecture
TETRA radio (Motorola MTM/MTP)
|
RS232 / PEI (AT, 9600 bps)
|
v
/dev/ttyS2
|
pei_mux (multiplexer: PTY symlinks, AT serialization, URC broadcast)
| |
v v
svxlink tetra_remote_head (web server)
REST :443 SSE :443 WebRTC (audio)
|
ALSA: radio_capture / radio_playback
|
Browser (PWA, control head)
Target deployment: BMW R1250RT motorcycle — radio in the case, phone on the handlebar as the panel.
Tested radios
Motorola MTH800 · MTP700 · MTP850 · CEP400 · MTP35xx · MXP600 · all MTM/MXM · Hytera PTC760 — controlled over the PEI (AT) interface.
🎧
OWRX Mobile (Android)
Native OpenWebRX+ client for Android — by SP8MB
Beta
Native Android client for OpenWebRX+ receivers (luarvique fork). It lets you listen to your own SDR servers in the field — with background audio, a band scanner, a TETRA monitor and an APRS map. It exists because the browser falls short in the field on Android: audio dies with the screen off and an LTE drop needs a manual refresh. A pure client for your own servers (supports nginx basic auth) — it neither contains nor bypasses any encryption.
Features
Receiver
Waterfall and spectrum with a frequency scale (pinch-zoom, pan, tap to tune)
Digital frequency readout — enter MHz with auto-jump to the covering profile
Mute and software volume, squelch with Auto mode
AGC / manual device gain, noise reduction (NR)
Band bookmarks with tags above the scale
Background audio
Background playback with a media notification and wake lock
Silence watchdog (30 s) and automatic reconnection
Resumes last state after an LTE drop (frequency/mode/squelch)
Full session shutdown with one button
Scanner and recording
Three modes: full band, range (from–to), bookmark scan
Carrier detection from FFT, manual or Auto threshold, 8.33 / 12.5 / 25 kHz raster
Blacklist, hit history, beep and vibration on a catch
Recording to .m4a (AAC) and VOX mode (auto-record each transmission)
TETRA and map
TETRA monitor: network (MCC/MNC/LA, ETSI time, encryption), timeslots, neighbors
Active SSIs by category (Real / Address / ESI), MS registrations, SDS
OSM map with APRS/AIS icons — including locally decoded frames
Aircraft rotated by heading (ADSB/VDL2/HFDL), Maidenhead locators
Administration
Manage the OWRX server from the panel (device list, gain, profiles)
Connects to your own OpenWebRX+ servers (nginx basic auth)
Polish-language interface
🌊
OpenWebRX+ TETRA Plugin
TETRA decoder plugin for OpenWebRX+ — by SP8MB
A plugin that adds a TETRA mode to OpenWebRX+: π/4-DQPSK demodulation, L1/L2/L3 layer decoding, ACELP voice playback and a dedicated web panel with network, call and terminal information — all right inside the OpenWebRX+ UI.
GSSI / ISSI with real-ISSI vs ESI-alias distinction
Timeslot state (Traffic / Control / Common-Ctrl / Reserved / Unalloc) with TTL
Neighbor cell list (cell_id, carrier, DL freq, load)
Active SSIs and MS registration events (LU Accept/Reject, attach/detach, auth)
SDS messages with protocol and delivery-status decoding
Floating event window with filters, G/SSI label editor, CSV export, remote and compact modes
🔎
TETRA Air Trace
TETRA signaling decoder over the radio PEI — by SP8MB
A tool for capturing and analyzing TETRA air-interface signaling over the PEI (Peripheral Equipment Interface) of Motorola radios (MTM800 / MTP850). It connects to the radio over serial or USB, enables trace mode and decodes frames live — calls, registrations, SDS, GPS, SYSINFO. Available as a Windows app, an Android app and a desktop tool.
Motorola MTH800 · MTP700 · MTP850 · CEP400 · MTP35xx · MXP600 · all MTM/MXM · Hytera PTC760 — connected over PEI (ESC P … ESC S), 115200 8N1, serial or USB OTG.
Platforms
Windows appAndroid appDesktop tool
📈
Spectrum & EMC Analyzer
Service spectrum analyzer with a TETRA decoder — by SP8MB
Pre-alpha
A software radio spectrum analyzer with a web interface that replaces several separate boxes on the service bench. It does three things at once: shows a live spectrum with automatic signal detection and tracking, runs lab-grade measurements (channel power, occupied bandwidth, adjacent-channel power, harmonics) and performs electromagnetic-compatibility (EMC) testing against CISPR/EN55032 profiles — from prescan to a quasi-peak report. In live traffic it recognizes and decodes emissions, including TETRA (network TMO and direct-mode DMO) with voice playback, as well as DMR, P25, M17, YSF and D-STAR. It works with a low-cost SDR receiver or drives a Rigol lab analyzer, and runs in a simulation mode with no hardware at all.
Features
Spectrum & signals
Live spectrum with a waterfall
Automatic signal detection (percentile baseline + OS-CFAR)
Tracking of emissions appearing and disappearing (NEW / GONE)
Emission-type recognition and demodulation
Measurements
Markers, channel power, occupied bandwidth (OBW)
Adjacent-channel power (ACP), carrier-to-noise (C/N)
Harmonics and third-order intercept (TOI)
EMC
CISPR32 / EN55032 profiles
PRESCAN → peak list → quasi-peak measurement → report
Hardware quasi-peak detector
HTML / SVG report
Decoders
TETRA TMO and DMO — with voice playback (our own ACELP codec implementation per the ETSI specification)
DMR, P25, M17, YSF and D-STAR
AES-256 / RC4 decryption from a key store
Network, call and identifier view
Hardware
Low-cost SDR receivers (RTL-SDR, PlutoSDR)
Rigol DSA815-TG lab analyzer (SCPI control)
Simulation mode — works with no hardware
Validated on hardware
Spectrum with anomaly detection and full Rigol control (EMC and measurements) on a real analyzer — and TETRA decoding confirmed on a live 440 MHz signal, with voice recovered from a captured group call.