SDR++ iak v1.2.2-beta2
Pre-releaseBreaking change
- Due to the change in network protocol (authentization, source tuning range synchronization) the SDR++-iak network protocol is no more compatible with the upstream SDR++. SDR++-iak therefore rejects connection to non-iak SDR++ forks.
Added
- Dragon Labs source module, merged from upstream SDR++: CR8-1725 device discovery/selection through
libdlcr, 12.5 MS/s input, internal/external clock selection, channel selection, and LNA/mixer/VGA gain controls. - Radio squelch mode system from upstream SDR++:
Power,CTCSS (Mute)andCTCSS (Decode Only)modes, a full CTCSS tone table withAny, received-tone diagnostics, and radio-module interface commands for squelch mode/level, CTCSS tone and high-pass control. - Recorder filename timestamps can now be generated in either local time or UTC.
- SDR++ server password authentication: protocol hello/fork compatibility checks, PBKDF2/HMAC challenge-response ported from SDRPlusPlusBrown by @sannysanoff, per-server saved auth keys, explicit server-busy/auth-failed dialogs, and a "Forget saved password" control.
- Shared RX prebuffer implementation for networked sources. The SDR++ server source now exposes Disabled/50/100/250/500/1000 ms RX prebuffer choices, with Disabled acting as a true live bypass instead of a zero-length buffering path.
- Android release CI now builds a signed universal Play Store
.aaband splits the universal APK into the published arm and x86 APK artifacts.
Changed
- Merged the current upstream SDR++ master into this fork, preserving the fork-specific modules and dependency/build-system work while bringing in upstream radio, recorder, rigctl, Dragon Labs, RDS and CI fixes.
- Source tuning limits are now managed by
SourceManager, are aware of the tuning offset used for up/downconverters, and are forwarded through the SDR++ server protocol to remote clients. - The main frequency selector is now constrained to the valid source range for Airspy (24 MHz-1.75 GHz), Airspy HF+ (0-260 MHz), RTL-SDR (100 kHz-1.75 GHz), QMX/QMX server (100 kHz-60 MHz), KiwiSDR served ranges, and remote SDR++ server sources.
- KiwiSDR tuning limits now follow the selected directory entry's served band and refine to the exact server-reported
freq_offset + bandwidthrange while connected. - WFM RDS can now disable incremental PS/radio-text updates, showing only complete updated strings when that option is off.
SmGuigained separator and formatted-text helpers with bounded buffers.- Linux CI now includes Ubuntu Resolute builds.
Fixed
- SDR++ server client/session handling was hardened: per-session buffers prevent displaced clients from corrupting a new connection, handshakes must complete before a client can take over the live slot, heartbeats reclaim orphaned sessions, failed authentication is rejected immediately, and malformed packets, command payloads and decompressed baseband sizes are validated before use.
- SDR++ server remote state synchronization now applies pushed sample-rate and tuning-limit changes on the GUI thread and re-applies them when reselecting the source.
- SDR++ server and KiwiSDR live prebuffer switching now cleanly swaps between buffered and live paths without leaving stale buffering state behind.
- Rigctl server
get_moderesponses now include the selected VFO bandwidth when available. - WFM RDS continuation/stale-text handling fixes from upstream were merged.
- HydraSDR source/build compatibility fixes for newer
libhydrasdrand Windows builds were merged from upstream.
v1.2.2-beta1 - 2026-07-07
Added
-
Manual/auto AGC switch for the SSB (USB/LSB/DSB), CW/CW-R and AM demodulators, adopted from the SDRPP fork by @qrp73: an AGC checkbox with a gain slider in dB (for AM an Off/Carrier/Audio AGC mode selector). In auto mode the slider shows the live AGC gain; in manual mode it sets a fixed gain, with the last AGC gain carried over so the audio level doesn't jump. Manual gain is still clipped to the maximum output amplitude to protect ears and speakers.
-
PlutoSDR improvements adopted from the SDRPlusPlus fork by @F5OEO (Evariste Courjaud): RX1/RX2 RF input selection for hardware with a second RX input (Pluto+, ANTSDR, LibreSDR RevC), and buffer underflow / ADC overload status indicators in the source menu. A config persistence bug in the original RF input selection was fixed during the port; the CS8 streaming mode (Tezuka firmware only) and the removal of the FIR-based low sample rates were deliberately not adopted.
-
FFT windows extended from 3 to 7, adopted from the SDRPP fork by @qrp73: Rectangular, Hamming, Hann, Blackman, Nuttall, Blackman-Harris 4-term (−92 dB sidelobes) and Blackman-Harris 7-term (−180 dB sidelobes, for spur hunting next to strong carriers).
-
Recorder: FLAC container and 24-bit PCM sample type, adopted from the SDRPP fork by @qrp73. FLAC compresses baseband IQ losslessly to roughly half the size (integer sample types only; sample rates up to 1.048 MHz — a libFLAC format limit — with higher rates failing cleanly at record start). Recording uses libFLAC 1.5.0, statically bundled on Windows/Android/macOS/AppImage and the distro package on Linux .deb builds. The MP3 (LAME) recording option from the same fork was not adopted.
-
Recorder: Opus lossy audio recording (
.opus, Ogg-Opus container), in the spirit of the MP3 option from the SDRPP fork by @qrp73 but using the royalty-free Opus codec instead of MP3. Available for demodulated audio at 8/12/16/24/48 kHz (Opus's native rates), with a bitrate slider (16–256 kbps, default 128). Uses libopus 1.5.2 + libogg 1.3.6, statically bundled on Windows/Android/macOS/AppImage and distro packages on Linux .deb builds. -
File source: playback of finalized FLAC recordings, the read counterpart to the recorder's FLAC container.
.flacfiles are streamed through libFLAC's decoder and presented to the rest of the module exactly as an equivalent PCM WAV would be (8/16/24/32-bit, mono/multi-channel), so all existing handling — frequency-from-filename parsing, looping, the format/duration readout — applies unchanged. The reader is picked from the file's magic bytes, not its extension, and the file dialog now lists*.wavand*.flac. The FLAC decoder lives in core next to the recorder's encoder (libFLAC stays a private core dependency). Unlike the WAV reader, an unfinalized FLAC left by a crashed recorder (no total sample count in its header) is not recovered — a compressed stream's length can't be derived from the file size — and is reported as unplayable rather than mis-timed.
Changed
- FFT amplitude calibration (also from @qrp73): the FFT window is now normalized to unity coherent gain, so a sinusoid reads its true dBFS amplitude with any window, any FFT size/rate combination, and any zero padding. Previously the reading was only correct for the rectangular window, and the displayed level also sagged when the FFT rate was raised. With the default Nuttall window all FFT/waterfall levels now read ~9 dB higher (Blackman: ~7.5 dB), so saved waterfall min/max ranges will need a one-time re-adjustment. The noise floor still shifts slightly between windows (equivalent noise bandwidth) — that is physically correct and matches bench spectrum analyzers.
- The SNR meter in the top bar was replaced by a signal level meter, adopted from the SDRPP fork by @qrp73: a level bar in dBFS (peak FFT level within the VFO bandwidth) with a peak hold marker over the last 10 FFT frames, plus a numeric readout of the peak level and the SNR.
- File source WAV support extended, adopted from the SDRPP fork by @qrp73: plays RF64 (>4 GB recordings), WAVE_FORMAT_EXTENSIBLE, 8/16/24/32-bit PCM and 32/64-bit float, mono and multi-channel files, and recovers unfinalized recordings from crashed recorders. The sample format is auto-detected (the "Float32 Mode" checkbox is gone), the menu shows the detected format and duration, filename frequencies are also parsed with kHz/MHz/GHz units and decimals (HDSDR/SDR Console naming), and selecting a file during playback — previously a crash — is now disabled.
- Squelch improvements adopted from the SDRPP fork by @qrp73: 1 dB hysteresis when closing and a 100 ms above-threshold hold before unmuting, so the squelch no longer chatters at the threshold or pops open on short noise spikes. The hold is sample-count based in this port, exact at any IF sample rate.
- PlutoSDR (also from @F5OEO): larger IIO buffers (50 ms, 8 kernel buffers) to avoid underflows at high sample rates over USB and network, device scan now covers both the USB and network backends, extended device whitelist (Pluto+, ad9361, FISH), and the full libiio description is shown as the device name.
Fixed
- Squelch level dB math (also from @qrp73): the threshold now uses
20*log10of the mean signal amplitude instead of10*log10, so the slider value is in real dB. Previously saved squelch levels will trigger differently and need re-adjusting.
Full Changelog: v1.2.2-beta...v1.2.2-beta2