The D-Star Repeater.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Andy Taylor c2406d9f11
Remove wxWidgets, port to standalone C++17 with cross-platform support
4 months ago
Arduino/RepeaterControl Initial commit. 8 years ago
Common Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
DStarRepeater Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
Data Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
LinuxUSB Initial commit. 8 years ago
debian Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
.gitignore Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
BUILD.md Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
CHANGELOG.md Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
CONFIGURATION.md Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
COPYING.txt Initial commit. 8 years ago
MQTT.md Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
Makefile Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
README.md Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago
schema.json Remove wxWidgets, port to standalone C++17 with cross-platform support 4 months ago

README.md

DStarRepeater

A D-Star digital voice repeater controller for homebrew amateur radio hardware. DStarRepeater interfaces with ircDDBGateway or DStarGateway to provide D-Star networking — callsign routing, reflector linking, and ircDDB.

This is a headless CLI daemon written in portable C++17 with no GUI dependencies. It runs on Linux (x86_64, ARM/Raspberry Pi), Windows, and macOS, and has been tested on Ubuntu 24.04, Debian Trixie, and Alpine 3.21.

Supported Hardware

Modem Interface
DVAP Dongle USB serial
DV-Mega USB serial
GMSK Modem (Dutch*STAR, DUTCH-UHF) USB (libusb)
Sound Card / UDRC ALSA (Linux), PortAudio (Windows/macOS)
MMDVM USB serial
DV-RPTR V1, V2, V3 USB serial or network
Icom Terminal / Access Point Mode USB serial
Split (multi-receiver) UDP network

Quick Start

1. Install dependencies

Ubuntu / Debian:

sudo apt-get install g++ make libasound2-dev libusb-1.0-0-dev libmosquitto-dev

Raspberry Pi (Raspberry Pi OS / Debian):

sudo apt-get install g++ make libasound2-dev libusb-1.0-0-dev libmosquitto-dev wiringpi

Alpine Linux:

apk add g++ make alsa-lib-dev libusb-dev linux-headers mosquitto-dev

Windows and macOS — see the platform-specific notes below.

2. Build

make

3. Configure

Copy the example config and edit for your hardware:

sudo cp /etc/dstarrepeater/dstarrepeater.ini.example /etc/dstarrepeater/dstarrepeater.ini
sudo nano /etc/dstarrepeater/dstarrepeater.ini

See CONFIGURATION.md for the full configuration reference.

4. Install and run

sudo make install
sudo dstarrepeaterd /etc/dstarrepeater/dstarrepeater.ini

Build Options

By default, make produces a release build with MQTT enabled and GPIO enabled on ARM (Raspberry Pi). Any option can be overridden on the command line.

Command Description
make Default build (release, MQTT on, GPIO auto-detected)
make MQTT=0 Build without MQTT support
make GPIO=0 Build without GPIO support (even on ARM)
make GPIO=1 Force GPIO support on non-ARM platforms
make BUILD=debug Debug build with symbols and assertions
sudo make install Install binary, data files, and example config
make clean Remove build artifacts

Defaults:

Option Default Notes
BUILD release Optimised, no debug symbols
MQTT 1 (on) Requires libmosquitto-dev
GPIO 1 on ARM, 0 otherwise Requires wiringPi; auto-detected via uname -m

Dependencies

Required (Linux)

Package Ubuntu/Debian Alpine Purpose
C++17 compiler g++ (GCC 13+) g++ Compilation
GNU Make make make Build system
ALSA dev libraries libasound2-dev alsa-lib-dev Sound card modem support
libusb 1.0 dev libusb-1.0-0-dev libusb-dev USB modem support (GMSK)
Mosquitto dev libmosquitto-dev mosquitto-dev MQTT telemetry (enabled by default)
Linux headers linux-headers Required on Alpine only

Raspberry Pi (additional)

Package Install Purpose
wiringPi sudo apt-get install wiringpi GPIO controller support (enabled by default on ARM)

Note: On newer Raspberry Pi OS releases where wiringpi is not in the repositories, install from the unofficial mirror:

git clone https://github.com/WiringPi/WiringPi.git
cd WiringPi && ./build

Disabling optional features

If you don't need MQTT or GPIO support, you can skip those dependencies and disable them at build time:

# Without MQTT (no libmosquitto-dev needed)
make MQTT=0

# Without GPIO on a Pi (no wiringPi needed)
make GPIO=0

# Without both
make MQTT=0 GPIO=0

Windows

The codebase includes #if defined(_WIN32) blocks for Windows compatibility. A Windows build requires:

Dependency Source Notes
Visual Studio 2019+ or MinGW-w64 Microsoft / MSYS2 Must support C++17 (/std:c++17 or -std=c++17)
libusb 1.0 libusb.info Windows binaries available; needed for GMSK modem support
PortAudio portaudio.com Required for sound card modem support (replaces ALSA)
Eclipse Mosquitto mosquitto.org Optional; only needed for MQTT builds

The provided Makefile targets Linux. For Windows, you will need to create a Visual Studio project or CMakeLists.txt and link against ws2_32.lib (Winsock), portaudio.lib, and libusb-1.0.lib. Serial port, socket, and signal handling code uses Win32 APIs (CreateFile, Winsock2, SetConsoleCtrlHandler) that are included in the Windows SDK — no additional libraries are needed for those.

Note: The K8055 (Velleman) and URI USB controllers are currently Linux-only (they use libusb directly). On Windows they require their respective vendor DLLs, which are not yet integrated.

macOS

Dependency Source Notes
Xcode Command Line Tools xcode-select --install Provides clang with C++17 support
libusb 1.0 brew install libusb For GMSK modem support
PortAudio brew install portaudio For sound card modem support
Mosquitto brew install mosquitto Optional; only for MQTT builds

The Makefile currently targets Linux. A macOS build would need adjusted compiler flags and library paths (e.g. via pkg-config or Homebrew paths). The endian handling and serial port code already support macOS.

Command-Line Usage

dstarrepeaterd <config-file>

The config file path is the only argument. All settings including log directory, verbosity levels, audio paths, and callsign lists are configured in the config file itself.

# Single instance
dstarrepeaterd /etc/dstarrepeater/dstarrepeater.ini

# Multiple instances with separate configs
dstarrepeaterd /etc/dstarrepeater/gb3in.ini
dstarrepeaterd /etc/dstarrepeater/gb7xx.ini

Running as a System Service

A systemd service template is provided in the debian/ directory. The instance name maps to the config filename:

sudo cp debian/dstarrepeaterd.dstarrepeaterd@.service /etc/systemd/system/dstarrepeaterd@.service
sudo systemctl daemon-reload

# Start with /etc/dstarrepeater/gb3in.ini
sudo systemctl enable dstarrepeaterd@gb3in
sudo systemctl start dstarrepeaterd@gb3in

The %i specifier expands to the instance name, so dstarrepeaterd@gb3in runs dstarrepeaterd /etc/dstarrepeater/gb3in.ini.

MQTT Telemetry

When built with make MQTT=1, the daemon can publish live telemetry to an MQTT broker:

  • Log messages — timestamped log output
  • Repeater status — JSON state updates (1/sec)
  • D-Star events — start/end/lost/BER/text in Display-Driver-compatible JSON

See MQTT.md for full details on configuration, topic structure, and JSON format.

Documentation

Architecture

DStarRepeater runs as a single process with multiple threads:

  • Repeater thread — core D-Star protocol state machine (one of four variants based on operating mode: duplex/simplex, TX-only, RX-only, or TX+RX)
  • Modem thread — hardware interface to the radio modem
  • Controller thread — hardware I/O for PTT, heartbeat, and external control pins

The repeater thread communicates with a gateway (ircDDBGateway or DStarGateway) via UDP using the DSRP protocol.

Licence

This software is licenced under the GPL v2. See COPYING.txt.

Credits

Originally written by Jonathan Naylor G4KLX. Based on the original DStarRepeater with wxWidgets dependency removed and ported to standalone C++17.

Powered by TurnKey Linux.