Skip to content

Releases: bubnikv/sdriak

SDRIAK v1.4.0-beta2

SDRIAK v1.4.0-beta2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Sep 10:38

The 1.4.0-beta2 completes the rename to SDRIAK, improves QMX panadapter synchronization, and polishes touch interaction on the waterfall.

QMX panadapter operation

  • With Sync VFO enabled, the selected VFO remains at the center of the waterfall at every zoom level while tuning or panning, and frequency changes synchronize in both directions between SDRIAK and QMX.
  • QMX and SDRIAK modes now synchronize in both directions. AM is supported by current QMX firmware, and CW/CW-R changes follow the sideband implied by the QMX CW/CWR settings.

Touch, tuning and interface

  • Tuning is now possible by clicking and dragging inside the VFO band if the VFO is already selected (#21).

SDRIAK identity and packaging

  • The former SDR++ iak name has been replaced with "SDRIAK" and the icon was changed to differentiate from the SDR++ (to be registered trademark).

Full Changelog: v1.4.0-beta...v1.4.0-beta2

SDR++ iak v1.4.0-beta

SDR++ iak v1.4.0-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Aug 04:09

The version jumps from the 1.2.2 series to 1.4.0-beta because this release builds on upstream SDR++'s continuously evolving 1.3.0 codebase.

A feature and reliability release focused on touch operation, faster tuning and a more robust experience across desktop, Android and server use.

Alpha testers: delete the fork's config directory before upgrading. Pre-release numeric radio modes and frequency-memory layouts are not migrated.

User interface and tuning

  • Touch-friendly UI overhaul with Android-sized controls, a Material 3 dark theme, drag-scroll with fling, visible splitter handles and haptic feedback. The touch style can also be previewed on desktop.
  • Android Back now dismisses popups and backgrounds the app naturally; holding the hamburger button opens the exit confirmation. Small-screen dialogs and the About view are easier to navigate.
  • New Bands / Frequency dialog with an IC-705-style direct-entry keypad, category-filtered band selection and a Spectrum page for moving between named frequency ranges.
  • Three-register band stacking remembers frequency and mode per band. Band identities, overlap resolution, defaults and register rotation were stabilized for split and mixed-service band plans.
  • Waterfall scaling now uses Ref + Range, with robust one-shot auto-fit or continuous tracking over the visible spectrum. The original auto-range was contributed by @ericek111 (upstream #1729); new colormaps were contributed by @konung-yaropolk (upstream #1694). Cursor-anchored mouse/pinch zoom was also added.
  • Cleaner desktop presentation at fractional scales, including whole-pixel rendering and new 125% and 175% presets (upstream #1116, PR #1115); dialogs now share consistent Enter, Escape and click-outside behavior (upstream #1758).
  • More reliable mouse-wheel and precision-touchpad input: fractional tuning steps are accumulated correctly and wheel actions no longer leak from menus or sliders into VFO tuning.
  • Compact radio-mode selector and editable CW pitch presets.
  • Right-click spectrum bookmark creation, contributed by @Zaryob from upstream PR #1476 (#1475).
  • Per-device SDRplay PPM correction, contributed by @M0OPK (upstream #1781).
  • International RDS text rendering based on work by @attah (upstream #1164).

Platforms and connectivity

  • Native macOS CoreAudio output sink, ported from SDR++Brown by @sannysanoff, with UTF-8 device names, device-rate tracking and a safe null-output fallback (upstream #1776).
  • SDR++ Server and SpyServer connections are asynchronous, cancellable and bounded by DNS/connect timeouts; the remaining blocking TCP paths also gained finite timeouts and clearer errors. The original work was contributed by @edudant in fork PR #20, resolving fork #19.
  • Server and rigctl handling was hardened against dead links, socket leaks and shutdown races. Hamlib interoperability now includes additional VFO tokens, receive-only PTT replies and CWR capability reporting (upstream #1462, #1061, #1506, #1092).
  • Relative config, module and resource paths now resolve from the executable instead of the launch directory (upstream #1265). Windows builds use UTF-8 console handling and flush logs reliably; the logging fix was ported from SDR++Brown with @sannysanoff.

Reliability and compatibility

  • Configuration access now uses scoped transactions throughout the application. Unchanged settings are not rewritten, malformed values fall back safely, shutdown flushes pending saves and concurrent desktop instances merge edits more reliably.
  • Radio modes, bookmarks, the selected demodulator and band memories now persist using stable names and identities rather than internal enum ordering. Explicit bookmark import remains compatible with upstream numeric modes.
  • Missing or unusable audio devices no longer crash startup or stall the DSP pipeline (upstream #1754); short audio reads are padded safely using a fix ported from SDR++Brown with @sannysanoff, and partially opened streams are closed before fallback.
  • Fixed crashes and races involving window resizing, scanner restarts, dynamic menu creation, concurrent mode changes and server-mode source panels (upstream #1658, #816, #1437, #1630).
  • Fixed an Android RS41 radiosonde decoder abort caused by a serial-field over-read. Thanks to @jprincl.
  • Additional fixes cover malformed band-plan/resource files, configuration deadlocks and Windows save interference, stale waterfall auto-range data, socket lifetime and several DSP boundary/race conditions.

Full Changelog: v1.4.0-alpha...v1.4.0-beta

SDR++ iak v1.4.0-alpha

Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jul 17:14

A large UI-focused release. The headline is a touch-friendly interface overhaul that makes SDR++ iak usable with a finger on Android (and previewable on desktop): an Android-metrics style overlay, a Material 3 dark theme, single-finger drag-scroll with fling, pill-handle window splitters, and an IC-705-style direct frequency-entry keypad with an integrated band picker. A new shared PopupDialog widget brings consistent keyboard and back-gesture handling to every modal in the app. Alongside these, a batch of desktop input fixes, radio/DSP touches, and crash fixes ported from and reported against upstream SDR++.

The band stacking feature inspired by ICOM radios is work in progress, not working correctly yet.

The waterfall autoscale is work in progress: Both the algorithm and user interface will change.

Added

Touch-friendly UI

  • Touch-friendly UI style overlay (style::touchStyle): an Android-like sizing layer applied as the final step of every re-style path (startup, scale change, Android re-init, theme switch), in dp units — ~48 dp row pitch, 24 dp slider grabs, touch extra padding, thin rounded scrollbars, Material-like rounded borderless frames and popups. It touches sizes only, so it composes with every theme. On by default on Android, off elsewhere, and toggleable live via a "Touch-Friendly UI" checkbox in the Display menu for desktop preview. The overlay was later toned down to at most ~25% over desktop metrics so it stays compact on desktop.
  • Android Dark theme: a Material 3 dark palette for the touch UI — the baseline neutral surface ramp (#141218 → #36343B), a blue tone-80 accent (#A8C7FA), precomputed 8%/12% state-layer blends for hovered/pressed, opaque popups and transparent borders. Instrument colors (FFT hold, waterfall background, meter histogram) are kept functional.
  • Android: single-finger drag-scroll with fling for the menu and other scrollable windows. A recognizer sits ahead of the pinch recognizer in the input chain and withholds the touch-down from ImGui until the gesture is classified, so scrolling can never activate a widget under the finger: a vertical drag past 8 dp slop pans the window 1:1 (SetScrollY) and flings on release with hardware-timestamped velocity, a horizontal drag replays the press so sliders and the splitter keep working, a motionless ~200 ms hold replays the press (menu drag-reorder becomes press-hold-drag), and a quick tap replays press+release. Touches over the waterfall, top bar, scrollbars or vertical-slider column pass straight through with no added latency.
  • Android: touch-friendly window splitters with visible pill-shaped drag handles and haptic feedback (routed through a new backend::hapticTick() JNI call), replacing the invisible fat hit bands that stole touches from the menu scrollbar, the frequency scale and the top of the waterfall.
  • Radio: compact mode selector rendered as a wrapping toggle-button grid (a reusable doToggleButtonGrid widget, PowerSDR/Thetis-style button bank) instead of the 3-row Columns(4) radio buttons — rows auto-wrap and balance to the panel width, and display order is decoupled from DemodID (NFM WFM AM DSB RAW / LSB USB CW CW-R). The active mode is highlighted in the grid.

Frequency entry (IC-705-style F-INP) and band picker

  • IC-705-style F-INP direct frequency-entry keypad: holding any frequency digit for 0.5 s (mouse or touch, with a haptic tick on Android) opens a modal keypad — entry in MHz with a single decimal point, ENT zero-fills the digits below the last entered one, CE clears, and pressing . first re-enters the current MHz digits for quick in-band retunes. Hardware keyboard (digits, dot, Backspace, Enter, Escape) works alongside the buttons and committed values are clamped to the tunable range. The layout is a 4×4 grid with a Backspace key in the Android PIN-pad position and a double-height ENT. A dialpad button next to the frequency display opens the same keypad, shown only when the top bar has room without squeezing the volume slider.
  • F-INP band picker page: a second page in the F-INP modal (toggled BAND / F-INP) with a category-filtered 4-column band grid built from the selected band plan. Tapping a band tunes to its last-used frequency/mode (a new bandMemory config, containment-validated on restore), else the band plan's default frequency/mode, else mid-band with a heuristic mode convention; the channel step sets the VFO snap interval. Page and category selections persist.
  • Band-plan tuning defaults: scripts/enrich_bandplans.py merges default tuning info (default frequency, channel spacing, monitoring mode) from the KiwiSDR band database (dist.dx_config.json, jks-prv/KiwiSDR, GPLv3) into the band-plan JSON files, matching by service category and frequency overlap with ITU-region preference. Only values genuinely present in the source are written; a mode that merely repeats the band-type convention is filtered out. The script edits files surgically (preserving indentation and line endings byte for byte), is idempotent, and the loader ignores unknown keys so the files stay backward compatible.

Waterfall

  • Waterfall FFT min/max auto-range button ("A", under the Min/Max sliders): sets the low/high thresholds from the current FFT, scanning the middle 60% of the row to avoid band edges, filter roll-off and the DC/center spike, and persists the result. Ported from ericek111's fork, addressing AlexandreRouma#1729. Thanks to @ericek111 (Erik Brocko).
  • Waterfall colormaps from AlexandreRouma#1694. Thanks to @konung-yaropolk.

Other

  • SDRplay: per-device PPM frequency correction with persistence and live updates, adding InputFloat/InputDouble support to SmGui for the server-mode UI along the way. Addresses AlexandreRouma#1781. Thanks to @M0OPK.
  • Frequency manager: right-click on the FFT or waterfall creates a bookmark at the frequency under the cursor, seeded with the selected VFO's bandwidth and mode. Implemented entirely in the frequency_manager module via the existing input handler. Ports the idea from upstream PR AlexandreRouma#1476 (issue #1475). Thanks to @Zaryob.
  • Radio: CW pitch/offset preset value controls, with a step-and-popup value editor aligned to the other preset controls.
  • Theme selector moved into the Display panel (refs AlexandreRouma#1008).

Changed

  • PopupDialog widget: a new core widget that encapsulates the two idioms every modal-ish popup in the app used to hand-roll — a lifecycle that arms OpenPopup exactly once per request and detects an ImGui-level close (Android back gesture, click outside) so it can't be undone by an unconditional re-open next frame, and focus-scoped, edge-triggered Enter/keypad-Enter to apply and Escape to cancel. It was rolled out across the app:
    • GenericDialog rebuilt on top of it, fixing all seven call sites (frequency-manager delete confirms, source-offset delete, module-manager confirm/error, server-source busy/auth, iq_exporter error), which previously could not be dismissed by back gesture / click-outside and had no keyboard support.
    • Frequency manager dialogs (bookmark add/edit, new/rename list, select-lists) ported over, gaining consistent Enter=apply / Escape=cancel and back/click-outside dismissal, with paired open flags collapsed into mode enums so "both dialogs open at once" is unrepresentable. Saving a bookmark with Enter/keypad-Enter and dismissing with Escape fixes AlexandreRouma#1758.
    • Source-menu add-offset dialog and the scheduler's task-edit popup adopted the same lifecycle.
  • Android navigation reworked around the platform task model. One Back press now dismisses one UI layer (topmost popup/modal, then credits, then — earlier in development — the menu), unwinding nested popups per press; Back arrives through both dispatch models (KEYCODE_BACK on Android ≤ 15 and OnBackInvokedCallback on Android 16+ with targetSdk 36). In the final design Back no longer collapses the menu panel or offers to exit — the dismiss chain ends by backgrounding the app via moveTaskToBack, matching the Android 12+ default — and exiting is done by holding the hamburger menu button for 0.6 s (haptic tick, then an Exit confirmation modal that stops the SDR and finishes the task). The old "Back Button Asks to Exit" System option was removed with this change.
  • Desktop widgets gained subtle rounding (frames/grabs/tabs 3 dp, popups 5 dp, scrollbar grabs become pills); windows and children stay square since they run edge-to-edge. The touch overlay's rounding is separate.
  • Left-menu layout hardened against the touch style: width math in several panels (FolderSelect/FileSelect "…" row, frequency-manager list selector, sink volume slider, Spots enable column, module-manager buttons, WebSDR view) now computes from live FramePadding/ItemSpacing/GetFrameHeight() instead of hard-coded 1× pixel constants. Full-width action buttons (Record, Start/Stop, Apply, …) are inset via new ImGui::ActionButton()/BeginActionRow() helpers (16 dp touch / 10 dp desktop per side) so CollapsingHeader bars remain the only edge-to-edge elements. The menu-header enable checkbox alignment is likewise derived from style metrics.
  • The doFingerButton 3×-font-height touch-button wrapper was removed now that the touch style overlay owns touch sizing globally; call sites use plain ImGui::Button and measure with GetFrameHeight().
  • RDS PS Name, RadioText and PTY Name now decode the RDS/EBU G0 character repertoire to UTF-8 at read time (raw storage unchanged), and the repertoire glyphs Roboto-Medium provides are baked into the ImGui atlas so non-ASCII station text renders correctly. Based on the approach in AlexandreRouma#1164, reworked to translate at read time rather than switching storage to std::wstring. Thanks to @attah.
  • Debug menu (and the ImGui demo window) now...
Read more

SDR++ iak v1.2.2-beta3

Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Jul 14:18

Added

  • KiwiSDR: "Recent" servers list — the last 8 servers connected to (whether picked on the map, typed by hand or re-picked from the list itself) are remembered across sessions together with their location and served frequency band, for quick reconnection without going through the map.
  • Level meter: clicking the meter toggles between a dBFS scale (0 dB at the right edge, negative to the left) and the original positive scale; tick labels and the numeric readout follow the active mode.

Changed

  • SNR readout reworked: SNR is now reported as the held peak in-band level over the out-of-VFO noise floor averaged over the same peak-hold window, so the value stays steady on keyed CW instead of sagging between dits and dashes. The separate "SNR Smoothing" display option was removed — smoothing of the readout is now intrinsic.
  • Level meter layout: on narrow windows the meter now switches to sparse (every-other) tick labels and hides the numeric readout instead of overlapping labels, and it can grow wider on large windows.
  • Application icons updated with the fork-specific (iak) branding, including the macOS and Windows icon variants.

Fixed

  • Fixed an out-of-bounds read in the FFT signal-level calculation (calculateVFOSignalInfo): with the VFO at the upper band edge the peak search read one float past the end of the FFT row and crashed the FFT thread (inherited from upstream).
  • Fixed a startup crash-loop on Android caused by the SNR smoothing config keys being read without registered defaults (resolved by the removal of that option).
  • USB streaming teardown was made sound across all libusb-based sources, fixing use-after-free crashes when stopping a source — most visibly the SIGSEGV in the Airspy HF+ source after a USB unplug on Android:
    • On Android, unplugging a device no longer closes the USB file descriptor under a live libusb handle; the connection is kept alive until the native side releases it, so cancelled transfers are reaped cleanly and a replug cannot be handed a stale connection.
    • The QMX Android USB backend's transfer teardown was reworked (submission/cancellation serialized, exact in-flight accounting, bounded 500 ms drain, leak-instead-of-free if the drain expires) and serves as the reference implementation.
    • The same defect class was fixed in the bundled drivers via PR-ready patches: libairspy, libairspyhf, libhydrasdr and librtlsdr all gained exact in-flight transfer accounting, resubmission gating during cancel, a verified cancellation drain, and a latch-and-leak fallback instead of freeing memory libusb still references. Also fixes rare stop-time crashes on desktop. An upstream librtlsdr hang (rtlsdr_close() spinning forever after an error-path exit from async reading) was fixed along the way.
  • KiwiSDR map fixes: clicks can no longer select markers that aren't drawn (hidden full servers in Hide Full mode) or leak through a marker to pan the map, overlapping markers now offer a pick-one popup instead of silently choosing the topmost, the Zoom In/Out buttons zoom around the viewport centre, pinch-to-zoom works on Android, the served band is shown in MHz, and on phone-landscape layouts the Test button stays reachable in a fixed footer.

Full Changelog: v1.2.2-beta2...v1.2.2-beta3

SDR++ iak v1.2.2-beta2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 08:05

Breaking 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) and CTCSS (Decode Only) modes, a full CTCSS tone table with Any, 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 .aab and 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 + bandwidth range while connected.
  • WFM RDS can now disable incremental PS/radio-text updates, showing only complete updated strings when that option is off.
  • SmGui gained 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_mode responses 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 libhydrasdr and 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. .flac files 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 *.wav and *.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*log10 of the mean signal amplitude instead of 10*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

SDR++ iak v1.2.2-beta

SDR++ iak v1.2.2-beta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Jul 05:39

Added

  • Frequency manager: merged the improvements from bookmark_manager by @darauble (Darau Ble), with contributions by @daviderud (Davide Rovelli), directly into the stock frequency manager module (the config format stays backward compatible): waterfall labels arranged in up to 10 rows with overlap avoidance, per-list colors, text-only and flag-style label options, UTC start/end times and week days per bookmark with off-air greying (UTC helpers from shortwave-station-list-sdrpp by Otto Pattemore), notes and geo info fields, a sortable bookmark table, click-to-select of waterfall labels, and moving bookmarks between lists. Several issues found in the original were fixed during the merge (crash on malformed list color, buffer overflows on long imported strings and malformed days arrays, stale label hit-testing, new bookmarks ignoring the selected target list, and a crash on malformed import files).
  • IF noise reduction (LogMMSE/OMLSA) module, ported from SDRPlusPlusBrown by @sannysanoff.

Changed

  • IF noise reduction hardening and refactoring after the port: crash safety and correct attach/detach to the IF chain, TX and samplerate awareness, removal of debug scaffolding and dead code, value-semantics arrays with a trimmed API and opt-in buffer recycling, a generated expn() lookup table replacing the hardcoded one, and UI polish.
  • Const correctness fixes of dsp::complex_t.
  • CI: Android Debug APKs are now opt-in and the Build Android workflow can be triggered manually (workflow_dispatch).

Fixed

  • IF noise reduction: fixed a buffer overflow in logmmse_all() output with large IF bandwidths and an out-of-bounds read in the expn() lookup.

Full Changelog: v1.2.2-alpha4...v1.2.2-beta

SDR++ iak v1.2.2-alpha4

Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Jul 18:27

Added

  • New CMake-based dependency build system, ported from PrusaSlicer's (written by Tamas Meszaros, @tamasmeszaros): all third-party libraries are now built from source instead of pulling prebuilt binary blobs. This enables native Windows on ARM64 builds and removes the need for the custom Android SDR-kit Docker image.
  • Native Windows on ARM64 builds.
  • Linux AppImage builds, with isolated config root.
  • Radiosonde decoder plugin, merged directly into the iak fork from sdrpp_radiosonde by @dbdexter-dev (Davide Belloli), built on his sondedump decoding library.
  • Spots module, merged from sdrpp-spots by @gerner.
  • WebSDR view module, based on the KiwiSDR map and waterfall code from SDRPlusPlusBrown by @sannysanoff.
  • libcurl integration for HTTPS and secure WebSockets, statically bundled and exported through sdrpp_core.
  • KiwiSDR improvements merged from the qrp73/sdr73 forks by @qrp73: server selection by address and port, server band parsing, and map improvements (day/night terminator, country colors, hover tooltips, and a runtime-toggleable marker style).

Changed

  • Reworked the WebSocket client for RFC 6455 correctness and hardening (handshake validation, fragmentation, redirect handling, and concurrency/write safety).
  • Networking hardening and cleanup across the KiwiSDR and web modules.

Fixed

  • QMX on Linux: fixed an exception when enumerating ALSA audio devices (#3).
  • Fixed input events leaking through overlapping ImGui windows.
  • Fixed flog string conversion for all numeric types supported by to_string.
  • Fixed a Debian package build regression where optimization was disabled.

Full Changelog: v1.2.2-alpha3...v1.2.2-alpha4

SDR++ iak v1.2.2-alpha3

Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Apr 16:51

Added

  • Merged KiwiSDR support from SDRPlusPlusBrown by @sannysanoff.

Changed

  • Further steps to fork from upstream with iak branding so that the iak fork could live side by side with upstream SDR++ on the same system. Fixed Linux Debian packages broken by previous iakization.
  • Fix of default audio sink on Linux with ALSA audio API selected: Don't let the ALSA audio queue dry up if radio is stopped. The ALSA sink would not restart if the radio was paused and restarted.

Full Changelog: v1.2.2-alpha2...v1.2.2-alpha3

SDR++ v1.2.2-alpha2

SDR++ v1.2.2-alpha2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Apr 18:26

Changed

  • Reworked high DPI display handling: The display DPI is newly respected.
  • A new user display scaling factor now multiplies with the display native DPI scale.
  • General clean-up of the UI scaling code to respect the display and user scaling factors.
  • Expanded the touch region around the view splitters on Android so that they could be touched by thick fingers.

Full Changelog: v1.2.2-alpha1...v1.2.2-alpha2

SDR++ v1.2.2-alpha1

SDR++ v1.2.2-alpha1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Apr 07:15

Added

  • Added Android audio rerouting when the preferred audio output changes.
  • Added Ctrl+scroll waterfall bandwidth zooming.
  • Added initial Android multi-touch support for waterfall zooming.

Changed

  • Updated CI artifact naming to include version information, commit distance, and commit hash from git describe.
  • Added the -iak infix to release artifact names and to Linux Debian package naming to keep this fork isolated from upstream SDR++ packages.
  • Reworked CI release handling to read version information from version.h.

Fixed

  • Fixed Android audio sink behavior by pausing and restarting audio output to work around devices that lock when the audio queue dries up.

Full Changelog: nightly...v1.2.2-alpha1