Tools: listen and scan reclaim their earlier channels before retuning the device, so a scanner
left running cannot move it in between; scan counts a range before building it; booleans are
read from JSON booleans, numbers and strings alike, so replace "false" is false and freeze 1
freezes; a MIMO device set takes receive and transmit channel types; deletion is serialised
from lookup to completion so two concurrent reclaims cannot take a third channel; tune_gain
refuses a gain or AGC key the device lacks; start_iq_recording checks the name first and cleans
up by UID; describe_settings emits a definition matched by name; remove_last_deviceset reports
a timeout; a device set a failed listen or scan created is removed again.
Capture: a name resolving to the capture directory itself is refused, a drive root works, and
files are listed by prefix rather than wildcard. The audio clock starts before the wait for the
sample rate. Subscriptions are capped per session, device set URIs checked, and absent device
sets skipped by the poll. The Codex writer drops dotted managed keys and refuses a spelling it
cannot rewrite rather than adding a duplicate table.
Bridge: one session at a time when SDRangel comes back, the stream socket is shut down rather
than closed from the other thread, SIGPIPE cannot end the process, and a failed notification
gets no reply.
Also: tool calls and audio captures give up when the server stops, so stopping the feature
cannot deadlock on a call waiting for the main thread; channels are held by UID throughout;
socket timeouts in the bridge; ResourceNotFound for a resources/read of a URI that is not there.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tune_gain steps a device through its gain range, measuring the noise floor
and the strongest signal on the main spectrum at each, and applies the gain
where the signal stands furthest above the floor, or, on a quiet band, the
lowest gain at which the antenna's noise rather than the converter's sets
the floor, short of overload. It knows the RTL-SDR, HackRF, Airspy, LimeSDR,
PlutoSDR and USRP, and takes a gain key and values for anything else.
scan steps by the channel spacing usual for the mode unless told otherwise,
refuses modes on fixed frequencies, measures its threshold from the floor
rather than assuming one, and reports every active frequency rather than the
five strongest and where the scanner happened to park. Broadcast FM is
scanned on its 100 kHz raster whatever step is given, with only the local
peaks reported, and listen and scan give it a 512 kS/s baseband with the
channel clear of the DC spike. pager, sonde and dsc modes are added.
listen retunes a demodulator of the right type a previous call added rather
than replacing it, and applies the RTL-SDR receiver profile only to a device
set it created. set_spectrum_settings reads the settings back and says when
a value was rounded or an averaging mode is set with nothing to average over.
get_spectrum_data returns its power array, which the generated serialiser had
been dropping.
describe_settings covers the spectrum display, and list_docs and get_docs
serve the GUI's own pages: the spectrum, its markers, measurements and
calibration, the main spectrum window, audio, configurations, device user
arguments and the transverter dialog.
The receiving guide gains sections on scanning, where each mode's output
appears and how long to wait for it, judging signal levels, gain, the
frequencies asked for by name including the DAB blocks, and the RTL-SDR's
limits on HF.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>