Releases: OK1BR/sdr-for-linux
Release list
SDR for Linux 0.5.1
SDR for Linux 0.5.1
A control-surface release: two VFOs, CTUN, the filter and AGC controls in their own dialogs, a draggable spectrum/waterfall divider and the TX filter drawn on the TX display. Everything below was run live on the ANAN G2E over the past week.
Two VFOs
- A/B and A=B — the classic rig model: A/B swaps what you hear, tune and transmit on, A=B copies the active VFO into the other one. The other VFO reads under the frequency readout (
VFO B 7.025.000 · CW) with the two buttons right after it; keyb= A/B. The other VFO is free across bands; both persist.
CTUN
- With CTUN on (strip button after BIN), dragging the spectrum pans the DDC centre while the RX dial stays where it is; the green passband is the tuning handle — drag it, wheel over it, double-click to recentre. The offset lives in the WDSP receiver shifter as in piHPSDR, so the TCI IQ stream stays the raw DDC.
Filter and AGC dialogs
- The Filter and AGC dropdowns are gone from the top strip. Two header-bar icons (left of the menu) open the Filter dialog — a passband graph you drag by its edges or as a whole, the mode's presets and Var1/Var2, Low/High rows — and the AGC dialog — Off/Long/Slow/Med/Fast with the hang/decay of the chosen one, a live gain bar and AGC-T mirroring the footer slider. The readout's filter and AGC texts open them too.
- Any preset's edges drag on the spectrum; a dragged preset becomes Var1 with the preset untouched. LSB, CWL and DIGL filters now read as audio Hz, low to high, in the readout and the dialog.
- The frequency readout is plain white text at the top-left (frequency, VFO, band, mode, passband, AGC, the other VFO); the S-meter stays top-right.
Display
- Draggable spectrum/waterfall divider — persisted as a fraction so resizes keep the proportion; double-click on the line resets to 50/50.
- TX filter footprint in red on the TX spectrum and, with "Filter on waterfall", on the TX waterfall; CW and TUNE show the carrier line only, RTTY the FSK pair. RX is green and TX is red throughout the display now.
- The AF slider's floor is a true mute (asked for by FT8 operation, where the side-listen only annoys).
- 60 m starts in USB, with a one-time migration of the saved per-band levels.
Fixes
- The receiver no longer dies when the process is paused (a debugger, SIGSTOP, any ptrace stop): the Protocol 2 listener treated the EINTR of its timed socket as a dead link, stopped the keepalives, and the radio's watchdog stopped streaming — display frozen, process alive. It now rides the pause out and the radio re-arms itself on the next keepalive.
- Discovery keeps one entry per radio even when it answers on several interfaces (link-local included) and the data socket binds on the in-subnet interface — no more
169.254.x.xdata links behind a radio that also has a proper address. - The TX over-stats log line reports mic counters only for overs that actually used the mic (no phantom "mic drops" after TUNE).
TCI
ddsandvfoare broadcast immediately on every tuning step, so skimmers and loggers follow the dial without waiting for the periodic tick.- Opt-in IQ centre stamps — the per-block DDC centre and the retune boundary in the stream header — for a CTUN-aware skimmer.
Downloads: AppImage (any distro), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+). Arch users: sdr-for-linux on the AUR. The headless probes (sdrfl-*probe) are dev-tree binaries — build from source for those.
SDR for Linux 0.5.0
SDR for Linux 0.5.0
The release that marks the ANAN G2 (Saturn) as live-tested. W1IZZ ran a second test round on 0.4.2 (issue #3) and closed every question the first round left open; this release carries the fixes his feedback asked for, and the record.
ANAN G2 / Saturn — live-tested by an external operator
What his two rounds confirmed on a real G2:
- receive probes clean (antenna against the dummy-load baseline),
- per-band PA calibration against an LP-100A — now including 30 m and 60 m on the buttons added in 0.4.2 — with our wattmeter within 1–2 W,
- SWR tracking against external equipment, a voice QSO,
- PureSignal with numbers: a two-tone into the dummy load reads feedback 151 — inside the 129–181 target window — attenuation 14 dB, "correcting",
- the per-model supply-voltage readout confirmed (raw 544 → 13.9 V against a nominal 13.8 V supply),
- the
DUC sequence errorslog spam of 0.4.1 confirmed gone.
Still not calibrated by us — nobody on the project owns a G2, and the wording stays honest about that. The radio still starts safe (PA off, 1 W, no stored PA calibration), so ⛔ the first transmission on your own G2 still belongs into a dummy load — step by step in docs/RADIOS-SCOPE.md §7 (§7.1–7.2 are his results). Thank you, Larry — the credit is in the README.
The supply readout, reworked from his feedback
- The footer supply voltage is now averaged on a wall clock (~1.5 s) and shown at 0.1 V resolution — no more last-digit dancing from the ±1-count telemetry jitter.
- The in-band value renders in the theme foreground like the neighbouring labels; the previous fixed green was unreadable on light themes. Amber (excursion) and red (fault) colours stay. The same applies to the Hermes Lite 2 die-temperature readout, which shares the footer slot.
- The readout sits a few pixels off the window edge now.
Nothing protective reads the smoothed value — SWR, thermal and drive protections keep acting on the raw numbers.
Downloads: AppImage (any distro), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+). Arch users: sdr-for-linux on the AUR. The headless probes (sdrfl-*probe) are dev-tree binaries — build from source for those.
SDR for Linux 0.4.2
SDR for Linux 0.4.2
A maintenance release built from the first ANAN G2 (Saturn) test report (W1IZZ, issue #3). Nothing changes on the air for the ANAN G2E, 10E/100B or Hermes Lite 2 — two small visible things aside, listed below.
ANAN G2 / Saturn — what the first test found, fixed
- Supply voltage read 0.10 V. The Saturn carries its supply voltage in a different status word than the G2E (bytes 57-58 × 0.02553 V/count, as in piHPSDR and Thetis). The readout is now per model.
⚠️ This mapping comes from the reference sources, not from a G2 in front of us — if you own one, the footer should read your PSU voltage;SDRFL_DEBUG_LEVELS=1prints the raw words if it does not. - No 60 m / 30 m band buttons — added, so those bands can be selected and power-calibrated like the others.
- The terminal filled with
p2: DUC sequence errors: …lines on the G2. Those status bytes are FIFO telemetry on the Saturn, not the G2E's sequence-error counter; the counter is now read on the G2E only.
For every radio
- Transmit-IQ stream start hardened. The TX-IQ sender ring is gated on the live link, so nothing stale can be queued before the radio is up, and the start prints a one-line baseline of the radio's sequence-error counter. Healthy log = at most one
DUC sequence errors: N (+1)right afterp2: startedand nothing afterwards. Live-verified on a G2E: 2.8 h, 85 FT8/FT4 overs, exactly that. - ANAN 10E: the Supply readout is hidden — neither piHPSDR nor Thetis documents a supply-voltage word for that model, and the number shown before came from an unknown one.
- The
GtkImage … reported baselines of minimum -2147483648warnings some of you may see on GTK 4.22 are diagnosed (GTK/Pango under a transient font-metrics failure, cosmetic, not the app) — documented, no code change. - The window's minimum width grows by the two band buttons (1618 → 1704 px).
G2 status after this release
From "unlocked, unproven" to "first live pass done by an external tester, not calibrated by us": receive probes clean, per-band PA calibration against an LP-100A with our wattmeter within 1–2 W, SWR tracking, a voice QSO; PureSignal reported working (no numbers yet). The radio still starts safe — PA off, 1 W, no stored calibration — so the first transmission still belongs into a dummy load (docs/RADIOS-SCOPE.md §7; §7.1 is what his run showed).
What would help most from G2 owners on 0.4.2: the footer Supply reading next to your PSU voltage; whether the DUC sequence errors lines are gone; the footer PureSignal numbers during a two-tone (feedback level / state); and the 30 m / 60 m PA calibration now that the buttons exist.
Downloads: AppImage (any distro), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+). Arch users: sdr-for-linux on the AUR. The headless probes (sdrfl-*probe) are dev-tree binaries — build from source for those.
SDR for Linux 0.4.1
SDR for Linux 0.4.1
Support for the Apache Labs ANAN G2 (Saturn) — receive, transmit and PureSignal. Nothing changes for the radios already supported.
⚠️ If you have a G2, read this first
This model is enabled from an audit of the piHPSDR sources, not from a test on the hardware — nobody working on this program owns a G2. Every per-device value (the two Alex filter boards, the second ADC, the DDC mapping, the ANAN-7000 band-pass knees and wattmeter constants, the PureSignal peak 0.6121) comes from upstream piHPSDR and is pinned by an offline byte-level test, but none of it has ever been confirmed against a real radio.
The radio therefore starts safe — PA off, ANT1, 1 W, no stored PA calibration — so your first keying is a dry key. ⛔ Your first transmission belongs into a dummy load: dry key → 1 W → walk the per-band PA calibration up against an external meter → confirm the SWR protection acts → then CW/voice, and PureSignal last. Until someone does that, treat our wattmeter reading on this model as indicative, not measured. The step-by-step is in docs/RADIOS-SCOPE.md §7, and a report back — good or bad — is what turns "should work" into "works".
What is in it
- ANAN G2 / Saturn (Protocol 2) — discovery, receive, transmit and PureSignal. The G2-specific wire differences are implemented: both Alex filter boards enabled, two ADCs declared, the receiver on DDC2, the ANAN-7000 band-pass table, the ANAN-7000 wattmeter branch, and
ps_setpk0.6121 — roughly double what every other Protocol-2 radio uses, so the generic value would mis-scale the PureSignal feedback. - Per-radio calibration stays per radio — a G2 session keeps its transmit calibration in its own
[tx-saturn]section and can never overwrite a G2E's. - A new offline test (
sdrfl-p2dev-test, 163 checks, in CI) pins every per-device byte against piHPSDR and asserts the packets for the already-supported radios are byte-identical. - No change for the ANAN G2E, ANAN 10E/100B or Hermes Lite 2 — and that is verified, not assumed: the G2E was re-tested on the air after the change, receive and transmit including PureSignal.
Close behind, but not enabled
The ORION2 family (ANAN-7000/8000, DLE 7000) shares almost all of the G2's wire behaviour and now rides along in the code, but stays refused until someone tests it.
Downloads: AppImage (any distro), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+). Arch users: sdr-for-linux on the AUR.
SDR for Linux 0.4.0
SDR for Linux 0.4.0
A native RTTY mode, an important transmit noise-gate fix, and proper meter ballistics.
RTTY
- Native RTTY — direct-FSK transmit (45.45 Bd / 170 Hz shift, phase-continuous, constant envelope), keyed from text over TCI (
rtty_macros:), with its own filter presets, an FSK monitor tone with its own level trim (pitch adjustable, default 2210 Hz → the classic 2125/2295 pair), the sent-text HUD strip, and therhotkey. The dial reads the FSK pair centre; spot clicks stay Hz-exact. Decoding is left to your skimmer/TCI tools by design — verified on the air against an IC-705 and a KiwiSDR. - TCI
trxreports the real keyed state (CW/RTTY keying included), not just the MOX button — loggers see the actual over.
Transmit audio
- Fixed: the noise gate deformed speech. Since the gate moved to the WDSP downward expander, its parameters were re-pushed ~20× a second and every push silently reset the gate's detector — chopping roughly a third of all speech by ~9 dB whenever the gate was enabled. This was issue #1 ("monitor noisy/distorted with the gate on"), and it was on the air, not just in the monitor. Parameters now apply only on change, with a regression test guarding the setters.
- Noise-gate redesign — the threshold and the Mic meter now share one dBFS scale, the threshold is drawn on the TX HUD Mic bar (white = open, red = gating), and the previously hardwired attenuation is an operator control: Gate depth (default 10 dB).
- TX monitor below 192 kHz — fixed choppy monitor audio caused by the PureSignal TX feed pacing at 48/96 kHz sample rates.
Meters
- RX S-meter ballistics — the needle no longer flickers at frame rate: display-side smoothing with a new Averaging → S-meter preference (default 330 ms), and the numeric dBm readout updates 4×/s while the bar stays full-rate. Protection paths and TCI keep reading the raw meter.
- TX Mic / Lev / ALC meters — the same ballistics family: instant attack, smooth decay.
Appearance
- Redesigned application icon, plus a 16×16 symbolic (monochrome) variant per the GNOME HIG.
Packages
AppImage (x86_64, glibc ≥ 2.39), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+) attached below; Arch users: sdr-for-linux on the AUR.
SDR for Linux 0.3.0
SDR for Linux 0.3.0
Smooth rendering: the spectrum display moves to the GPU.
Rendering
- GL renderer by default on GTK ≥ 4.22 — collapses frame jitter on 60 FPS displays (>40 ms hitches went from hundreds per minute to ~2/min in measurement). Cairo stays the default on older GTK (including the AppImage); an explicit
GSK_RENDERERenv always wins. The startup log prints the choice. - GPU waterfall — the waterfall is now a GPU-scaled texture and cairo draws only the spectrum strip; the app's own frame cost dropped to ~1.1 ms. Details and diagnosis techniques:
docs/RENDERING.md.
Features & fixes
- About → Troubleshooting — the About dialog now carries debug info (app + library versions, active renderer, connected radio, TCI state, config/wisdom paths) pasteable straight into a bug report via its Copy button.
- TCI — client-sent spot clicks are relayed to the other TCI clients, so clicking a spot in a skimmer reaches the logbook.
- Desktop entry — the launcher now also works for plain source builds (
meson install), andStartupWMClasscovers X11 sessions.
Build
- Requires GTK ≥ 4.10 (snapshot API); GL rendering kicks in on GTK ≥ 4.22.
Packages
AppImage (x86_64, glibc ≥ 2.39), .deb (Ubuntu 24.04+ / Debian 13+), .rpm (Fedora 40+) attached below; Arch users: sdr-for-linux on the AUR.
SDR for Linux 0.2.0
sdr-for-linux 0.2.0
First regular release — version numbers from here on are plain semver (0.x while the app matures), no more alpha/beta suffixes. Everything below has been live-verified on real hardware, most of it in a real contest.
New supported radios
| Radio | Protocol | Status |
|---|---|---|
| ANAN G2E | 2 | RX + TX + PureSignal (as before) |
| ANAN 10E / 100B (Hermes) | 2 | RX + TX — new. PureSignal is locked out: fw 10.3 wedges mid-TX (root cause + the Thetis-proven fix documented in docs/TX-DESIGN.md §9) |
| Hermes Lite 2 | 1 | RX + TX + PureSignal — new, including brand-new Protocol 1 (METIS) support: discovery, N2ADR filter-board control, LNA slider, temperature/overload telemetry, thermal trip at 60 °C |
Per-radio TX profiles keep power ratings, wattmeter constants and PA calibrations separate per model — calibrations can never leak between radios that share a config.
Contest hardening
Deployed in a CW contest (~130 QSOs) two days after the alpha; every finding fixed and re-verified live:
- CW keying latency (TCI→RF) 320 → 32-42 ms, turnaround 445 → 201 ms
- per-mode AGC presets (SSB/CW/AM/digi remember their own AGC)
- mode-aware TX HUD: CW sent-text strip with a playhead, WPM/KEY/hang indicators; digi TX-audio level with a clip latch
- SWR alarm reads genuine coupler samples only (no more stale-reading false trips), radio picker de-duplicates multiple radios on the LAN, the app starts the radio you picked
TX transport & audio chain
- Paced TX IQ senders on both protocols — the radio's DUC FIFO is never burst-fed or starved; on P2 the TX chain is clocked by the radio's own mic stream and the DUC stream runs continuously (Thetis-style), so there is no key-down transient and the radio's sequence-error counter becomes a genuine lost-packet tripwire
- TX monitor now plays the processed TX audio (what actually goes on air — gate/processor/TX filter included) with a jitter buffer; the raw low-latency mic tap is still available as an option
- Audio preferences: microphone gain, noise gate (true downward expander) and speech processor — voice modes with a live mic only; digi/TCI audio stays a bit-exact clean chain, enforced by the engine
- TCI:
audio_start/audio_stopare ACK-echoed (stops client retry loops), stuck-MOX fixed (keyer tracking across disconnects, dead clients with a held key are reaped in ~28 s)
Known limitations
- Single receiver (no RX2 yet), no FM, no diversity
- CAT: not built in — use tciadapter for hamlib-only programs; the TCI server covers SDC, Decodium & co.
- Audio flows through the PC only (the radio's own phones/mic jacks are not used)
- AUR: still blocked by the upstream registration freeze; the PKGBUILD ships in
packaging/
Install — pick your format
All three artifacts below are built from this tag and the packages are install-tested in fresh containers by CI:
- AppImage — any distro with glibc ≥ 2.39 (Ubuntu 24.04+, Fedora 40+, Mint 22, openSUSE, Arch):
chmod +xand run - .deb — Ubuntu 24.04+ / Debian 13+ / Mint 22+:
sudo apt install ./sdr-for-linux_0.2.0_amd64.deb - .rpm — Fedora 40+:
sudo dnf install ./sdr-for-linux-0.2.0-1.x86_64.rpm - Arch:
packaging/PKGBUILDbuilds withmakepkg(AUR pending the upstream registration freeze)
Or build from source: meson setup build && meson compile -C build — see the README.
SDR for Linux 0.1.0-alpha
First alpha release of SDR for Linux — a modern GTK4/libadwaita application for HPSDR Protocol 2 radios, built on the piHPSDR engine and the WDSP DSP library.
⚠️ Supported hardware: Apache Labs ANAN G2E only
Every feature below was developed and verified live on a real ANAN G2E. Other radio models are refused by a safety whitelist — a wrong relay or filter bit in the HPSDR control words can physically damage a PA, so untested models stay blocked until they are brought up on real hardware. Have a different Apache Labs / Hermes P2 board and a dummy load? Open an issue.
Highlights
- RX: full-resolution floating-point panadapter + waterfall (6 palettes), SSB/CW/AM/SAM/DIGU/DIGL, AGC, NR/NB/ANF, binaural mode, low-latency PipeWire audio (~15 ms), band-plan overlay, DX-spot overlay with click-to-tune
- TX: SSB voice (speech processor, noise gate), CW with clean break-in, separate MOX/TUNE drive, true-PEP wattmeter, SWR protection, PureSignal linearization with Thetis-style auto-attenuate, TX panadapter + monitor, footswitch PTT
- Integration: ExpertSDR3-compatible TCI server (control, CW, RX/TX audio, wideband IQ, spots) — verified with SDC, CW Skimmer and Decodium; CAT/hamlib apps work through tciadapter
Install
AppImage (below): needs glibc ≥ 2.39 (Ubuntu 24.04+, Fedora 40+, Mint 22, Arch, …) and PipeWire as the sound server.
chmod +x SDR_for_Linux-*.AppImage && ./SDR_for_Linux-*.AppImageOr build from source — see the README.
First run: the app plans FFTW transforms once (~6 minutes, progress window) and caches the result; every later start is instant.
Known limitations
- One radio (ANAN G2E), one receiver (RX2 planned), no FM yet
- Wattmeter: single per-band calibration factor — accurate on HF, over-reads ~25 % on 6 m
- Alpha software: expect rough edges, and please report them
73 de OK1BR
Full Changelog: https://github.com/OK1BR/sdr-for-linux/commits/v0.1.0-alpha