Skip to content
custosonlinuxPublic

About

Open-source SunSDR2 DX host software — C++/Qt6 replacement for ExpertSDR3

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IkarusSDR

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.

Status

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

Architecture

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

Protocol

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 uses 0x01
  • 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 (opcode 0xFE) at ~195 packets/sec or radio disconnects

Build

Dependencies

  • CMake ≥ 3.21
  • Qt 6.5+ (Qt6::Quick, Qt6::Multimedia)
  • FFTW3 (double precision)
  • C++17 compiler (GCC 12+ or Clang 15+)

Linux

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
./build/src/gui/ikarussdr

Cross-compile for Raspberry Pi 5

cmake -B build-rpi5 -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-RPi5.cmake
cmake --build build-rpi5 --parallel

Usage

  1. Power on the SunSDR2 DX
  2. Connect host to the radio via Ethernet (default: 10.83.1.200)
  3. Launch ikarussdr
  4. Click Connect, enter the radio IP, confirm
  5. 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 dbMin in the QML.

License

GPL v2 — derived protocol knowledge from ArtemisSDR (GPL v2, © K0KOZ).

Author

Birger Peer Kuepper, DG6EU

About

Open-source SunSDR2 DX host software — C++/Qt6 replacement for ExpertSDR3

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages