Rust backend release. Prerelease so the repository's "Latest" release stays with the Go backend.
Local USB RTL-SDR lifecycle
- Fixed a reproducible SIGSEGV in
rtlsdr_set_sample_ratecaused by closing the USB device while the blockingread_syncloop was still running. ADeviceGuardnow closes the librtlsdr handle only after the last reference is dropped, andrun_donglewaits for the source future after cancellation instead of dropping it immediately. - Rapid stop/start no longer overlaps USB handles: 100 consecutive stop/start cycles pass without crashes, heap corruption, or librtlsdr I/O errors.
- Overlapping reinit/start operations now use per-dongle generation tokens. An older rtl_tcp retry loop can no longer report "already running" and overwrite a newer successful local start with
state=error.
Admin state and hardware settings
- SDR Devices shows runtime state (
RUNNING/STOPPED/DISABLED), a live client count, and Start/Stop controls whose enabled/in-flight state follows the dongle. The list refreshes silently every 3 s. - Gain, PPM, direct sampling, bias-T, RTL AGC, and offset tuning are now pushed to a running dongle through the command channel without reopening USB. The same change is implemented in both Rust and Go backends.
- A zero gain now explicitly selects automatic tuner gain instead of leaving the previous profile's manual gain latched.
- Digital AGC verified end-to-end through the WebSocket IQ stream: RMS 450 with AGC on, 74 with it off, 455 when re-enabled. Logs now record the applied runtime settings.
Profile filters
- DC offset removal is verified live: with the profile blocker disabled, extracted IQ mean was −260 LSB; enabled, −14 LSB.
- Fixed profile switching leaving the previous profile's noise blanker latched.
preFilterNband its threshold are now re-applied to every live client pipeline on profile switch and active-profile edit, in both backends. - Added an extractor-level impulse regression test: the blanked output peak drops from 3036 to 1699 with the noise blanker enabled.
Verification
cargo test: 120 passed (default features).- Go:
go build ./...,internal/api,internal/dongle, andinternal/dsptests pass. - Client:
tsc --noEmitandvite buildpass. - Hardware: RTL2838/R820T on local USB; live FFT/waterfall, IQ and Opus audio.
Artifacts
Rust BinariesCI attaches portable archives for Linux amd64 v1–v4, Linux arm64 Cortex-A53/A72/A76, macOS arm64/Intel and Windows amd64, plus SHA256SUMS.Docker Publish (Rust)publishesghcr.io/gbozo/no-sdr:2.11.7-rustfor linux/amd64 and linux/arm64. It never useslatest.