github gbozo/no-sdr v2.11.7-rust
v2.11.7-rust — dongle lifecycle, live settings, admin state

pre-releaseone hour ago

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_rate caused by closing the USB device while the blocking read_sync loop was still running. A DeviceGuard now closes the librtlsdr handle only after the last reference is dropped, and run_dongle waits 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. preFilterNb and 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, and internal/dsp tests pass.
  • Client: tsc --noEmit and vite build pass.
  • Hardware: RTL2838/R820T on local USB; live FFT/waterfall, IQ and Opus audio.

Artifacts

  • Rust Binaries CI 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) publishes ghcr.io/gbozo/no-sdr:2.11.7-rust for linux/amd64 and linux/arm64. It never uses latest.

Don't miss a new no-sdr release

NewReleases is sending notifications on new releases.