Open-source host software for the Expert Electronics SunSDR2 DX Gen6 transceiver — a clean-room replacement for ExpertSDR3.
Written in C++17 with Qt 6 / QML for the GUI. No Java, no Electron.
Early development / proof-of-concept. Connection and IQ streaming work; DSP and UI are actively being built out.
- UDP control protocol (binary, ArtemisSDR-verified)
- Power-on macro (DX variant, 32 steps)
- IQ streaming at 312 500 Hz / 24-bit (opcode 0xFE)
- FFT spectrum display (4096-point, Hann window, EMA smoothing)
- Waterfall (JET colormap, pixel-mapped)
- SSB / AM / NFM / CW demodulation pipeline
- 48 kHz audio output via Qt Multimedia
- TCI server stub
- Transmit / PTT
- CAT / Hamlib
- Multiple VFOs / DDC channels
src/
device/sunsdr2dx/ # Hardware abstraction: UDP control + IQ streaming
protocol.h # Binary protocol constants (opcodes, packet layout)
hardware.cpp # Power-on macro, keepalive loop, RX thread
stream.cpp # 24-bit IQ decoder (Q-first LE wire format)
discover.cpp # Network discovery (future)
dsp/
spectrum.cpp # FFT spectrum processor (FFTW3, main-thread timer)
audio.cpp # Decimation FIR chain → SSB/AM/NFM/CW → 48 kHz
gui/
main.cpp # Qt application entry point
HardwareController.h # QObject bridge: C++ ↔ QML
qml/
main.qml # Top-level window, VFO, band selector, S-meter
SpectrumPanel.qml # Canvas-based spectrum display
WaterfallPanel.qml # Canvas-based waterfall (TypedArray pixel buffer)
ConnectDialog.qml # IP / connect dialog
tci/
server.cpp # TCI (transceiver control interface) stub
The SunSDR2 DX uses a custom binary UDP protocol on ports 50001 (control) and 50002 (IQ stream). The protocol was reverse-engineered from ArtemisSDR (GPL v2, K0KOZ).
Key facts:
- Magic bytes:
0x32 0xFF(DX); PRO uses0x01 - Control port 50001: 18-byte header + payload, little-endian
- Stream port 50002: 1210-byte IQ packets (10-byte header + 200 × 6-byte samples)
- Wire sample order: Q[23:0] LE then I[23:0] LE per sample
- Host must send
RX_KEEPALIVE(opcode0xFE) at ~195 packets/sec or radio disconnects
- CMake ≥ 3.21
- Qt 6.5+ (
Qt6::Quick,Qt6::Multimedia) - FFTW3 (double precision)
- C++17 compiler (GCC 12+ or Clang 15+)
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
./build/src/gui/ikarussdrcmake -B build-rpi5 -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-RPi5.cmake
cmake --build build-rpi5 --parallel- Power on the SunSDR2 DX
- Connect host to the radio via Ethernet (default:
10.83.1.200) - Launch
ikarussdr - Click Connect, enter the radio IP, confirm
- Spectrum and waterfall appear after ~3 s (radio initialization sequence)
Note: Without an antenna the noise floor is below −120 dBFS — the spectrum will appear empty. Connect an antenna or lower
dbMinin the QML.
GPL v2 — derived protocol knowledge from ArtemisSDR (GPL v2, © K0KOZ).
Birger Peer Kuepper, DG6EU