From fc11fd03707a03bbdbc8cb6e20e44cd4fa3307ae Mon Sep 17 00:00:00 2001 From: Mazeyar Moeini Feizabadi Date: Fri, 16 Oct 2026 18:48:44 +0200 Subject: [PATCH] docs(sdr): document bounded playback and credit seek fix --- CHANGELOG.md | 9 +++++++++ docs/CURRENT-STATE.md | 16 ++++++++++++++++ scripts/format-scope.json | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3e622b52..d70ba76e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +- Local FM seek finds stations after wrapping around 87.5–108 MHz, covers both + band edges, skips the starting station and rejects spectra from an earlier + tune (Aditya, @Rohilalala, #1174). +- Local RTL-SDR keeps USB reads queued in order and bounds pending decoder + work. A stalled or overloaded decoder stops with an explicit error; stopping + terminates its worker and rejects late audio. FM playback buffers short + scheduling gaps, caps its audio queue at 256 ms, and reduces display updates + and spectrum calculations while listening. + - Add Bogotá (Tembici, 250 stations) and Santiago de Chile (Bike Itaú, 200 stations) to the GBFS bikeshare registry, the layer's first stations in Colombia and Chile. Both are PBSC feeds like the Brazilian Bike Itaú cities, diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index 4c06dd3cb..62c279847 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -5396,6 +5396,22 @@ Local FM and internet radio are one listening surface: starting local FM stops internet-radio playback, and starting internet radio stops local FM. ADS-B reception does not interrupt internet radio. +- **FM seek.** Seeking wraps across 87.5–108 MHz, covers both band edges and + skips the starting station. Spectra carry a decoder epoch, so a retune or mode + change rejects earlier output. A failed scan retune stops seeking. This + integrates Aditya's (@Rohilalala) contribution in #1174; it does not change + the peak-selection algorithm or guarantee that a final station retune succeeds. +- **Streaming and playback.** Four ordered USB reads keep input available while + the page handles other work; control changes drain those reads before touching + the receiver. The worker must finish loading before reads start. Decoder work + is limited to eight unacknowledged blocks / 512 KiB, with a one-second oldest + block watchdog. Overload stops the receiver with an explicit error. Stop + terminates the worker immediately and disables the audio session; stale decoder + output and audio from retired sessions are refused. FM audio starts after an + 80 ms prebuffer and retains at most 256 ms, dropping the oldest frames on + overflow. FM signal display updates are coalesced to at most four per second; + spectra are computed only while seeking. Optional `decoderDiagnostics` adds + bounded timing samples and overload snapshots without recording audio or IQ. - **Modes.** FM (87.5–108 MHz, tune, seek, volume) or ADS-B at 1090 MHz. With a receiver open, selecting ADS-B enables the Local ADS-B layer; selecting FM disables it. diff --git a/scripts/format-scope.json b/scripts/format-scope.json index c62c6886f..c25797f38 100644 --- a/scripts/format-scope.json +++ b/scripts/format-scope.json @@ -872,9 +872,13 @@ "src/layers/weather/imageryHost.test.mjs", "src/sdr/adsbDecoder.test.mjs", "src/sdr/controller.test.mjs", + "src/sdr/decoderDiagnostics.test.mjs", "src/sdr/gain.test.mjs", + "src/sdr/readPipeline.diag.test.mjs", + "src/sdr/sdrAudioWorklet.test.mjs", "src/sdr/spectrum.test.mjs", "src/sdr/usbDevices.test.mjs", + "src/sdr/workerAdmission.test.mjs", "src/sources/adsbRecords.test.mjs", "src/layers/localAdsb/index.test.mjs", "src/ui/localSdrControls.test.mjs",