IPSC3 is a Rust-based DMR/IPSC bridge and control stack with a modern web
dashboard and public dashboard clients. It is designed to sit between
Motorola IPSC repeaters, MMDVM trunks, OpenBridge trunks, bMaster+ style
trunks, MMDVM hotspots, MMDVM/Homebrew repeaters, and cellular POC radios
while keeping routing behaviour predictable for RF users.
- Motorola IPSC repeater support.
- MMDVM trunk support, including multiple configured trunk peers.
- OpenBridge trunk support with authenticated DMRD packet exchange.
- bMaster+ style trunk support using the observed IPSC2 keepalive and Motorola/IPSC group voice media path.
- MMDVM hotspot support for simplex and duplex hotspots.
- MMDVM/Homebrew repeater support through provisioned repeater peers.
- Hytera repeater listener and protocol work in progress.
- Static and dynamic talkgroup routing.
- Camp-on logic with per-talkgroup timeout policy.
- Per-talkgroup listen-only policy with voice busy feedback to local RF callers.
- Optional trunk-to-trunk routing control.
- Per-trunk talkgroup mappings for local-to-trunk talkgroup and timeslot translation.
- Per-talkgroup trunk allowlists so selected talkgroups can be restricted to selected trunks.
IPSC3 supports a scan talkgroup on 777 / TS1. Keying
777 puts a repeater or hotspot into scan mode. Activity from
active talkgroups can then be translated onto 777, and replies
made on 777 are translated back to the last active talkgroup.
Scan can be cancelled by keying another talkgroup or by keying
400.
¶ Hotspot Handling
- Simplex hotspots are detected when TX and RX frequencies match.
- Simplex hotspots use one effective slot.
- Simplex hotspots suppress nailed-up traffic while a dynamic group is camped.
- Duplex hotspots behave like two-slot repeaters.
- MMDVM hotspot options can be parsed for IPSC3-specific behaviour such as scan include/exclude filters, talker alias, and dashboard tokens.
- Hotspot dashboard tokens provide scoped self-service access so a hotspot user can start scan, cancel scan, or cancel that hotspot's current dynamic camp without operator access.
- The web, terminal, and Qt overview screens list dynamic camped-on talkgroups and the radio callsigns holding those camps; scan is excluded.
¶ Private Calls and Roaming
- Person-to-person private calls are routed using live roaming data.
- Radios are routed to the repeater, hotspot, or trunk where the destination radio was last seen.
- If the destination is not current in the roaming window, the caller receives an audio busy or unavailable response.
- Parrot
9990 is a special case and bypasses private-call routing so it can answer directly.
- Roaming data can come from last-heard activity, Motorola ARS, and supported data/GPS mechanisms.
¶ DMR Data and GPS
- DMR APRS/GPS capture for configured private-data destination IDs.
- APRS-IS position forwarding from decoded RadioID callsigns via a background worker.
- AnyTone-style GPS/APRS data handling.
- OpenGD77 TA-GPS support for in-band GPS where supported by the radio path, shown as
GD77 in roaming views.
- Motorola ARS registration and presence handling.
- Motorola LRRP GPS polling and response decoding for ARS-present radios.
- Motorola BMS discovery and partial battery/status decode.
- Scheduled Motorola radio-check and LRRP requests defer while the target repeater timeslot is busy.
- ARS radio-check fallback can search nearby connected repeaters and hotspots when a Motorola radio stops responding on its last known endpoint.
- Historical GPS storage and dashboard map display.
¶ Signalling and Audio
- Link, unlink, scan-mode, and timeout voice prompts.
- Talkgroup number plus unlink playback when a camp timeout releases a dynamic talkgroup.
- Parrot on
9990 for group and private calls.
- Parrot plays back the caller audio and announces the caller callsign from RadioID using the NATO phonetic alphabet when available. Unresolved Radio IDs are read digit-by-digit.
- Parrot reports decoded audio as
Level low, Level normal, or Level high, followed by peak, speech RMS, dBFS, and clipping information. Measurements are retained and shown in the matching Last Heard call-history tooltip.
- Audio busy or unavailable prompts for listen-only talkgroups and unroutable private calls.
¶ Dashboard and Clients
- Next.js web dashboard with public and operator/admin views.
- Live repeater, hotspot, trunk, talkgroup, last-heard, roaming, stats, and GPS map views.
- Per-hotspot detail pages can be unlocked by a configured
DashboardToken for limited hotspot-owner controls.
- Integrated CMS for local network information pages.
- MMDVM hotspot BER/RSSI display where supplied by the hotspot.
- Software badges and registration trends distinguish Pi-Star, WPSD, VoxDMR, OpenSPOT, MMDVM, and other reported hotspot software.
- Viewer heartbeat reporting for browser, IPSC3view, and IPSC3qt clients.
- Terminal dashboard client: IPSC3view.
- Qt desktop dashboard client: IPSC3qt.
- Qt 6/C++ Android POC radio client, currently targeting the Retevis L71.
- Separate Rust
ipsc-poc daemon so cellular sessions, RTP jitter, and codec work remain outside the core DMR packet loop.
- Persistent JSON control channel for login, server and talkgroup lists, presence, PTT arbitration, caller identity, status, configuration, and GPS reports.
- NAT-safe UDP/RTP audio using G.711 PCMU, 8 kHz mono, and 20 ms packets.
- One active speaker per talkgroup with app-to-app fanout and DMR-linked group audio through a bounded PCMU/AMBE worker path.
- IPSC3 scan and configured parrot support for POC radios.
- POC roaming, last-heard, live-talkgroup, map, stats, web dashboard, IPSC3view, and IPSC3qt integration.
- Master API server discovery so clients can select VK, ZL, or future published IPSC3 POC servers.
- Retevis L71 Android 10 field-test client with physical PTT/key operation, GPS, local-only WiFi indoor-location cache, LEDs, and Windows/ADB provisioning.
IPSC3 includes an SMS AI worker for parsed TMS messages sent to the DMR data
destination. The worker runs outside the packet path and can build context
from RadioID, roaming, last-heard, repeaters, hotspots, CMS pages, and recent
SMS history. Replies are kept short for the DMR SMS envelope.
¶ SMS Store And Forward
Cross-endpoint radio-to-radio SMS can be intercepted, ACKed, stored, and
delivered by a background worker. The relay uses roaming data to choose the
destination endpoint and prefixes relayed messages with the source callsign
and local time. Motorola ARS radios use confirmed TMS delivery; non-ARS
destinations are sent unconfirmed because many non-Motorola radios do not
reliably ACK network-originated SMS.
- Some routing policy changes are still restart-driven rather than fully hot-reloaded.
- OpenBridge support is newer and should be validated against each connected network.
- bMaster+ support is newer and should be validated with each bMaster+ peer before relying on it for production traffic.
- Hytera support is active protocol work and should be treated as less mature than Motorola IPSC and MMDVM paths.
- SMS support over MMDVM/Homebrew hotspots is implemented for the observed radio paths, but firmware and hotspot behaviour still varies by device.