github Newspicel/sdrmm v2.4.0

4 hours ago

Features

  • A KrakenSDR is five Device nodes wired to one Array, not a device kind of its own (191d51b)
  • A recorder keeps an optional pre-roll, and the time machine node retires (191d51b)
  • A recording and a signal generator are picked by a Device node like any radio (191d51b)
  • Examples: twelve working workspaces you can import and change (d71cbca)
  • Note: markdown you leave on the canvas (e84e03d)
  • Remote access through app.sdrmm.com is gone; use your own tunnel (b4dd06d)
  • Rotator: Winegard Trav'ler mounts point over their motor console (e1e5a06)
  • SAME alerts: NOAA Weather Radio and EAS headers, with the counties they cover (04a3c80)
  • The server listens on 127.0.0.1 by default and refuses a wider bind without a token (191d51b)
  • The signal generator and the virtual radios share one synthetic backend (191d51b)

Fixes

  • A baseline writer refuses to run unless it is asked for by name (41b122b)
  • A channel keeps the first radio ID and tells no contact apart from the first (191d51b)
  • A closed DSC squelch no longer grows the decoder buffers without bound (191d51b)
  • A codeplug address that runs past the 32 bit space is refused instead of wrapping (191d51b)
  • A codeplug with two entries of one name keeps its references on the first (191d51b)
  • A collection file is on disk before its lanes look like recordings (191d51b)
  • A CPM demodulator only accepts the input domain it was built for (191d51b)
  • A dead subcarrier, an ISI-free response and a stalled clock no longer panic (191d51b)
  • A decoder log CSV export cannot smuggle a spreadsheet formula (191d51b)
  • A failed close of a radio session is reported instead of swallowed (191d51b)
  • A failed migration read no longer drops the audio chain it was lifting (191d51b)
  • A history capture marks the gap it spliced over (191d51b)
  • A label outside the constellation is refused instead of modulating point zero (191d51b)
  • A LoRa channel name is bounded by its own 32 character limit (191d51b)
  • A malformed RS41, wM-Bus or NAVTEX frame is rejected instead of stopping the decoder (f531d30)
  • A matrix cell out of range or a solve without a factorization is refused (191d51b)
  • A missing array surface slot counts as a dropped surface, not a dropped report (191d51b)
  • A NanoVNA zoom drag stays inside the measured band (191d51b)
  • A new node lands where it was placed instead of jumping as the viewport animates twice (191d51b)
  • A newly learned trunk plan is written down in channel order (191d51b)
  • A non-finite sample no longer drives the AGC to full gain (675e45d)
  • A notch width reads in hertz (191d51b)
  • A paired server cannot flood the phone with an oversized reply (191d51b)
  • A partial page write keeps the Radtel flash past the table it was given (191d51b)
  • A phone recovers from a sensor sample stamped in the future (191d51b)
  • A radio refuses more than 64 channels on one lane (191d51b)
  • A radio that advertises no sample rates keeps the rate it was given (191d51b)
  • A radio transfer that crashed no longer blocks every later identify, read and write (191d51b)
  • A read or write to a radio leaves the server answering other requests (191d51b)
  • A recording upload that lies about its size is refused instead of ending the server (74f800c)
  • A removed row no longer commits its neighbour's unsaved edit (191d51b)
  • A right-click or middle-click on a frequency digit no longer retunes (191d51b)
  • A rotator serial port can be picked while a GPS receiver is attached (191d51b)
  • A satellite track with an unreachable time is refused instead of hanging (191d51b)
  • A saved sweep that fails to load now says so (191d51b)
  • A scanner refuses a zero step or an over-wide range when the workspace is saved (191d51b)
  • A server without a token answers only its own addresses, localhost and the names it was given (191d51b)
  • A session can watch only so many sinks and ports, and a socket takes bounded messages (191d51b)
  • A short write to an AnyTone radio no longer zeroes the next contact record (191d51b)
  • A spectrum frame that does not fit the transform is dropped instead of killing its worker (191d51b)
  • A stalled recording no longer stalls a radio's settings or its shutdown (191d51b)
  • A stored Kraken workspace becomes five radios on one array (191d51b)
  • A stored workspace naming a backend this build dropped clears that node's radio (191d51b)
  • A time machine belongs to its workspace and arms again when you come back (6e5f37f)
  • A token the vault refuses starts no session (191d51b)
  • A truncated capture or a failed channel fit now surfaces (191d51b)
  • A truncated CPDLC route clearance is rejected instead of rendered blank (191d51b)
  • A vanished recordings folder no longer empties the recording index (2508fc5)
  • A video face counts the pictures it had to drop (191d51b)
  • A WAV with an extra chunk reports the right length (191d51b)
  • AD936x: sample datagrams are taken from the radio only, and an extreme errno is reported (191d51b)
  • ADS-B tracks a hub sized fleet and reports evicted tracks (191d51b)
  • Airspy, Airspy HF+ and HackRF open on Linux with a kernel module bound, instead of reporting the radio as in use (c2c5879)
  • Airspy: the receiver is switched on after its transfers are queued (191d51b)
  • An amp stage reads out in the unit its firmware reports (191d51b)
  • An array collection recording keeps every lane on the same sample (191d51b)
  • An array lane whose radio restarted is re-leased and reported as down (191d51b)
  • An array processor reports a surface it could not publish as a lost surface, not a lost report (191d51b)
  • An array reports a correction it could not clear and an aggregator that panicked (191d51b)
  • An audio spectrogram keeps its history when the palette changes (191d51b)
  • An event filter counts characters, not bytes, and the contains field stops at its limit (191d51b)
  • An imported recording lands whole or not at all, and a cut upload surfaces (191d51b)
  • An off-screen Scope stops redrawing its trace until it comes back (191d51b)
  • An oversized frame is refused at encode instead of writing a truncated length (191d51b)
  • An oversized ionosonde feed is refused while it is still arriving (191d51b)
  • An uploaded recording with backwards captures is refused instead of panicking (191d51b)
  • Android release builds fail without a keystore instead of writing an unsigned APK (191d51b)
  • APRS rejects coordinates past the pole and the meridian (191d51b)
  • APRS speed and altitude read in km/h and metres (dcd1bcd)
  • Array sample alignment no longer stalls while a processor retires (191d51b)
  • Blocks lost to a lagging stream reach the dropped count in diagnostics (191d51b)
  • Bluetooth: a truncated service UUID list is counted instead of dropped (191d51b)
  • CR-8: a tuning the radio cannot reach is refused, and its serial is read within bounds (191d51b)
  • D-STAR plays the voice of the frame that carries the superframe sync (191d51b)
  • D-STAR reports the slow data message and its full twenty characters (191d51b)
  • DAB: 80 kbit/s services at protection level 1 decode instead of staying silent (ad814ec)
  • DAB+: audio lost to reception errors leaves a gap of its own length instead of draining the buffer (b9f15d3)
  • DAB decodes unequal error protected sub-channels that carry padding bits (191d51b)
  • DAB reports a sub-channel whose size disagrees with its protection profile instead of playing silence (191d51b)
  • Decoder labels name the evidence: off air, reference fixture, or our own modulator (191d51b)
  • Degenerate DSP inputs are refused instead of panicking (191d51b)
  • Dependencies move to current, closing three zip advisories in the Windows updater (5d32ce3)
  • Desktop: a download's save dialog no longer freezes the app on Linux (29873c5)
  • Desktop installers are checked against the stamped version before release (191d51b)
  • Devices: a radio that refuses one re-arm is dialled again within the restart budget instead of ending the stream (89cbde5)
  • Devices: a radio two workspaces reach for at once is opened once, not dialled twice (4606dab)
  • Digital voice decoders report the frames they throw away (191d51b)
  • DMR discards an embedded or short link control that never terminates (191d51b)
  • Drone Remote ID: beacons that fail to parse are counted, and the encoder keeps the unknown track and accuracy codes honest (191d51b)
  • DVB applies a multi-section program or map table only once every section has arrived (191d51b)
  • DVB ignores a table announced for later until it becomes current (191d51b)
  • Each decoder is named once in the wire table that builds its settings and limits (191d51b)
  • ERMES: an inverted signal decodes, and dropped pager frames are counted (191d51b)
  • ESP-SDR: a lost start reply still stops the board, and one bad datagram is skipped (191d51b)
  • Every device backend has one name, shared by the engine, the doctor and the browser (191d51b)
  • Every modem throughput gate refuses a baseline recorded on another host instead of passing (191d51b)
  • Every serial port list hides dial-in nodes, pseudo ports and bridge duplicates (191d51b)
  • FLEX: out of range capcodes and unchecked block information words no longer make pages (191d51b)
  • French Remote ID: horizontal speed reads the full unsigned range (191d51b)
  • FunCube Dongle: transfers the kernel still owns keep their buffers until the device closes (191d51b)
  • GNSS rejects a C/A cross-correlation peak instead of locking the wrong PRN (191d51b)
  • GSM: the message log and cell readouts show the newest frames, not the first ones heard (720f42c)
  • HFDL reads the neighbour frequency bitmap byte aligned and attributes an uplink to its own aircraft (191d51b)
  • Inmarsat Aero burst demodulators are built once instead of once per burst (191d51b)
  • Inmarsat STD-C flags a gap in an EGC sequence and reports rectangular extents in degrees (191d51b)
  • ISM: a lone trailing half-bit and an overlong pulse no longer stretch a decoded row (191d51b)
  • ISM: an Oregon THGR122N frame whose temperature is not plausible BCD is dropped instead of reported (191d51b)
  • KiwiSDR: a held socket that will not arm says why instead of opening a second channel (191d51b)
  • Kraken: bank settings pause the stream the way a single dongle does (191d51b)
  • M17 extended addresses no longer print as a callsign (191d51b)
  • MIAM, ADS-C and ARINC 622 reject out of range values instead of wrapping them (191d51b)
  • NAVTEX reports characters lost in every copy (191d51b)
  • NFM keeps CTCSS and DCS out of the audio in every tone mode (191d51b)
  • NFM receive de-emphasises at 750 us and the transmitter pre-emphasises to match (191d51b)
  • NXDN keeps the last frame of an over and survives a jittered sync (191d51b)
  • NXDN names the RF direct channel correctly (191d51b)
  • OFDM: a preamble found at the very start of a stream decodes instead of panicking (d8489f3)
  • P25 counts network identifier errors over the protected bits (191d51b)
  • POCSAG: a page poisoned by an uncorrectable codeword is counted (191d51b)
  • Port types say what they carry: baseband, video, control, position and array (191d51b)
  • Rack grips take the keyboard and name themselves to a screen reader (191d51b)
  • Radar and spatial canvases stay sharp at browser zoom (604a646)
  • Radios: a capture that could not arm leaves the radio stopped (191d51b)
  • Radiosondes: the M10 and M20 GPS week stays in the current epoch without a code change (191d51b)
  • Reconnecting to the server no longer re-runs a tool over serial (191d51b)
  • Removing an array switches its noise source off instead of leaving it injecting (191d51b)
  • Retuning a DMR receiver forgets the last site's masked checksums and trunking tier (191d51b)
  • RTL-SDR: 28.8 MHz engages the upconverter, and a tuner reset that failed is reported (191d51b)
  • RTL-SDR: a serial write and an open stay on the dongle the scan found (191d51b)
  • RTL-SDR: a stalled demod register write is read back and written again, so frequency and gain changes work on Windows (ff1dec3)
  • rtl_tcp: a dial is retried while the server is between clients, instead of failing on one timeout (5594af5)
  • rtl_tcp: let go of the old connection before dialling the next one, so a server that serves one client at a time greets the reconnect (b0040ca)
  • rtl_tcp streams on the connection it was greeted on and waits out a server still letting go of its last client (8633698)
  • Saved signal generator nodes move to the virtual backend on load (191d51b)
  • SDRplay: a receiver selected behind a stuck lock is released again (191d51b)
  • SDRplay: a stream the API will not stop keeps the memory its callbacks use (191d51b)
  • Signal generator: a signal it cannot synthesise fails instead of streaming silence (191d51b)
  • SoapySDR: a 0.9 runtime is loaded, next to 0.8 (0f32b4a)
  • SoapySDR: a driver fault on a setting or a timestamp surfaces instead of being guessed at (191d51b)
  • SoapySDR: a probe helper whose output is held no longer wedges the capture thread (191d51b)
  • SoapySDR: the module farm is private to this process, and a stall probes only the radios in view (191d51b)
  • SpyServer streams on the connection it handshook on instead of dialling a second time (055ffcd)
  • SSTV Robot 72 sends its second chroma porch at the published 1500 Hz (191d51b)
  • The 4FSK curve matches the decoder that measures it, and a curve tolerance follows its error counts (41b122b)
  • The database takes a second process writing to it, and deletes clear the rows that pointed at what went (191d51b)
  • The decision-directed carrier detector slices each symbol once (191d51b)
  • The limits say how many channels and monitors one radio can host (191d51b)
  • The map panel survives switching the sink feed off and on again (191d51b)
  • The scanner refuses a sweep wider than the engine's target cap (191d51b)
  • The signal identifier finds a sync word at the very start of a capture window (191d51b)
  • The signal identifier reports a flat band's centre in hertz so its zoom lands on the band (191d51b)
  • The signal identifier says why a confirmation decoder or frame search could not run (191d51b)
  • The UI reads the audio rate, audio seeds, survey grid, decoder defaults and wM-Bus key shapes from the server (191d51b)
  • TLS and async internals updated for the rustls, webpki and tokio advisories (a3d5fd3)
  • Undo and redo no longer leave a gain stage twice in the saved settings (191d51b)
  • VDL2 ATN reassembly needs every segment covered and caps its pending buffers (191d51b)
  • VHF ACARS decodes the application layer, reassembles multi-block messages and counts rejected blocks (191d51b)
  • Virtual radios are offered only where the server serves them (191d51b)
  • VOR radials stay accurate at the shortest report interval and an out of range navaid interval is refused (191d51b)
  • w-MBus: variable length records read their BCD and binary encodings and refuse reserved ones (191d51b)
  • Weather satellites template: Meteor-M LRPT on 137.900 MHz, the NOAA APT satellites are off the air (e7b6ced)
  • Wire verdicts refuse a graph larger than a workspace may hold (191d51b)
  • YSF voice FR mode decodes to speech instead of noise (191d51b)

Container image: docker pull ghcr.io/newspicel/sdrmm:2.4.0

Full Changelog: v2.3.0...v2.4.0

Don't miss a new sdrmm release

NewReleases is sending notifications on new releases.