github aethersdr/AetherSDR v26.5.3
AetherSDR v26.5.3 — Aetherial Audio TX completion + security hardening + 100-commit reliability sweep

4 hours ago

AetherSDR v26.5.3 — Aetherial Audio TX completion + security hardening + 100-commit reliability sweep

139 commits across 14 contributors in this cycle. The headline is the TX path of the Aetherial Audio Channel Strip reaching feature-complete with the new PAPR processor and split-band de-esser, two published security advisories landing their enforcement phases (SmartLink TLS cert pinning + CAT PTY symlink hardening), the MQTT configuration moving into a dedicated Settings dialog, and a substantial reliability sweep across audio (WASAPI / CoreAudio / macOS mic), spectrum (TX waterfall scroll rate, panadapter dBm prime), and CAT (rigctld, TCI, MIDI). Native Hamlib NET rigctl ships as a first-class CAT path alongside TCI.


Security advisories landed

GHSA-wfx7-w6p8-4jr2 — SmartLink TLS cert pin enforcement Phase 2 (#3026)

Phase 1 (warn-only) shipped in v26.5.2; Phase 2 promotes a cert-fingerprint mismatch to a hard handshake pause. On mismatch the client emits a modal dialog (Accept new cert / Reject and disconnect) before sending wan validate — a MITM attacker never sees an authenticated session. New SmartLink tab in Radio Setup lists pinned certs with per-row Forget. Pin cache schema migrates Phase 1 string entries to Phase 2 {fp, pinnedAt} objects on first save.

GHSA-qxhr-cwrc-pvrm — CAT PTY symlink hardening (#3027)

rigctld's slice PTY symlinks moved from /tmp/ to per-user runtime dirs ($XDG_RUNTIME_DIR on Linux, ~/Library/Application Support/... on macOS) so a local attacker can no longer race-create the symlink targets. Windows unaffected.


Headline content

Aetherial Audio Channel Strip TX path completion (#3024)

  • PAPR processor — new all-pass biquad cascade (4 stages at 300/700/1500/2500 Hz) for peak-to-average-power-ratio reduction. Drive (0–18 dB) + Phase knobs in the channel strip; auto-makeup gain linked to Drive so RMS lifts alongside peaks instead of disappearing into the compressor's gain reduction.
  • Split-band de-esser — replaces the old broadband-attenuation pattern (l *= gainLin; r *= gainLin;) with output = full + bandpass × (gain − 1). Fixes the broadband-attenuation bug that was costing operators ~30W of forward power on voice content. User-selectable cascade stages (12/24/36/48 dB/oct).
  • Peak-hold toggle on all meters; CRST + RMS + THRESH styling unified via the canonical MeterSmoother (30 ms attack / 180 ms release at 120 Hz).
  • 10 Hz throttle on text readouts; live audio response at 125 Hz — meters track the audio without spamming the GUI thread.

Native Hamlib NET rigctl (#2975)

Full 149-test rigctld implementation for WSJT-X / JTDX / fldigi / Winlink VARA / N1MM+ / DXLog interoperability without a standalone rigctld bridge. Slices A–H each expose a TTY (per-user runtime path on Linux + macOS, see #3027) and a TCP port (4532–4539).

MQTT settings dialog refactor (#3051@s53zo)

Substantial community PR that moves MQTT configuration out of the live applet into a dedicated Settings → MQTT… dialog. The applet stays as the live surface (connect/disconnect, status, message log, publish buttons); the dialog owns broker credentials, TLS/CA config, subscription rows, display-on-panadapter flags, and publish button definitions. Persists On/Off state as MqttEnabled for auto-reconnect on startup. Also self-found and fixed a subscription-state bug where removed topics could survive across reconnects. Maintainer follow-ups consolidate the 8 MQTT flat AppSettings keys into a single nested MqttSettings JSON block per Principle V, with one-shot transparent migration from legacy keys.

TX waterfall scroll rate matches RX (#3031)

After #3019 stabilised TX waterfall rendering across slices, the FFT-derived row path scrolled at line_duration cadence (~10 rows/sec) while RX native tiles arrived at the FFT rate (~30 rows/sec) — TX appeared 3× slower than RX. Diagnosed via inline probe; corrected by dropping the FFT row throttle and emitting one row per FFT frame.

Panadapter dBm range prime on reconnect (#3034@chibondking)

Secondary panadapters (Slices B–H) could go completely flat on reconnect with the dBm scale stuck at the default [-50, +50] while the radio's saved range was different. Cause traced end-to-end: noise-floor auto-adjust animated from the wrong baseline, fired dbmRangeChangeRequested with bogus values, and the pendingDbm guard locked them in. Fix: prime the spectrum widget with the pan's current dBm range immediately on wire. Solid community contribution.

FlexControl wheel tuning overhaul (#3029@rfoust)

Two-axis QoL improvement to the virtual FlexControl wheel: new Mouse Sensitivity slider, de-jitter clamping at 15°, lazy re-anchoring across centre-zone crossings, coast / pointer-clock separation, and UI polish.

WASAPI mono-only USB PnP mic silent-open recovery (#2929)

Some USB PnP mics report mono-only capture natively; Qt accepts an unsupported stereo open and returns a non-null QIODevice that delivers zero bytes. Three-layer fix: pre-emptive channel-count clamp, fallback-ladder skip of only the failed (rate, ch) combo, and a 1.5 s silent-open watchdog that retries as mono.

ATU pre-tune Auto-mode safety nets (#3050)

Four-layer guardrail bundle for the unattended ATU sweep — license-class filter (data-driven from the active bandplan), max-points soft cap with TX-duration warning, high-power warning above 20 W, and audible cue on per-point timeout + 3-fail bypass abort. Paired with #3063 for per-band early exit (3 consecutive failures on a band skip past that band instead of aborting the whole sweep).

Windows hybrid-GPU support (#1921)

NvOptimusEnablement = 1 and AmdPowerXpressRequestHighPerformance = 1 exports so the Windows binary launches on the discrete GPU on hybrid laptops. Sidesteps the Intel iGPU D3D11 driver bug that crashed AetherSDR during QRhiWidget reparenting.

TCI server enhancements (#2841, #2950, #3065)

Panadapter FFT row forwarding to subscribed TCI clients, new tx_gain command + ALC reading via tx_sensors, and a TX overflow-mode picker — right-click the TCI TX slider to choose Clip (saturating ±1.0, default), NaNGuard (bit-exact passthrough; only zero NaN/Inf), or Measure (true bypass — count overshoots for telemetry, never mutate samples). WSJT-X / FT8 operators chasing bit-exact tone fidelity can now drop the float-domain limiter entirely.


Also new this cycle

Features: AetherControl virtual FlexControl (#2888), adaptive frame-rate throttle + graceful reconnect (#2829), mute-all-slices + reconnect mute fix (#2833), spectrum Ctrl+wheel cursor-anchored zoom (#2869), multiFLEX per-client disconnect (#2981), loop antenna A/B controls (#2863), MQTT antenna display names (#2881), cycle-TX-slice shortcut (#2836), drag value popups on sliders (#2944), audio device hotplug prompt suppression (#2926), FlexControl WheelAgcT mode (#2907), status-bar slice-locked toast (#2984).

Notable fixes: TCI use-after-free in queued lambdas (#2814), RigctlProtocol use-after-free (#2995), set_split_vfo TX slice ping-pong (#2931), rigctld cwx routing through CwxModel (#2909), MIDI VFO encoder direction + step size (#2993), MIDI tx.mox uses isTransmitting (#2859), HID IcomRC28Parser byte offsets (7-year-old bug, #1896), slice-state cached + replayed for profile recall (#2917), off-screen slice indicator click reveal (#2941).

Refactor & internals: AppSettings nested-JSON consolidation (MQTT block; Principle V), MeterSmoother canonicalisation, revealOffscreen ternary collapse, post-#3019 spectrum FFT accumulator removal, off-screen click comfort margin, panadapter dBm prime path rewrite, and an AetherClaude orchestrator sweep of 22 automated fixes on aetherclaude-eligible issues.

Build & CI: liquid-dsp vendored as a third-party dependency for upcoming DSP work (Windows MSVC C99 _Complex incompatibility tracked at #3049), CodeOwners three-tier governance/infra/reviewers framework (#3053, #3055), check-windows job expanded to cover broader Windows-touching paths.


Contributors

Big thanks to:

  • @jensenpat (16 commits — macOS audio, Windows COM handle, TCI architecture)
  • @NF0T (Ryan B, 12 commits — Windows installer + RADE + various)
  • @rfoust (Robbie Foust, 9 commits — FlexControl wheel UX overhaul)
  • @Ozy311 (5 commits — BYPASS state persistence, applet float/dock title-bar sync, ProfileManager auto-save signal, DX Spots slider cap, BYPASS tooltip)
  • @nigelfenton (Nigel Fenton, G0JKN, 5 commits — TCI Network dialog tab, tx_gain + ALC, use-after-free fix, vfo emit on band-change, mic-capture suppress during TCI feed)
  • @chibondking (CJ Johnson, 5 commits — panadapter dBm prime fix)
  • @M8WLO (Andy, 4 commits)
  • @s53zo (2 commits — substantial MQTT settings dialog refactor with self-found subscription-state fix)
  • @pepefrog1234 (2 commits — the macOS silent-SSB-TX fix + set_split_vfo ping-pong fix)
  • @K5PTB (2 commits)
  • @G6PWY-Chris (Chris G6PWY, 1 commit)
  • @aethersdr-agent (the AetherClaude orchestrator, 22 commits — automated fixes on aetherclaude-eligible issues)

Dependabot contributed 6 security and version bumps.


Install

Pick your platform from the assets below. Linux AppImages, macOS DMGs (Apple Silicon + Intel), Windows installer + portable zip, and Stream Deck plugin (.streamDeckPlugin + StreamController .zip).

Full diff: v26.5.2.1...v26.5.3

73, Jeremy KK7GWY & Claude (AI dev partner)

Don't miss a new AetherSDR release

NewReleases is sending notifications on new releases.