Native rebuild of Lyra (the Python+Qt6 desktop SDR transceiver
for the Hermes Lite 2 / 2+). The Python tree is preserved in ../lyra/
as the protocol research + doc archive reference; this is a clean ground-
up rewrite using the architecture the project should have started with.
Acknowledgments at a glance: Lyra-cpp incorporates code ported from two GPL-compatible open-source projects: WDSP (Dr. Warren Pratt, NR0V) for DSP algorithms, and the MI0BOT openHPSDR-Thetis fork (Reid MI0BOT/GI8TME, building on Richie Samphire ramdor's upstream maintained at https://github.com/ramdor/Thetis) for the TX baseline ChannelMaster architecture. Both upstream projects are GPL v3+; per-file copyright headers are preserved in every ported file. See NOTICE.md and CREDITS.md for full attribution.
| Layer | Choice |
|---|---|
| Language | C++23 |
| UI framework | Qt 6 (Qt Quick / QML) — Lyra-native |
| Graphics | Qt RHI (Vulkan/D3D12 on Windows, Metal on macOS, OpenGL fallback) |
| RX DSP | WDSP DSP engine (Warren Pratt NR0V, GPL v3+) — loaded natively |
| RX architecture | Lyra-native (no Python, no GIL) + Lyra-native flair (NPE modes, AEPF, captured-profile IQ-domain NR, per-band bounds memory, EiBi overlay, NCDXF beacon follow, ...) |
| TX baseline | Ported from openHPSDR Thetis (MI0BOT fork) ChannelMaster (cmaster, aamix, ilv, supporting modules) — GPL v3+, attributed per file |
| TX DSP additions | Lyra-native (Combinator multiband compressor, Plate Reverb, parametric EQ, formant boost, sibilance enhance, DX cut-through, de-esser, auto-AGC — sit BEFORE the ported TXA chain) |
| FFT | FFTW3 (per-host wisdom-cached on first launch) |
| Wire I/O | Native UDP (QUdpSocket) on dedicated OS threads — no GIL |
| Threading | std::jthread + Qt thread pools, OS-priority + MMCSS later |
| Build | CMake 3.21+ |
| Compiler | MSVC v143 (VS 2022/2026) on Windows; clang/gcc on Linux; Apple Clang on macOS |
| License | GPL v3+ (matches both upstream projects) |
No Python. No GIL. No cffi-on-the-wire-path. No in-process bottleneck.
A working receive-side SDR for the Hermes Lite 2 / 2+, native C++ end to end. (Transmit is on the roadmap; the current build is RX-focused.)
- Radio — HPSDR Protocol 1 discovery (multi-NIC) + live RX off the HL2/HL2+ on dedicated OS threads; auto-connect to the last radio.
- DSP — WDSP RX chain: USB/LSB/CW/AM/FM/DIG modes, per-mode filters, AGC, NR, auto-notch, manual notches, squelch. Audio out the HL2 jack (AK4951) or PC sound card.
- Panadapter + waterfall — Vulkan/RHI scene-graph spectrum with glassy fill/glow, peak-hold markers, noise-floor line, palettes; click/ drag/wheel tuning; draggable RX passband; collapsible waterfall.
- Dockable UI — movable/floatable/tabbed panels (panadapter, tuning, mode+filter, audio, display, band, solar) with save/restore layout + export/import of the full settings profile.
- Band switching + per-band memory — three rows (Ham / BC / Gen), returns to each band's last frequency, mode, and panadapter/waterfall dB ranges; optional 11m/CB band with all-40-channel panadapter markers.
- GEN / TIME / Memory — three general-coverage slots, an HF time-station cycle (WWV/WWVH/CHU/BPM/RWM/…, ordered by your callsign), and a 20-slot frequency memory bank with CSV import/export.
- EiBi shortwave overlay — the EiBi broadcast schedule on the panadapter, on-air-now aware (cyan = live, grey = scheduled), click to tune in AM; in-app download or manual CSV import.
- Band-plan overlay — per-region (US / IARU R1 / R3) sub-band segments, band-edge warnings, digital + NCDXF beacon markers with click-to-tune and live beacon-station tooltips; out-of-band advisory.
- TCI server — TCI v1.9/2.0 (Expert Electronics) over WebSocket: drive frequency / mode / filter / volume from SDRLogger+, Log4OM, N1MM, etc.; a header indicator shows connected-client count; optional audio + IQ binary streaming and Thetis-style emulation/option toggles.
- DX-cluster spots — TCI cluster spots painted on the panadapter (country-tagged, CW-pitch-aware placement), with show/max/lifetime controls, own-callsign highlight + color, a toast when you're spotted (on/off + re-notify cooldown), and a Clear button.
- Solar / propagation panel — HamQSL SFI/A/K + 10-band day/night heat-map, plus NCDXF beacon auto-follow.
- Weather alerts — lightning / wind / severe-storm badges from Blitzortung / NWS / Ambient / Ecowitt.
- Quality-of-life — header clocks with NTP drift check, GitHub update notifications, in-app diagnostic log viewer (no console window), operator/station identity + band-plan region in Settings.
Every feature landed gated by an operator HL2 bench test.
- Visual Studio 2022 or 2026 Community with the "Desktop development with C++" workload + MSVC v143 toolchain + Windows 11 SDK + CMake.
- Qt 6.11.1 installed at
C:\Qt\6.11.1\with the MSVC 2022 64-bit binding (add via Qt'sMaintenanceTool.exeif the curated installer only pulled MinGW).
From an x64 Native Tools Command Prompt for VS 2026:
cd Y:\Claude local\SDRProject\lyra-cpp
cmake -B build -G Ninja ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_PREFIX_PATH=C:/Qt/6.11.1/msvc2022_64
cmake --build build
build\lyra.exeOr Visual Studio 2026: File -> Open -> CMake -> point at CMakeLists.txt
in this directory. VS auto-configures, then F5 to build + run.
Or Qt Creator: File -> Open File or Project -> pick CMakeLists.txt,
let it configure, hit the green Run button.
GPL v3 or later — matches WDSP, openHPSDR Thetis, and the parent Lyra Python project. See LICENSE for the full license text, NOTICE.md for upstream-project attribution (WDSP + Thetis), and CREDITS.md for the full acknowledgments and contributor list.
Two open-source projects make Lyra-cpp possible without years of ground-up implementation:
-
WDSP — Dr. Warren Pratt NR0V's DSP engine. RX audio chain (NR, AGC, ANF, LMS, NB, AEPF, bandpass, demod, panel pan), TX audio chain (ALC, leveler, compressor, CFC, PHROT), and the future PureSignal port (calcc + iqc) in v0.3. Lyra-cpp links the bundled WDSP DLL and calls into it from native C++; the bundled DLL itself carries WDSP's GPL v3+ license and copyright.
-
openHPSDR Thetis (MI0BOT fork) — the HL2-focused fork of Richie Samphire (ramdor)'s upstream Thetis, maintained by Reid (MI0BOT / GI8TME) with the HL2/HL2+ specific work that makes the Hermes Lite 2 family first-class. Lyra-cpp's TX baseline ports the Thetis ChannelMaster layer (cmaster.c + aamix.c + ilv.c + supporting modules) with full per-file GPL attribution. This brings tested, debugged, multi-radio (HL2/HL2+/ANAN/Orion/...) TX dispatch into Lyra-cpp; Lyra-native TX DSP enhancements layer on top.
The Python Lyra (../lyra/) and Lyra-cpp are both N8SDR's projects;
Lyra-cpp is the C++23 rebuild that makes hard-realtime audio + wire
I/O practical on Windows / macOS / Linux without Python's GIL.
Cross-platform support (macOS / Linux) is planned post-v0.2 TX release; Qt 6 + modern C++ stdlib handles most of the cross-platform lifting, with platform-shim modules for Win32-specific items (MMCSS thread priority, WSAEventSelect → epoll/kqueue, etc.).