diff --git a/AGENTS.md b/AGENTS.md index 7dbd7dc02e..0dbdf442ff 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -274,7 +274,7 @@ Full dependency list is in `README.md`. Adding a test: declare it in ### Version and release files -Current version: **26.10.3**. +Current version: **26.10.4**. Versioning scheme is **CalVer** (`YY.M.patch[.hotfix]`) starting from v26.5.1, the 1.0-equivalent. Hotfix sub-patches use a 4th component (e.g. 26.5.2.1). Earlier tags used semver through v0.9.8. diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b5ce44ce0..5bdcd7c31c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,78 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] +## [v26.10.4] — 2026-10-25 + +### The Updates window and an automatic update check · SmartSDR 4.3 Noise Floor Range, CW profiles, APD and meter fixes · RF-KIT RF2K-S, the Icom SCROLL-F panadapter and ANAN-G2 band-pass filters · typed slice and panadapter lifecycle + +72 merged changes from 13 human contributors and one Dependabot update within that total. AetherSDR now checks for its own updates at launch, at most once every 24 hours, and shows the result as a title-bar badge, and File → Update... opens one window for the AetherSDR release and the radio's firmware. Underneath it, the signed update manifest, the patch stager and the Windows swap helper are built and tested, ready for the install button that follows. SmartSDR 4.3 support continues with the radio's Noise Floor Range, CW profiles, the APD state machine and unsigned amplifier and tuner meter handles. A wide Retina panadapter no longer stops a FLEX-8600's display output for every client. Station accessories gain the RF-KIT RF2K-S, the Icom panadapter scrolls instead of recentering, and the ANAN-G2 selects its receive band-pass filters. Upgraded Windows installs get HTTPS back, and touch screens get pinch-zoom and press-and-hold. Slice lifecycle, split routing and panadapter/waterfall control move behind typed backend requests. + +### In-app updates + +- **An automatic update check and an UPDATE badge (#6715).** The check runs 15 seconds after launch and at most once every 24 hours, and a failed attempt counts toward the wait. A newer release only lights the **UPDATE** pill beside the AetherSDR wordmark: nothing pops up, and "up to date" or a network failure stays silent. The badge survives a restart inside the wait, clears when you upgrade, and never shows for a release you skipped with the new **Skip This Version** button. Store-managed installs never show it. It is on by default. A manual check during the startup check keeps the daily wait, and redirects are refused (#6716). +- **The Updates window, File → Update... (#6717).** A canon window that shows the release, its version and date, and a chip for each chapter of its notes. **Get AetherSDR** opens the download built for this computer: the Windows setup or portable ZIP, the macOS Apple Silicon DMG, or the Linux x86_64/aarch64 AppImage. When none fits, it opens the release page. +- **Radio firmware moves into the Updates window (#6718).** The **YOUR RADIO** section lists FlexRadio's published SmartSDR releases, one lane per major line, with the installed release outlined and the newest release in the radio's own line preselected when the radio is behind. A v3 radio is offered v3, never v4. **Install** downloads the installer from FlexRadio, checks it against FlexRadio's MD5, extracts the firmware and uploads it after one confirmation; if the MD5 cannot be fetched, it stops and asks again, saying the integrity was not checked. Radio Setup keeps only the FW Version. +- The update pipeline behind the next step. Every release now publishes a signed manifest and per-file patch bundles for the last four stable releases (#6737), with a publication check that reports each failed read and repairs a torn `latest/` (#6746). `UpdateStager` applies a signed update into a copy of the install, and falls back to the full signed portable ZIP when no patch applies; a staged release is kept across launches (#6747, #6771). On Windows, `AetherSDRUpdater` swaps a staged release in after AetherSDR exits, checks it and rolls back on failure (#6767). Nothing starts an install yet: the Install and Restart to update buttons come next. + +### SmartSDR 4.3 and FlexRadio + +- **Noise Floor Range (#6660).** SmartSDR 4.3.16 lets the radio's Auto FFT floor tolerate 0–10 dB of noise-floor movement before it repositions the panadapter, which reduces oscillation at high zoom. An **NF Range** slider under FFT Floor shows the pan's reported value and requests a new one on release, click or keystroke. It is dimmed, with its reason, until the radio is a FLEX-8000 or Aurora on 4.3.16 or later, the SmartSDR+ license is confirmed and the pan has reported a value. The radio owns the value; nothing is stored or re-sent by the client. +- **CW profiles (#6668).** On 4.3.16 and later, the profile list, load, create, delete and reset verbs reach SmartSDR's new CW profile type, with its unsaved-changes flag, gated by a `cwProfileControl` capability record. +- **A wide Retina pan no longer stops the radio's display (#6728).** A FLEX-8600 on 4.3.16 accepts a pan width of 4093 pixels or more and then sends no FFT or waterfall data to any client until it reboots. AetherSDR caps the request at 3840. +- **One owner for the transmit DAX flag (#6593).** The radio's `transmit dax` bit is shared by every client. TCI no longer latches it on, so the next microphone transmission is modulated again, and RADE sets it on Windows, so DAX no longer has to be pressed and released around it. +- SmartCAT and rigctld map SmartSDR 4.3's `FDVU`/`FDVL` FreeDV modes, so a logger no longer reads USB and switches the slice out of FreeDV (#6657). Amplifier and tuner meter handles at or above `0x80000000` parse as unsigned, so PGXL meters stay on the amplifier panel and TGXL meters stay off it (#6658). APD follows the radio's `state=` lifecycle and applies equalizer status only for the matching transmit slice, antenna, frequency and power (#6659). +- CW key and PTT commands send the client handle as eight hex digits, as FlexLib does (#6612). The slice's processing chain and the radio's IARU region are retained read-only and exposed through the automation bridge and troubleshooting JSON (#6613). +- A host firewall that drops unsolicited UDP no longer leaves a LAN connection with no spectrum, audio or meters: a keepalive to the radio's VITA source port 4993 holds the return path open, and the no-spectrum warning names the firewall as a likely cause (#6704). +- A radio reached over IPv6 binds its LAN sockets in the right address family (#6700), and its CTR2 relay, VPN source path picker, VITA QoS marking and diagnostics work over IPv6 too (#6708). The Tailscale Remote Access guide states the 4.2.18 firmware minimum for the in-radio container (#6651). + +### Icom, ANAN-G2 and Hermes-Lite 2 + +- **The Icom panadapter scrolls instead of recentering (#6688).** On the IC-7300MK2, IC-705 and IC-9700 the scope runs in SCROLL-F, so clicking, the wheel and slice-marker drags tune the VFO without moving the window, a pan drag scrolls without retuning, and the window follows only at its margins, as on a Flex. A new Icom-only **Scope** row in the Display panel selects Center, Scroll-F or Fixed. +- The IC-705's preamp cycles OFF/P.AMP1 at and above 74.8 MHz instead of requesting the P.AMP2 stage the radio rejects (#6679). A networked Icom that releases the current audio and CI-V streams now disconnects and reconnects instead of staying falsely connected (#6682). +- **ANAN-G2 band-pass filters and speaker mute (#6673).** RFC #6209 parts 2 and 3: **Filter bank: Follow the tuned frequency** selects the receive band-pass filter on both ADCs as DDC0 tunes (Bypassed remains the default), and **Mute the radio's speaker amplifier** mutes the G2's amplifier independently of the title-bar mute. ANAN discovery logs bind and send failures once per condition and keeps sweeping after a bind failure (#6666). +- The Hermes-Lite 2 reads the N2ADR IO board's status registers — the input pins, ATU progress, fault code and firmware version — over the I2C read path as `ioboard.status`, with no new write path (#6703). + +### Station accessories and controllers + +- **RF-KIT RF2K-S amplifier (#6596).** A standalone peripheral over the amplifier's REST API: forward and reflected power, SWR, temperature, supply, current, band, frequency and tuner status, with OPERATE/STANDBY, internal antenna selection and a confirmed error reset. Tested on an RF2K-S at firmware G200C267; other RF-KIT models are untested. Clearing a peripheral's address in Radio Setup now also stops a reconnect loop aimed at it. +- The TGXL power gauge follows the shared transmit meter selection, so it no longer pins at 200 W with a KPA500 in operate (#6707). +- **The CTR2 relay over USB with Lynovation's firmware (#6698).** CTR2-Max firmware v1.02.00 and later relays over USB, and the relay starts it automatically. A USB relay with no answer for 10 seconds says which firmware it needs. **Wide reports** carry up to seven link reports per USB transfer, about 49 KB/s each way, for devices that offer them (#6713, #6714); on Windows, update AetherSDR before installing firmware that uses them. +- On Linux, one click installs the udev rule that lets the logged-in user flash a CTR2-Max in download mode (#6741). The CTR2 window's questions use canon message boxes, and a restart on request no longer leaves the relay in Error or the firmware offer stale (#6736, #6766). +- CTR2 device rescans enumerate only the known CTR2 VID:PIDs and run off the GUI thread, ending the periodic spectrum freezes on Windows (#6583, #6645), and HID discovery is serialized process-wide, so concurrent rescans no longer crash macOS (#6606). + +### Windows, display and operation + +- **Touch gestures (#6772).** Pinch-zoom on the panadapter, press-and-hold as a right-click, and kinetic scrolling in lists and menus, for the Maestro's panel and any Qt touch screen. Tap-to-tune, drag-to-pan and mouse and trackpad behavior are unchanged. RFC #6775. +- **Upgraded Windows installs get HTTPS back (#6687).** An installer before May 2026 left a Qt 6.7 TLS plugin that cannot load under Qt 6.12, and it disabled every HTTPS and WSS connection: SmartLink, update checks, QRZ, FreeDV Reporter, propagation and model downloads. The installer now clears the Qt plugin folders on upgrade. +- The multiFLEX Dashboard, TX Band Settings, Icom RC-28 Button Mapping and NR2's FFTW Wisdom window move to canon windows (#6768, #6735, #6745, #6776). The multiFLEX Dashboard stays open beside the main window, and TX Band Settings follows the radio's TX profile, band values and answers. +- Band plans gain segment usage notes on hover, and the IARU Region 1 and SSA rows painted digi-only are all-modes again (#6573, RFC #4667). +- DVK slots stay readable in a short window (#6611). The compact RX presets fit Linux's DejaVu Sans (#6643). The Waveforms empty-state hint no longer clips (#6689). The GHE Port field shows and edits its value (#6692). Radio Setup stays in front the first time a page is built on macOS (#6602). The FlexControl menu entry keeps its ampersand (#6569). Copy Assist keeps the reason an enable failed (#6694). +- Band-state and bookmark replays no longer raise unsupported-control notices for controls the radio lacks, while explicit operator requests still do (#6672). +- The ggmorse decoder keeps its pitch and WPM ranges across restarts and pans (#6633). Unlocking a stopped CW decoder leaves no dead pitch for Zero Beat, and ggmorse no longer writes decoded text to stdout (#6674); the vendored library's local changes are recorded (#6670). +- `midi.settings` is written atomically, so a failed save keeps the previous bindings (#6630). + +### Typed backend controls (aetherd M4) + +- Spots, lineout/headphone/front-speaker controls, pan zoom and RX antenna, tuning step and net corrections move to typed requests, shrinking the raw Flex command count above the seam from 215 to 192 (#6619). Slice create/remove, split routing, TX-slice assignment, full duplex and slice refresh follow (#6621), then panadapter/waterfall lifecycle and every existing display control (#6628). Setup refusals name the requested setting in their diagnostics (#6665). These are scoped M4 increments, not completion of aetherd or a thin UI client. + +### Automation and bridge + +- The bridge's `vox_toggle` shortcut requires TX permission, and VOX can be disarmed without it (#6631). + +### Project and packaging + +- CI: signing, Store and Pages deploys run in environment-gated jobs (#6571); docs.aethersdr.com deploys when a release is published, from its tag (#6558); CodeQL compile coverage includes `deepcw_ctc_test` and `update_swap_test` (#6551, #6774); the full-suite tracking issue names the source PR and compares failures with the parent run (#6652, RFC #6435). +- macOS development builds can opt in to ad-hoc signing for local-network discovery (#6662). Tests follow RTL native receive, the TX band RCA column and a live HL2 TCI session (#6637, #6642). +- `actions/setup-python` moves to 7.1.0 (#6719). + +### Contributors + +Thanks to **@ten9876** (31 commits — maintainer; in-app updates, SmartSDR 4.3 support, IPv6 and firewall fixes, CTR2 USB relay and wide reports, touch gestures, canon dialogs and CI), **@rfoust** (9 commits — typed slice, utility and panadapter controls, HID discovery, NetCW handles, chain/IARU metadata, DVK and RX preset sizing, macOS development signing), **@NF0T** (8 commits — the transmit DAX flag, the Windows TLS upgrade fix, band-plan usage notes, setup diagnostics, the VOX bridge gate, atomic MIDI settings and release-time docs deploys), **@Ozy311** (6 commits — CTR2 VID:PID scanning, IC-705 preamp, Icom media reconnect, Copy Assist, Waveforms and GHE port fixes), **@w5jwp** (5 commits — the Retina pan cap, TX Band Settings and RC-28 canon windows, Radio Setup and FlexControl menu fixes), **@skerker** (4 commits — ggmorse ranges and decoder fixes, CodeQL coverage), **@tropo1234** (2 commits — ANAN-G2 band-pass filters, speaker mute and discovery logging), **@jensenpat** (1 commit — the Icom SCROLL-F panadapter), **@nreed97** (1 commit — SmartSDR 4.3 CW profiles), **@on8st** (1 commit — HL2 TCI test fixture), **@ve3nsv** (1 commit — RF-KIT RF2K-S support), **@W5TSU** (1 commit — HL2 IO board status) and **@WA8PAM** (1 commit — TGXL power gauge with a KPA500). Dependabot contributed one dependency update. Counts cover primary commit authors; co-author credit remains in the commit history. + +Welcome to first-time contributors **@ve3nsv**, **@W5TSU**! + +73, Jeremy KK7GWY & Claude (AI dev partner) + ## [v26.10.3] — 2026-10-18 ### SmartSDR 4.3 firmware support and the DeepCW AI CW decoder · Multi-slice Auto SQL fixes, local voice recordings and Elecraft station panels · Controller improvements and typed backend controls diff --git a/CMakeLists.txt b/CMakeLists.txt index 425245a170..bdeef05627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ if(POLICY CMP0156) cmake_policy(SET CMP0156 NEW) endif() -project(AetherSDR VERSION 26.10.3 LANGUAGES C CXX) +project(AetherSDR VERSION 26.10.4 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/README.md b/README.md index 51065d7609..37f1e35712 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ AetherSDR brings full FlexRadio operation to Linux, macOS, and Windows — each a native build, no Wine or virtual machines. A native aarch64 build also runs on Raspberry Pi and other embedded ARM devices. Built from the ground up with Qt6 and C++20, it speaks the SmartSDR protocol natively and aims to replicate the full SmartSDR experience. -**Current version: 26.10.3** — CalVer (`YY.M.patch[.hotfix]`). | [Download](https://github.com/aethersdr/AetherSDR/releases/latest) | [Discussions](https://github.com/aethersdr/AetherSDR/discussions) | [What's New](https://github.com/aethersdr/AetherSDR/releases) +**Current version: 26.10.4** — CalVer (`YY.M.patch[.hotfix]`). | [Download](https://github.com/aethersdr/AetherSDR/releases/latest) | [Discussions](https://github.com/aethersdr/AetherSDR/discussions) | [What's New](https://github.com/aethersdr/AetherSDR/releases) > **Native builds for Linux, macOS, and Windows** — Linux AppImage (x86-64 + aarch64), macOS DMG (Apple Silicon + Intel), Windows installer and portable ZIP. Every platform is built, tested in CI, and released together. @@ -37,9 +37,10 @@ AetherSDR brings full FlexRadio operation to Linux, macOS, and Windows — each - **FreeDV RADE** — AI digital-voice codec with a client-side neural encoder/decoder - **AetherMap (PSK Reporter) overlays** — optional global precipitation (LibreWXR, with NOAA, ECCC and EUMETNET OPERA regional radar backups and a per-provider legend), NOAA/NWS weather radar with observation playback ([`docs`](docs/psk-reporter-weather-radar.md)) and a NASA/GSFC VIIRS night-lights layer that fades through civil twilight ([`docs`](docs/psk-reporter-city-lights.md)), on both the 2D map and 3D globe - **SmartLink remote, remote over CGNAT, and a TCI v2.0 server** — Auth0/TLS WAN operation; an in-radio Tailscale node that carries AetherSDR to a FLEX-8000 or Aurora radio behind CGNAT; and CAT + audio + IQ + CW + spots + tune and receiver events over a single TCI WebSocket -- **Broad hardware control** — rigctld and virtual-serial CAT, MIDI mapping, the FlexControl knob, serial PTT/CW keying, Multi-Flex operation alongside SmartSDR/Maestro, and a CTR2-Max relay over Wi-Fi, with negotiated spectrum and CW-text extensions for compatible USB controllers +- **Broad hardware control** — rigctld and virtual-serial CAT, MIDI mapping, the FlexControl knob, serial PTT/CW keying, Multi-Flex operation alongside SmartSDR/Maestro, a CTR2-Max relay over Wi-Fi or USB with negotiated spectrum and CW-text extensions for compatible controllers, and touch gestures (pinch-zoom, press-and-hold, kinetic scrolling) on touch screens - **Workspace canvas** — place pans and applets freely as resizable, layered items with edge and grid snapping, across several windows if you want them. Named workspaces recall which applets are open as well as where they sit, and bind to radio profiles. Off by default; the Classic shell is unchanged until you enable it - **A user guide at [docs.aethersdr.com](https://docs.aethersdr.com)** — Stable and Next versions, a printable PDF manual signed with each release, and a Log Analyzer that reads a log or support bundle in your browser without uploading it +- **In-app updates** — a check at launch, at most once a day, that lights an UPDATE badge in the title bar, and an Updates window (File → Update...) with the download built for this computer and the radio's firmware releases - **Built-in demo mode** — a synthetic backend generating its own RX audio and matching panadapter, with a fault-injection harness, so you can explore the full UI with no radio attached (it cannot transmit) --- @@ -102,12 +103,15 @@ FlexRadio remains the supported target: receiver, backend-side FFT averaging, the CL1 external 10 MHz reference and per-radio state restore (AGC mode and threshold, TUNE power per band, FFT averaging, FPS and dBm range, receivers B–D with their own setpoints, and - manual notches). + manual notches), and the N2ADR IO board's status registers. - **Networked Icom** — **early**. CI-V over the RS-BA1 UDP transport, brought up on the IC-705 (receive, scope, transmit, FT8) and completed against a live IC-7300MK2 (controls, meters, ATU, WSPR, PC Audio routing and the CW decoder). The connect path asks the radio for its own CI-V address rather than assuming - one. Only the IC-705 and IC-7300MK2 are verified against their own CI-V guides + one. On the IC-7300MK2 and IC-705, and on the IC-9700, which is not yet + verified, the panadapter runs in SCROLL-F, tuning in place and scrolling at + its margins as on a Flex, with Center and Fixed selectable. Only the IC-705 + and IC-7300MK2 are verified against their own CI-V guides — an unrecognised model gets no scope and no transmit rather than optimistic defaults. The **IC-7300MK2 over built-in Ethernet/RS-BA1 is supported** as of v26.9.5 ([RFC #5517](https://github.com/aethersdr/AetherSDR/issues/5517)); @@ -122,8 +126,9 @@ FlexRadio remains the supported target: AGC-T spans −20 to 120 dB, NB2 interpolates over impulses, the status bar shows the supply voltage and link, and frequency, mode, step, output level and dBm range are remembered per radio. Front-end settings are under Radio - Setup → Radio; discovery probes each distinct attached IPv4 subnet. Transmit - is a future phase. + Setup → Radio, including receive band-pass filters that follow the tuned + frequency and a speaker-amplifier mute; discovery probes each distinct + attached IPv4 subnet. Transmit is a future phase. - **RTL-SDR** — **experimental, receive-only**, bundled in every official package. Discovers supported USB dongles through `librtlsdr` and provides one panadapter and, at a normal launch, one host-demodulated slice, publishing @@ -262,7 +267,8 @@ Currently in flight: receive control, bounded telemetry and credential-bound transmit grants with Flex PTT handoff have landed, and the desktop's slice receive controls travel as typed backend requests. Radio Setup, TX Band, USB, profile and memory - controls now use that seam too; per-client propagation, transmit for the other + controls, slice lifecycle and split routing, and panadapter/waterfall control + now use that seam too; per-client propagation, transmit for the other families and a thin client to replace direct model access have not. - **Non-Flex backends** — Hermes-Lite 2 (experimental), networked Icom (early; the IC-7300MK2 over RS-BA1 is supported), and ANAN-G2 and RTL-SDR @@ -270,11 +276,12 @@ Currently in flight: remaining work for each is under [Supported Hardware](#supported-hardware). - **Workspace canvas** — an experimental alternative shell; remaining work is live cross-window drag and field time against the Classic shell. -- **CTR2 controller relay** — Wi-Fi operation, with negotiated spectrum/CW - text for compatible USB controllers and exclusive USB device ownership. +- **In-app updates** (RFC #5304) — the check, badge and Updates window ship; + the Windows install and restart wiring, then the other platforms, remain. - **The visual canon** — the AetherSDR style guide (RFC #6226) is applied one - surface at a time; SpotHub, Radio Setup and AetherControl now join the earlier - windows, and a single base-token flip comes last. + surface at a time; the multiFLEX Dashboard, TX Band Settings, RC-28 mapping + and FFTW Wisdom windows now join the earlier ones, and a single base-token flip + comes last. - **AppSettings nested-JSON refactor** — storage is on SQLite with per-radio versioned feature documents; the legacy flat keys still need migrating. - **Flathub submission** — the AppStream metainfo and manpage are in; the diff --git a/ROADMAP.md b/ROADMAP.md index 39d5ef155c..313723a03c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -7,7 +7,7 @@ as direction changes. For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). -## Current cycle: post-v26.10.3 +## Current cycle: post-v26.10.4 ### In flight @@ -47,8 +47,12 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). WDSP's second noise blanker as a typed blanker kind on the receive route. v26.10.3 moved the remaining slice/transmit model controls, Radio Setup, TX Band, transverter and USB configuration, and profile/memory operations onto - typed requests, with original-session and owner fencing. These are scoped - M4 increments, not completion of the daemon or the thin UI. Remaining: + typed requests, with original-session and owner fencing. v26.10.4 moved + spots, physical outputs, pan zoom and RX antenna, tuning step and net + corrections (raw Flex commands above the seam 215 → 192), then slice + lifecycle, split routing, TX-slice assignment and full duplex, then + panadapter/waterfall lifecycle and every existing display control. These are + scoped M4 increments, not completion of the daemon or the thin UI. Remaining: per-client propagation, transmit for SmartLink and the other families, transmit audio transport, and a replacement thin UI client — UI code still consumes models directly, and that remains correct until that client exists. @@ -81,7 +85,11 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). each had a passing backend test — COMP read back on the radio's 0–10, squelch on at threshold 0, the preamp/ATT interlock shown at once, and the SQL line drawn on a measured scale — and gave `radiocert` stages that catch each - class on any radio publishing the control. Remaining: transmit confirmation on additional Icom + class on any radio publishing the control. v26.10.4 runs the IC-7300MK2, + IC-705 and IC-9700 scope in SCROLL-F, so the panadapter scrolls and tunes in + place as on a Flex, with Center and Fixed on an Icom-only Scope row; it also + bounded the IC-705 preamp ladder above 74.8 MHz and reconnects when the radio + releases the current media streams. Remaining: transmit confirmation on additional Icom models, the per-model SET-menu item numbers the MOD Input check needs, audio gain/mute/pan, an automation verb making the modulation sources assertable without parsing Radio Health text, and the once-a-second @@ -107,8 +115,9 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). −20…120 dB with a working AGC-off gain, published link telemetry and the supply voltage, and added WDSP's second noise blanker. v26.10.3 moved the seven front-end options to Radio Setup → Radio and added discovery per distinct - attached IPv4 subnet; band-filter and speaker-amplifier controls remain - follow-ups under RFC #6209. The codec is + attached IPv4 subnet. v26.10.4 delivered parts 2 and 3 of RFC #6209: the receive band-pass + filters can follow the tuned frequency and the speaker amplifier mutes on its + own, and discovery logs its bind and send failures. The codec is multi-DDC capable but `AnanBackend` still drives one; remaining is the `AnanRxDsp` fan-out, then transmit. - **RTL-SDR — experimental, receive-only** — `librtlsdr` discovery with one @@ -186,7 +195,8 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). discovered the radio on every local interface. v26.10.3 enables AM, DSB and simplex FM/NFM through TXA, retains graphic EQ across restarts, makes Show TX in Waterfall client-owned on HL2, and observes hardware PTT without keying - the host. Keyed rendering and hardware-PTT validation remain outstanding. + the host. v26.10.4 reads the N2ADR IO board's status registers over the + I2C read path. Keyed rendering and hardware-PTT validation remain outstanding. **The experimental → supported call itself is still open**; what remains before making it is the rest of panadapter/waterfall parity with the Flex path, arming automatic RF gain by default, and field time on the TXA chain @@ -194,20 +204,6 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). keeps linear phase, at 4096 taps (85 ms onset) until a notch or a narrow passband needs 8192, and the 0.6–1.1 s pan-bandwidth rebuild is off the audio path but still a wait. -- **CTR2 controller relay** ([RFC #6091](https://github.com/aethersdr/AetherSDR/issues/6091), approved) — the - CTR2 Proxy applet shipped in v26.10.1: an operator-enabled, byte-for-byte - relay that connects a CTR2-Max controller to the radio AetherSDR is connected - to, as an independent client outside AetherSDR's transmit paths. Wi-Fi mode - works with today's CTR2 firmware. USB mode's host side is complete in link - format v0, with AetherSDR starting the handshake, and the firmware author's - development firmware has received the radio's status stream over it. - v26.10.2 added per-device link extensions ([RFC #6332](https://github.com/aethersdr/AetherSDR/issues/6332), approved): a device - on the USB relay can negotiate an audio-spectrum feed and the relay's UDP - port, verified end to end with an AetherKnob on a FLEX-8600, while a stock - CTR2 stays on plain link v0. v26.10.3 adds a CW-pitch-centered linear spectrum - and RX CW text for compatible controllers, and exclusive USB device ownership between AetherSDR - processes. Stock USB relay compatibility still depends on the controller - firmware. - **AetherSDR style guide — the visual canon** ([RFC #6226](https://github.com/aethersdr/AetherSDR/issues/6226), approved; tracking [#6239](https://github.com/aethersdr/AetherSDR/issues/6239)) — the canon is written down in `docs/style/aethersdr-style-guide.md` with its own `color.canon.*` tokens, @@ -215,8 +211,18 @@ For *what shipped*, see [`CHANGELOG.md`](CHANGELOG.md). AetherTX, AetherModem, AetherMap, AetherGPS, Connect to Radio, AGC-T Calibration, the DVK panel and the panadapter header, through `CanonWindow` and the new in-window `CanonSurface` classes. v26.10.3 adds SpotHub, Radio - Setup and AetherControl to the migrated workspaces. Remaining: the other surfaces, + Setup and AetherControl to the migrated workspaces, and v26.10.4 the multiFLEX + Dashboard, TX Band Settings, Icom RC-28 Button Mapping, NR2's FFTW Wisdom + window and the CTR2 window's message boxes. Remaining: the other surfaces, one PR at a time, then a single flip of the base tokens to canon values. +- **In-app updates** ([RFC #5304](https://github.com/aethersdr/AetherSDR/issues/5304)) — v26.10.4 shipped the + update check at launch with its UPDATE title-bar badge and Skip This Version, and the + Updates window (File → Update...) with the download built for this computer + and the radio's firmware lanes and install. Behind it, every release + publishes a signed manifest and per-file patch bundles, `UpdateStager` + stages a verified update into a copy of the install, and the Windows + `AetherSDRUpdater` swaps it in and rolls back on failure. Remaining: the + Install and Restart to update wiring on Windows, then the other platforms. - **AppSettings nested-JSON refactor** — ~460 flat call sites today; the new pattern is one nested-JSON value per feature (Principle V). The storage layer moved to SQLite and the scoped feature-document store, @@ -298,7 +304,7 @@ Substantial features requested on the **Amplifier & tuner integrations** -- **RF2K+ / RF2K-S** PA ([#1902](https://github.com/aethersdr/AetherSDR/issues/1902)), +- **RF2K+** PA ([#1902](https://github.com/aethersdr/AetherSDR/issues/1902)), **Palstar HF-Auto** ([#97](https://github.com/aethersdr/AetherSDR/issues/97)), **LDG** USB-serial tuner ([#2092](https://github.com/aethersdr/AetherSDR/issues/2092)), and **Icom AH4** tuner protocol ([#542](https://github.com/aethersdr/AetherSDR/issues/542)). @@ -338,7 +344,6 @@ implementation**. An approved RFC moves up into the cycle above. Full list: - [#5688](https://github.com/aethersdr/AetherSDR/issues/5688) — SIP session border controller — phone patch and two-ended SIP/RTP relay over RF - [#5468](https://github.com/aethersdr/AetherSDR/issues/5468) — Complete RTL-SDR receive DSP with multiple slices, independent zoom and stereo WFM - [#4840](https://github.com/aethersdr/AetherSDR/issues/4840) — IC-9700 support for dual VFOs / slices for satellite use -- [#4667](https://github.com/aethersdr/AetherSDR/issues/4667) — Band plans conflate preferred mode with usage — six segments mislabelled digi-only, and the schema that caused it - [#3894](https://github.com/aethersdr/AetherSDR/issues/3894) — Standalone receive sessions for KiwiSDR and future receive-only providers - [#3869](https://github.com/aethersdr/AetherSDR/issues/3869) — HFChat: many-to-many text chat over HF RTTY (FDMA) with OTA + optional KiwiSDR reconciliation - [#3613](https://github.com/aethersdr/AetherSDR/issues/3613) — Remote RF-quiet receive 'antennas' — WebSDR & KiwiSDR @@ -346,12 +351,13 @@ implementation**. An approved RFC moves up into the cycle above. Full list: - [#5972](https://github.com/aethersdr/AetherSDR/issues/5972) — Native Xiegu G90 backend — CI-V control and external stereo raw-IQ input - [#6106](https://github.com/aethersdr/AetherSDR/issues/6106) — Backend-owned hardware profiles for openHPSDR Protocol 2 radios - [#6079](https://github.com/aethersdr/AetherSDR/issues/6079) — Optional Digital FM reception and program metadata +- [#6712](https://github.com/aethersdr/AetherSDR/issues/6712) — RF-KIT applet: optional TUNE button, ATU indicator, Error banner and one-click RESET +- [#6725](https://github.com/aethersdr/AetherSDR/issues/6725) — ANAN-G2: diversity reception on the synchronized DDC0/DDC1 pair **Interface and workflow** - [#6515](https://github.com/aethersdr/AetherSDR/issues/6515) — A View → Meter Type submenu for S-Meter and SmartMTR - [#5616](https://github.com/aethersdr/AetherSDR/issues/5616) — Use Case Profile/Settings Manager — combine radio profiles and client presets under one switchable label -- [#5304](https://github.com/aethersdr/AetherSDR/issues/5304) — AetherSDR In-App Update Design - [#5270](https://github.com/aethersdr/AetherSDR/issues/5270) — Pluggable applets and the Applet Exchange (ApX) - [#5234](https://github.com/aethersdr/AetherSDR/issues/5234) — Add dedicated Band Applet and BAND top-bar toggle button - [#5010](https://github.com/aethersdr/AetherSDR/issues/5010) — Status-bar clock display options @@ -359,6 +365,9 @@ implementation**. An approved RFC moves up into the cycle above. Full list: - [#3689](https://github.com/aethersdr/AetherSDR/issues/3689) — Net Reminder Scheduler — post-merge follow-ups (#3684) - [#1494](https://github.com/aethersdr/AetherSDR/issues/1494) — CW and RTTY tuning indicators: pitch centering and tone alignment - [#6212](https://github.com/aethersdr/AetherSDR/issues/6212) — Status bar: caption the supply voltage when it is the only PA reading +- [#6677](https://github.com/aethersdr/AetherSDR/issues/6677) — Compact Memory drawer sizing and icon-revealed live search +- [#6690](https://github.com/aethersdr/AetherSDR/issues/6690) — AetherModem instances, fixed RX assignment, and a receive-only APRS iGate +- [#6742](https://github.com/aethersdr/AetherSDR/issues/6742) — Title bar radio tabs: the three most recent radios, every other radio in a drawer (amends RFC #4764) **Project infrastructure** @@ -372,6 +381,24 @@ implementation**. An approved RFC moves up into the cycle above. Full list: Highlights from the current cycle (v26.10.x). Earlier releases and the complete list are in [`CHANGELOG.md`](CHANGELOG.md): +- **The Updates window and an automatic update check** — a check at launch, + at most once a day, that only lights an UPDATE badge, Skip This Version, File → Update... with the + download for this computer, and radio firmware installs in the same window. + RFC #5304 (v26.10.4). +- **SmartSDR 4.3 Noise Floor Range and CW profiles** — the radio-owned NF Range + slider and the CW profile type, with APD state, FDVU/FDVL CAT modes and + unsigned amplifier/tuner meter handles (v26.10.4). +- **The CTR2 relay over USB** — Lynovation's CTR2-Max firmware v1.02.00 and + later relays over USB and starts automatically, with a wide-report link for + devices that offer it and one-click Linux download-mode access. RFC #6091 + (v26.10.4). +- **RF-KIT RF2K-S, the Icom SCROLL-F panadapter and ANAN-G2 band-pass filters** + — a REST-API amplifier applet, an Icom panadapter that scrolls instead of + recentering, and the G2's filter bank and speaker mute (v26.10.4). +- **Touch gestures** — pinch-zoom, press-and-hold right-click and kinetic + scrolling for touch screens. RFC #6775 (v26.10.4). +- **HTTPS back on upgraded Windows installs** — the installer clears the stale + Qt TLS plugin that disabled SmartLink, update checks and downloads (v26.10.4). - **SmartSDR 4.3 controls** — radio-owned Auto AGC-T, DSP parameter reset, PTT Mic Override and per-band RCA off/TUNE, gated by firmware, hardware and licence as applicable (v26.10.3). diff --git a/docs/user/src/components/LogAnalyzer/rules.json b/docs/user/src/components/LogAnalyzer/rules.json index e68ecf3d88..e4acdee3b6 100644 --- a/docs/user/src/components/LogAnalyzer/rules.json +++ b/docs/user/src/components/LogAnalyzer/rules.json @@ -9,7 +9,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7540, + "line": 7562, "text": "else if (key == \"model\")" } ] @@ -21,7 +21,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7549, + "line": 7571, "text": "else if (key == \"software_ver\")" } ] @@ -94,7 +94,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7502, + "line": 7524, "text": "\"RadioModel: terminal GUI client registration failure\"" } ] @@ -111,12 +111,12 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7432, + "line": 7454, "text": "RadioModel: this GUI client was force-disconnected by another client" }, { "file": "src/models/RadioModel.cpp", - "line": 7476, + "line": 7498, "text": "RadioModel: radio disconnected this session because another GUI client used the same ID" } ] @@ -133,7 +133,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7342, + "line": 7364, "text": "RadioModel: multiFLEX disabled, other clients present" } ] @@ -150,7 +150,7 @@ "source": [ { "file": "src/core/backends/flex/RadioConnection.cpp", - "line": 624, + "line": 635, "text": "RadioConnection: socket error:" } ] @@ -167,7 +167,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 8683, + "line": 8707, "text": "consecutive pings unanswered — forcing disconnect" } ] @@ -188,12 +188,12 @@ "source": [ { "file": "src/core/backends/flex/RadioConnection.cpp", - "line": 685, + "line": 696, "text": "qCDebug(lcConnection) << \"RX:\" << line;" }, { "file": "src/models/RadioModel.cpp", - "line": 7549, + "line": 7571, "text": "else if (key == \"software_ver\")" } ] @@ -210,7 +210,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7743, + "line": 7765, "text": "RadioModel: no VITA-49 UDP data received after 10s" } ] @@ -227,17 +227,17 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 7721, + "line": 7743, "text": "RadioModel: UDP stream setup failed" }, { "file": "src/core/backends/flex/PanadapterStream.cpp", - "line": 231, + "line": 239, "text": "PanadapterStream: failed to bind UDP socket:" }, { "file": "src/models/RadioModel.cpp", - "line": 7796, + "line": 7819, "text": "RadioModel: client udpport collision" } ] @@ -254,7 +254,7 @@ "source": [ { "file": "src/core/backends/flex/PanadapterStream.cpp", - "line": 171, + "line": 177, "text": "capped by net.core.rmem_max" } ] @@ -452,12 +452,12 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 1370, + "line": 1384, "text": "RadioModel: dax_rx stream create for channel" }, { "file": "src/core/backends/flex/PanadapterStream.cpp", - "line": 1836, + "line": 1899, "text": "stream create failed/dropped" } ] @@ -474,7 +474,7 @@ "source": [ { "file": "src/models/RadioModel.cpp", - "line": 13217, + "line": 13286, "text": "RadioModel: DAX TX create failed" } ] @@ -547,7 +547,7 @@ "source": [ { "file": "src/gui/SpectrumWidget.cpp", - "line": 13220, + "line": 13259, "text": "\"SpectrumWidget: QRhi failure:\"" }, { @@ -574,7 +574,7 @@ "source": [ { "file": "src/gui/SpectrumWidget.cpp", - "line": 2002, + "line": 2009, "text": "SpectrumWidget: AETHER_NO_GPU/QT_OPENGL=software" } ] @@ -608,7 +608,7 @@ "source": [ { "file": "src/main.cpp", - "line": 85, + "line": 86, "text": "Non-fatal X11 error suppressed (error_code=" } ] @@ -941,7 +941,7 @@ "source": [ { "file": "src/core/backends/hl2/Hl2Backend.cpp", - "line": 2854, + "line": 2886, "text": "HL2: could not open the UDP socket" } ] @@ -961,7 +961,7 @@ "source": [ { "file": "src/core/backends/hl2/MetisClient.cpp", - "line": 510, + "line": 523, "text": "MetisClient: no EP6 for" } ] @@ -996,7 +996,7 @@ "match": { "substring": "the radio released the serial and audio streams" }, - "docs": "/next/networked-icom#audio-and-radio-updates-stop-after-switching-applications", + "docs": "/networked-icom#audio-and-radio-updates-stop-after-switching-applications", "source": [ { "file": "src/core/backends/icom/IcomSession.cpp", @@ -1057,7 +1057,7 @@ "source": [ { "file": "docs/user/docs/troubleshooting.md", - "line": 91, + "line": 109, "text": "error while loading shared libraries: libOpenGL.so.0" } ] @@ -1075,7 +1075,7 @@ "source": [ { "file": "docs/user/docs/troubleshooting.md", - "line": 101, + "line": 119, "text": "needs glibc 2.38 or newer" } ] diff --git a/docs/user/stable-version.json b/docs/user/stable-version.json index d63ddf4f85..4e0048ef76 100644 --- a/docs/user/stable-version.json +++ b/docs/user/stable-version.json @@ -1,3 +1,3 @@ { - "label": "26.10.3" + "label": "26.10.4" } diff --git a/docs/user/versioned_docs/version-stable/aethersweep.md b/docs/user/versioned_docs/version-stable/aethersweep.md index e114e8485f..d2955e92e7 100644 --- a/docs/user/versioned_docs/version-stable/aethersweep.md +++ b/docs/user/versioned_docs/version-stable/aethersweep.md @@ -19,7 +19,7 @@ bandwidth marked. Genius XL** is in OPERATE. > **Other amplifiers are not checked.** AetherSweep only knows about the -> PGXL. If you have an ACOM, SPE, VK3AMP, KPA1500 or any other amplifier in +> PGXL. If you have an ACOM, SPE, VK3AMP, RF-KIT, KPA1500 or any other amplifier in > line, put it in standby or bypass yourself before sweeping. See > [Amplifiers](./amplifiers.md). diff --git a/docs/user/versioned_docs/version-stable/amplifiers.md b/docs/user/versioned_docs/version-stable/amplifiers.md index 0ea6ff7e15..c5665cd5c9 100644 --- a/docs/user/versioned_docs/version-stable/amplifiers.md +++ b/docs/user/versioned_docs/version-stable/amplifiers.md @@ -1,12 +1,12 @@ --- title: "Amplifiers" slug: "/amplifiers" -description: "AetherSDR controls several linear amplifiers directly, independent of the radio: the ACOM S-series, the SPE Expert 1.3K-FA / 1.5K-FA / 2K-FA and the original 1K-FA, the VK3AMP 600 / 1000 / 2000 W, and the Elecraft KPA500 / KPA1500." +description: "AetherSDR controls several linear amplifiers directly, independent of the radio: the ACOM S-series, the SPE Expert 1.3K-FA / 1.5K-FA / 2K-FA and the original 1K-FA, the VK3AMP 600 / 1000 / 2000 W, the Elecraft KPA500 / KPA1500, and the RF-KIT." --- AetherSDR controls several linear amplifiers directly, independent of the radio: the ACOM S-series, the SPE Expert 1.3K-FA / 1.5K-FA / 2K-FA and the -original 1K-FA, the VK3AMP 600 / 1000 / 2000 W, and the Elecraft KPA500 / KPA1500. Each is configured in +original 1K-FA, the VK3AMP 600 / 1000 / 2000 W, the Elecraft KPA500 / KPA1500, and the RF-KIT. Each is configured in [Peripherals](./peripherals.md) and gets its own applet in the **Amplifiers** category. Any combination can be connected at once, alongside a PGXL. @@ -354,6 +354,44 @@ The **Elecraft KPA1500** applet (button **KPA1500**): There is no network PTT and no lost-link TX inhibit. +## Using the RF-KIT + +> **Tested on an RF2K-S, firmware G200C267.** The RF-KIT support follows the +> vendor's published REST API documentation (RFKIT API 0.9.0). Other RF-KIT +> models have not been tried. Reports from owners are welcome. + +Add it with **Peripherals → Add → RF-KIT Amplifier**, enter the amplifier's IP +address (or host name) and HTTP port (default 8080), and press **Connect**. +AetherSDR talks to the amplifier's REST API over plain HTTP; there is no login. + +The **RF-KIT Amplifier** applet: + +- A status pill, the amplifier's name, and **PWR**, **REF** and **SWR** gauges. + The scales are fixed, like the amplifier's own display: forward power + 0–1600 W, reflected power 0–200 W, and SWR on the amplifier's 1 / 1.5 / 2 / 3 / + 5 / ∞ scale. The reflected-power and SWR bars turn orange from 1.5:1 and red + from 2:1 (on the reflected-power bar these points follow the forward power). +- An info grid with temperature, supply voltage, current, band, frequency and + the operational interface (`UNIV`, `CAT`, `UDP` or `TCI`). +- A **TUNER** line showing the tuner's mode, setup and L/C values, and a + **TUNER ON** (green) / **TUNER OFF** (red) indicator beside OPERATE. The tuner + is read-only: the amplifier's API has no tuner control, so the indicator + cannot be pressed. +- The amplifier's own status text and, when it reports one, an error banner. +- **OPERATE / STANDBY**. The label changes only when the amplifier confirms. +- **ANT** buttons for the internal antennas (1–4). Antennas the amplifier + reports as disabled, or does not list, are dimmed (hover for the reason), and the amplifier may refuse a change at + times (it answers 409). **EXT** is dimmed unless the amplifier lists an external + antenna, and lights, with the switch port ("EXT 16") when the amplifier gives + one, while the external antenna is in use. It is an indicator only: the + external antenna cannot be selected from AetherSDR. +- **RESET ERR**, which asks for confirmation and then clears the amplifier's + error state. Make sure the cause has been dealt with first. + +The operational interface is shown but cannot be changed from AetherSDR: +switching it could cut the amplifier off from the radio driving it. There is no +network PTT. + ## Using the LP-100A wattmeter The TelePost LP-100A is a wattmeter, not an amplifier, but it is set up the @@ -427,6 +465,17 @@ seconds, because the amplifier answers only broadcast ARP. 1. Wait: AetherSDR waits up to 18 seconds before trying again. +### The RF-KIT will not connect + +AetherSDR declares the link up only when the amplifier answers `GET /info` with +an RF-KIT document, so a wrong address or port fails rather than half-connecting. + +1. Check the address and port in **Peripherals**; the default HTTP port is 8080. +2. Open `http://
:
*The CTR2 relay controls before a CTR2 is selected, from before they moved into the CTR2 window. The radio's address is blacked out.*
> **Check the mode the first time.** On builds with USB support, USB is the
-> default until the relay has been started once. A CTR2 on its stock firmware
-> works only in **Wi-Fi (TCP)** mode, so pick it unless the CTR2-Max runs
-> AetherCTR2.
+> default until the relay has been started once. Lynovation's other CTR2
+> controllers, and a CTR2-Max on firmware older than v1.02.00, work only in
+> **Wi-Fi** mode, so pick it for those.
## Starting automatically
@@ -63,18 +65,26 @@ connects to a radio. The choice is saved.
- If the CTR2 is not plugged in yet, AetherSDR keeps looking every few seconds
and starts the relay when it appears.
- Pressing **Stop** holds it off until AetherSDR next connects to a radio.
-- In USB mode it starts only a CTR2-Max running AetherCTR2, or an AetherKnob.
- A CTR2 on its stock firmware has no USB mode.
+- In USB mode it starts a CTR2-Max (on Lynovation's firmware or AetherCTR2)
+ or an AetherKnob. A CTR2-Max on firmware older than v1.02.00 never answers; see
+ [No answer from the CTR2](#no-answer-from-the-ctr2). Lynovation's firmware
+ uses Espressif's generic USB name, so another ESP32-S3 board with the same
+ name and kind of HID interface may be tried too. A device that never
+ answers is tried about once a minute.
- **Linux:** if the CTR2 udev rule is not installed yet, press **Start** once
to install it.
-## Using Wi-Fi (TCP) mode
+## Using Wi-Fi mode
1. On the CTR2, set the radio IP address to **this PC's LAN address**.
2. In the CTR2 window, pick the **Listen** address: one of this PC's local IPv4
addresses. The listen port is 4992; it can be changed while stopped.
3. Press **Start**.
+The relay reaches the radio at the address AetherSDR is connected to, IPv4
+or IPv6, in both Wi-Fi and USB mode; only the Wi-Fi **Listen** address must be
+IPv4.
+
Each CTR2 connection gets a fresh connection to the radio. Only one CTR2
connection is active at a time; extra ones are closed and counted as
rejected. Wi-Fi mode relays TCP only (no UDP discovery or UDP streams), so
@@ -84,18 +94,23 @@ features of the CTR2 that rely on UDP may not work this way.
The CTR2's traffic travels in USB HID reports, and AetherSDR starts the link,
so you only pick the device and press **Start**. It needs a CTR2-Max running
-AetherCTR2 (see below) or an AetherKnob.
+Lynovation's firmware v1.02.00 or later or AetherCTR2 (see below), or an
+AetherKnob.
- The **USB** device list shows candidate HID devices, with known CTR2 boards
and the AetherKnob named and listed first. While the relay is stopped the
list refreshes itself every 2 seconds, so a CTR2-Max that switches between
its stock firmware and AetherCTR2 shows up as it is now; **Rescan** refreshes
it (and the local addresses) at once.
+ USB discovery is shared with other HID controllers, so you can rescan while
+ an encoder is reconnecting. Stopping one controller leaves the others available.
- **Linux:** a udev rule for the CTR2 ships with the build. If the device
cannot be opened, **Start** offers to install the rule
(`/etc/udev/rules.d/70-aethersdr-ctr2.rules`) through `pkexec`, asking for
- your administrator password once. The rule only opens CTR2 controllers and
- the AetherKnob to whoever is logged in at the computer.
+ your administrator password once. The rule opens CTR2 controllers, the
+ AetherKnob, and the USB serial port of ESP32-S3 boards (which the CTR2-Max
+ uses in download mode, for firmware installs) to whoever is logged in at the
+ computer, and to no one else.
- **AetherKnob** (an AetherSDR controller on the Elecrow CrowPanel 2.1"
rotary display) uses USB mode the same way. It appears in the list as
**AetherKnob**. While it is relaying, AetherSDR also sends it a 32-bar
@@ -125,6 +140,13 @@ AetherCTR2 (see below) or an AetherKnob.
become spaces. DeepFist's decode is not sent yet.
A CTR2 never receives either.
+- **A faster link.** Controller firmware that supports it (AetherCTR2 builds
+ with wide reports) and AetherSDR agree by themselves on a USB link about
+ seven times faster; AetherCTR2 uses it for the panadapter's zoom and
+ reference levels. Lynovation's firmware and older AetherCTR2 releases keep
+ the plain link and work as before. **On Windows, update AetherSDR first:**
+ AetherSDR releases from before the faster link cannot relay firmware that
+ supports it there.
- Other controller firmware that speaks the same USB link can name itself:
a `303A:1001` device whose USB product name starts with **Aether** (that
exact case) and continues with at least one more character appears in the
@@ -179,8 +201,10 @@ version, or other stock firmware it asks you to, in an alert: hold **BOOT** (thr
AetherSDR reads the registration before writing anything, and refuses an
unregistered unit; AetherCTR2 also checks it at every start.
- **Linux:** download mode uses the unit's USB serial port. If AetherSDR
- cannot open it, add yourself to the group that owns the port (`dialout` or
- `uucp`, depending on the distribution) and log in again.
+ cannot open it, the CTR2 window offers to install the CTR2 access rule
+ (the same one **Start** installs) through `pkexec`, asking for your
+ administrator password once, then carries on with the install. No group
+ change or logging out is needed.
- A build with serial-port support (Qt Serial Port) for download mode, and
USB HID support (hidapi) for updates over the cable.
@@ -229,7 +253,15 @@ starts.
The CTR2 window notices the switch by itself: the device list and **Status**
follow within a couple of seconds, with no **Rescan** needed. With **Start
automatically** ticked, the relay starts again once the CTR2-Max is back in
-AetherCTR2.
+AetherCTR2. After a restart asked for from the CTR2 window, it waits for the
+unit to leave and come back rather than reopening it on its way out; if
+AetherSDR misses that, it tries again after 20 seconds. Another controller is
+not kept waiting.
+
+Before **Restart into**, **Install** or a stock-firmware install, the window
+may show **Reading the CTR2-Max's firmware…** for a moment while it checks
+whether the running firmware can restart on request, so it asks for the BOOT
+and RESET buttons only when the firmware really needs them.
### Backups
@@ -243,7 +275,9 @@ date, including any saved with **Back Up…** in earlier versions of AetherSDR
it. Installing one restores it: the whole flash goes back exactly as it
was, both firmwares, the settings and the registration included, and anything
since is lost. A backup restores only onto the unit it came from (matched by
-its MAC address), and only if the file is unchanged since it was made.
+its MAC address), and only if the file is unchanged since it was made. The
+question before a restore has **Cancel** as its default, so pressing Return
+keeps what is on the unit; restoring takes a click on **Restore**.
### Cancelling
@@ -342,7 +376,27 @@ second client. The proxy cannot be used with this radio.
The build was made without hidapi.
-1. Pick **Wi-Fi (TCP)** mode instead.
+1. Pick **Wi-Fi** mode instead, if the CTR2's firmware still has Wi-Fi.
+
+### No answer from the CTR2
+
+The relay is running in USB mode, but the CTR2 has not answered it:
+"No answer from the CTR2. USB mode needs CTR2-Max firmware v1.02.00 or
+later, or AetherCTR2."
+
+1. Check the CTR2-Max's firmware version. Before v1.02.00 it has no USB mode.
+2. Update it to v1.02.00 or later (see
+ [Updating the CTR2-Max's own firmware](#updating-the-ctr2-maxs-own-firmware)), or
+ install AetherCTR2.
+3. Or stop the relay and use **Wi-Fi** mode with the firmware it has. Other
+ CTR2 controllers always use Wi-Fi mode.
+
+If the relay stops with an error before the CTR2 ever answered, **Start
+automatically** waits a minute before trying it again, instead of a few
+seconds. It tries again at once when the USB device list changes (the CTR2
+switches firmware, or another device is plugged in or out), when you pick
+another device or mode, when you tick **Start automatically** again, or when
+AetherSDR next connects to a radio. **Start** always tries again.
### "... is in use by another AetherSDR"
diff --git a/docs/user/versioned_docs/version-stable/cw-decoder.md b/docs/user/versioned_docs/version-stable/cw-decoder.md
index a69efeec99..3c18dd27db 100644
--- a/docs/user/versioned_docs/version-stable/cw-decoder.md
+++ b/docs/user/versioned_docs/version-stable/cw-decoder.md
@@ -124,8 +124,8 @@ Decoded text is published to the MQTT topic `aethersdr/cw/decode`, one JSON mess
| **Sens** | 0–100 (default 30). Hides low-confidence characters: 0 shows everything, higher values show only confident decodes. |
| **🔒P** | Lock the decoder's pitch at the current value |
| **🔒S** | Lock the decoder's speed at the current WPM |
-| **Pitch** | Pitch search range, 300–1200 Hz (default 500–700 Hz) |
-| **WPM** | Speed search range, 5–60 WPM (default 15–40 WPM) |
+| **Pitch** | Pitch search range, 300–1200 Hz (default 500–700 Hz), remembered and the same on every pan |
+| **WPM** | Speed search range, 5–60 WPM (default 15–40 WPM), remembered and the same on every pan |
| **CPY ALL** / **CPY VIS** | Copy all decoded text, or just the visible text, to the clipboard |
| **A− / A+** | Decoded-text size (8–32 px), remembered |
| **CLR** | Clear the decoded text |
@@ -153,7 +153,6 @@ Colors are based on ggmorse's cost function:
## Known issues
- The decoder shows no text on some FLEX-8600 setups ([#6158](https://github.com/aethersdr/AetherSDR/issues/6158)).
-- The pitch search range is not kept when a slice is reopened, even with both range locks engaged ([#5921](https://github.com/aethersdr/AetherSDR/issues/5921)).
- The squelch threshold line can appear on the panadapter in CW, although squelch is unavailable there ([#6276](https://github.com/aethersdr/AetherSDR/issues/6276)).
## Troubleshooting
diff --git a/docs/user/versioned_docs/version-stable/dsp-noise-mitigation.md b/docs/user/versioned_docs/version-stable/dsp-noise-mitigation.md
index 63c04059fc..e87a11db66 100644
--- a/docs/user/versioned_docs/version-stable/dsp-noise-mitigation.md
+++ b/docs/user/versioned_docs/version-stable/dsp-noise-mitigation.md
@@ -111,6 +111,8 @@ Narrow bandpass filter centered on the CW pitch frequency. Enhances CW signals b
### WNB — Wideband Noise Blanker
Wideband impulse noise blanker. Controlled via the ANT sub-menu on the left sidebar. Has an adjustable level (0-100) and appears as a "WNB" indicator on the FFT display when active. WNB belongs to the radio: AetherSDR uses whatever state the radio reports on connect and does not replay a saved state of its own.
+When you recall a band-stack bookmark, saved WNB values are applied only if the radio supports them. Unsupported WNB values are skipped without a dropped-command notice.
+
## Using the client-side methods
> **Important:** the seven client-side methods process audio **on your PC**, not on the radio. They only affect audio played through your computer's speakers or headphones. If you listen through the radio's physical outputs (line out, headphone jack or front speaker), you will **not** hear client-side processing — only the radio's built-in filters (NR, NRS, NRL, RNN and so on) apply there. To benefit from client-side processing, switch to PC audio.
diff --git a/docs/user/versioned_docs/version-stable/dvk-panel.md b/docs/user/versioned_docs/version-stable/dvk-panel.md
index b065ac1b53..20ddc5e781 100644
--- a/docs/user/versioned_docs/version-stable/dvk-panel.md
+++ b/docs/user/versioned_docs/version-stable/dvk-panel.md
@@ -37,6 +37,8 @@ Click the **DVK** indicator in the status bar at the bottom of the screen. The p
The DVK panel and the [CWX Panel](./cwx-panel.md) share the same space — opening one closes the other.
+When the window is short, scroll the list of recording slots; the panel title, status and transport buttons stay visible.
+
*The DVK panel, opened from DVK in the status bar.*
diff --git a/docs/user/versioned_docs/version-stable/firmware-update.md b/docs/user/versioned_docs/version-stable/firmware-update.md
index c48ad2e56e..b46c07fe66 100644
--- a/docs/user/versioned_docs/version-stable/firmware-update.md
+++ b/docs/user/versioned_docs/version-stable/firmware-update.md
@@ -1,7 +1,7 @@
---
title: "Firmware Update"
slug: "/firmware-update"
-description: "AetherSDR can upload new firmware to a FlexRadio on Linux, macOS and Windows, using the SmartSDR installer you download from FlexRadio."
+description: "AetherSDR can update a FlexRadio's firmware on Linux, macOS and Windows from the Updates window, downloading the SmartSDR installer from FlexRadio or using one you downloaded."
status: "Experimental"
applies_to: ["FlexRadio"]
---
@@ -12,41 +12,41 @@ applies_to: ["FlexRadio"]
:::
-AetherSDR can upload new firmware to a FlexRadio on Linux, macOS and Windows, using the SmartSDR installer you download from FlexRadio.
+AetherSDR can update a FlexRadio's firmware on Linux, macOS and Windows from the Updates window (**File → Update...**), downloading the SmartSDR installer from FlexRadio or using one you downloaded.
> **Caution:** firmware update from AetherSDR is a highly experimental feature. Use it at your own risk. Updating with the SmartSDR for Windows application is still the recommended route.
## Requirements
-- A connected FlexRadio. Firmware update is a FlexRadio feature: the group is hidden while you are connected to any other radio family (see [Supported Radios](./supported-radios.md)).
-- The SmartSDR installer from [flexradio.com](https://www.flexradio.com), or an extracted `.ssdr` firmware file.
+- A connected FlexRadio. Firmware update is a FlexRadio feature: on any other radio family the Updates window's radio section says **Not updatable here** and its buttons are dimmed with the reason (see [Supported Radios](./supported-radios.md)).
+- An internet connection to FlexRadio's website, or a SmartSDR installer or `.ssdr` firmware file you downloaded yourself.
## Setup
-Open **Settings → Radio Setup...** (on macOS: **AetherSDR → Preferences...**), choose the **Radio** page, and find the **Firmware Update** group. It shows the radio's current **FW Version** and three buttons: **Check for Update**, **Select Installer...** and **Upload Firmware**.
+Open **File → Update...**. Below the AetherSDR section, the **YOUR RADIO** section names the connected radio and its firmware version, and a status badge says whether the radio is **Current** or **Behind** the newest release in its own line. When the status bar shows an out-of-date firmware version, clicking it opens the window at this section.
-
-
-*The Firmware Update group on the Radio page.*
+The radio's firmware version is also shown, read-only, as **FW Version** in **Settings → Radio Setup...** → **Radio** → **Radio Information**.
## Updating the Firmware
-### Check for updates
+### Choose a release
+
+The section lists every SmartSDR release FlexRadio publishes (AetherSDR fetches the list at most once a day), one row per major line (v4, v3, v2), oldest to newest. The release installed on the radio has a thicker outline; the newest release in the radio's own line is highlighted. When the radio is behind, that newest release is already selected. Click another release to choose it, and **Release notes** opens its notes.
-1. Click **Check for Update**.
-2. AetherSDR asks the FlexRadio website for the latest version and compares it with the radio's firmware.
-3. The status line reads either "Firmware is up to date (vX.Y.Z)" or "Update available: vX.Y.Z", with a reminder to download the SmartSDR installer from flexradio.com.
+### Install
-AetherSDR does not download the installer for you.
+1. Click **Install** *version*.
+2. A confirmation names the release and the radio, and warns that the radio reboots after the update. Do not disconnect during the update.
+3. AetherSDR downloads the SmartSDR installer from FlexRadio, checks it against FlexRadio's MD5, extracts the firmware for your radio's model family, and uploads it. If FlexRadio's MD5 can't be downloaded, AetherSDR stops before the upload and asks again, saying that the firmware's integrity was not checked. The steps **Prepare firmware**, **Upload to radio** and **Radio confirms** light in turn, the progress bar fills, and the status line says what is happening.
-### Stage the firmware
+### Install from a file
-1. Download the SmartSDR installer from [flexradio.com](https://www.flexradio.com).
-2. Click **Select Installer...** and choose one of:
+1. Download the SmartSDR installer from [flexradio.com](https://www.flexradio.com), or have an extracted `.ssdr` file.
+2. Click **Open Installer...** and choose one of:
- the **`.msi`** installer (SmartSDR v4.2 and later);
- the **`.exe`** installer (v4.1.x and earlier);
- an already extracted **`.ssdr`** firmware file.
-3. AetherSDR extracts the firmware for your radio's model family and shows its progress. When staging finishes, **Upload Firmware** becomes available.
+3. AetherSDR extracts the firmware for your radio's model family, then asks before uploading it.
For an **`.msi`** installer, AetherSDR identifies the firmware by the installer's
recorded filename and cabinet metadata. It checks that the extracted file's size
@@ -54,8 +54,6 @@ matches that record. A missing or ambiguous firmware entry stops staging.
The staged file keeps the installer's firmware filename, including its build
number when present; the upload confirmation and log use that same name.
The firmware log records the staged filename, byte count, and MD5 for diagnostics.
-For FLEX-8000 and Aurora radios, a note below the staged filename explains:
-"FLEX-8000 and Aurora radios use FLEX-9600 firmware."
An already extracted **`.ssdr`** file whose name identifies the other firmware
family is rejected instead of being renamed for your radio.
Manually selected **`.ssdr`** files keep their original filename. If the name
@@ -65,27 +63,24 @@ Delete firmware files staged by earlier AetherSDR versions and select the
original installer again. Those cached **`.ssdr`** files can contain firmware
for a different family despite their filename; renaming them cannot fix it.
-### Upload
+### The outcome
-1. Click **Upload Firmware**.
-2. A confirmation names the file and the radio, and warns that the radio reboots after the update. Do not disconnect during the upload.
-3. The progress bar and status line follow the transfer.
-4. The upload ends in one of three outcomes:
+The upload ends in one of three outcomes:
| Outcome | What it means | What to do |
|---------|---------------|------------|
-| **Succeeded** (green) | The radio confirmed the update. | Wait for the radio to reboot, then reconnect. |
-| **Unconfirmed** (amber) | The bytes were sent, but the radio did not confirm the installation. It is probably rebooting to apply the image. | Reconnect and check the firmware version. A retry is blocked until you reconnect. |
-| **Failed** (red) | The upload did not complete, or the radio rejected it. | Read the status line, then try again. |
+| **Succeeded** | The radio confirmed the update. | Wait for the radio to reboot, then reconnect. |
+| **Unconfirmed** | The bytes were sent, but the radio did not confirm the installation. It is probably rebooting to apply the image. | Reconnect and check the firmware version. A retry is blocked until you reconnect. |
+| **Failed** | The upload did not complete, or the radio rejected it. | Read the status line, then try again. |
-Closing Radio Setup during an upload asks for confirmation first. Closing it stops the transfer; once the bytes have been sent, it does not undo the update.
+While firmware is being prepared or written, the rest of the Updates window waits, and closing the window asks first. Closing it while preparing sends nothing to the radio; closing it during the upload stops the transfer; once the bytes have been sent, it does not undo the update. **Cancel** asks the same question.
## Reference
### Where to find `.ssdr` files
- Windows, after installing SmartSDR: `C:\ProgramData\FlexRadio Systems\SmartSDR\Updates\`
-- Or let **Select Installer...** extract the file from the installer for you.
+- Or let **Open Installer...** extract the file from the installer for you.
### Firmware files
@@ -120,25 +115,25 @@ The installer may be incomplete, use unsupported metadata, or lack an unambiguou
firmware entry for your radio.
1. Download the original SmartSDR installer from FlexRadio again.
-2. Select the installer with **Select Installer...**.
+2. Select the installer with **Open Installer...**.
3. If staging still fails, use SmartSDR for Windows to extract the appropriate
**`.ssdr`** file and select that file instead. In SmartSDR 4.2/4.3 MSI
installers, FLEX-6000 radios use **`FLEX-6x00`**, while FLEX-8000 and Aurora
radios use **`FLEX-9600`**. Renaming a file does not change its compatibility.
-### The Firmware Update group is missing
+### The radio section says Not updatable here
-You are connected to a radio that is not a FlexRadio, so the group is hidden.
+You are connected to a radio that is not a FlexRadio.
1. Connect to a FlexRadio.
-2. Open **Settings → Radio Setup...** → **Radio** again.
+2. Open **File → Update...** again.
-### Upload Firmware stays unavailable after an Unconfirmed upload
+### Install stays unavailable after an Unconfirmed upload
A retry is blocked until you reconnect, because the radio is probably rebooting to apply the image.
1. Wait for the radio to come back, then reconnect.
-2. Check **FW Version** in the **Firmware Update** group.
+2. Check the firmware version in the **YOUR RADIO** section, or **FW Version** in Radio Setup.
### The upload Failed
@@ -151,5 +146,6 @@ The upload did not complete, or the radio rejected it.
- [FlexRadio](./flexradio.md)
- [Supported Radios](./supported-radios.md)
+- [Updates](./updates.md)
- [Radio Setup](./radio-setup.md)
- [FlexRadio downloads](https://www.flexradio.com)
diff --git a/docs/user/versioned_docs/version-stable/flexradio.md b/docs/user/versioned_docs/version-stable/flexradio.md
index d07725fd01..d7d5a8a44e 100644
--- a/docs/user/versioned_docs/version-stable/flexradio.md
+++ b/docs/user/versioned_docs/version-stable/flexradio.md
@@ -97,7 +97,7 @@ Follow these pages in order the first time:
- [TGXL Tuner Control](./tgxl-tuner-control.md) — 4O3A Tuner Genius XL, direct or relayed through the radio
- [Peripherals](./peripherals.md) — PGXL amplifier, Antenna Genius and other accessories, with 4O3A access codes
-- [Amplifiers](./amplifiers.md) — ACOM, SPE Expert, VK3AMP and KPA1500 amplifiers
+- [Amplifiers](./amplifiers.md) — ACOM, SPE Expert, VK3AMP, KPA1500 and RF-KIT amplifiers
- [ShackSwitch](./shackswitch.md) and [Green Heron Everyware](./green-heron-everyware.md) — antenna switches and rotators
### Controllers
diff --git a/docs/user/versioned_docs/version-stable/generated/default-shortcuts.md b/docs/user/versioned_docs/version-stable/generated/default-shortcuts.md
index db7391e1cb..a7187138d7 100644
--- a/docs/user/versioned_docs/version-stable/generated/default-shortcuts.md
+++ b/docs/user/versioned_docs/version-stable/generated/default-shortcuts.md
@@ -77,7 +77,7 @@ These are the actions you can bind in **Settings → Configure Shortcuts...**, w
| ATU Start | `atu_start` | | Keys the transmitter |
| TUNE Toggle | `tune_toggle` | | Keys the transmitter |
| Two-Tone Tune | `two_tone_tune` | | Keys the transmitter |
-| VOX Toggle | `vox_toggle` | | |
+| VOX Toggle | `vox_toggle` | | Keys the transmitter |
| Speech Processor Toggle | `speech_proc_toggle` | | |
| DAX TX Toggle | `dax_toggle` | | |
| TX Monitor Toggle | `tx_monitor_toggle` | | |
diff --git a/docs/user/versioned_docs/version-stable/generated/log-categories.md b/docs/user/versioned_docs/version-stable/generated/log-categories.md
index 8aabd525f8..5a6ed39b48 100644
--- a/docs/user/versioned_docs/version-stable/generated/log-categories.md
+++ b/docs/user/versioned_docs/version-stable/generated/log-categories.md
@@ -31,6 +31,7 @@ These are the logging categories listed in **Help → Support & Diagnostics...**
| Meters | `aether.meters` | Meter definitions and value conversion |
| Transmit | `aether.transmit` | TX state, ATU, profiles, power control |
| Firmware | `aether.firmware` | Firmware download, staging, upload |
+| App Updates | `aether.updater` | AetherSDR update checks: trigger, result, skipped and store-managed installs |
| Tuner/AGM | `aether.tuner` | TGXL tuner, Antenna Genius state |
| KAT500 Tuner | `aether.kat500` | Independent tuner connection, confirmed readbacks, configuration and maintenance diagnostics |
| Peripheral Authorization | `aether.peripheral.auth` | Credential store availability and save failures; code values are never logged |
diff --git a/docs/user/versioned_docs/version-stable/green-heron-everyware.md b/docs/user/versioned_docs/version-stable/green-heron-everyware.md
index 08dedee9d9..bfd04c5855 100644
--- a/docs/user/versioned_docs/version-stable/green-heron-everyware.md
+++ b/docs/user/versioned_docs/version-stable/green-heron-everyware.md
@@ -34,6 +34,11 @@ in the applet itself, not in [Peripherals](./peripherals.md).
| **Port** | Its TCP port; **10000** unless the installation moved it |
| **Switch** | Which switch feeds this radio. Filled from the server's roster once connected, and remembered |
+Enter the server address in **IP** and its TCP port in **Port**. To replace
+the port, select the existing number and type a value from **1** to **65535**.
+If the applet is connecting, connected, or reconnecting, click **Disconnect**
+first to unlock the address and port fields.
+
Click **Connect**. The status line reads "Connected — waiting for roster",
then "Connected — waiting for switch state" until the server reports.
diff --git a/docs/user/versioned_docs/version-stable/index.md b/docs/user/versioned_docs/version-stable/index.md
index ae8c7458c9..79787dd4e1 100644
--- a/docs/user/versioned_docs/version-stable/index.md
+++ b/docs/user/versioned_docs/version-stable/index.md
@@ -99,7 +99,7 @@ Prefer paper? Download the [printable manual](pathname:///AetherSDR-Manual.pdf)
## Station Accessories
- [Peripherals](./peripherals.md) — Add, remove and auto-connect station accessories; 4O3A access codes; PGXL and Antenna Genius
-- [Amplifiers](./amplifiers.md) — ACOM, SPE Expert, VK3AMP and KPA1500 amplifiers; LP-100A wattmeter
+- [Amplifiers](./amplifiers.md) — ACOM, SPE Expert, VK3AMP, KPA1500 and RF-KIT amplifiers; LP-100A wattmeter
- [TGXL Tuner Control](./tgxl-tuner-control.md) — 4O3A Tuner Genius XL: direct or relayed, autotune, antenna switch
- [ShackSwitch](./shackswitch.md) — Network antenna switch with dummy-load protection
- [Green Heron Everyware](./green-heron-everyware.md) — Green Heron Everyware antenna switch and rotator control
diff --git a/docs/user/versioned_docs/version-stable/macos.md b/docs/user/versioned_docs/version-stable/macos.md
index 8d68080f39..51d146f055 100644
--- a/docs/user/versioned_docs/version-stable/macos.md
+++ b/docs/user/versioned_docs/version-stable/macos.md
@@ -24,6 +24,10 @@ AetherSDR runs natively on macOS, with separate signed and notarized DMGs for Ap
3. Start AetherSDR from Applications. Both DMGs are signed and notarized by Apple, so Gatekeeper verifies them with no extra steps.
4. The **Connect to Radio** window opens. Continue with [First Connection](./first-connection.md), or try [Your First Session](./your-first-session.md) with no radio.
+### Allowing Local Network access
+
+Radio discovery needs **Local Network** permission on macOS 15 and later. Allow AetherSDR when macOS asks, or enable it in **System Settings → Privacy & Security → Local Network**. This permission is separate from the firewall.
+
### Installing the DAX audio driver
[DAX Virtual Audio](./dax-virtual-audio.md) on macOS uses the **DAX Virtual Audio Driver** that ships in the AetherSDR DMG. Install it from the DMG before you enable DAX. Without it, enabling DAX shows **DAX Audio Driver Missing**.
@@ -75,6 +79,15 @@ To use the settings command line, run the program inside the app bundle, for exa
## Troubleshooting
+### The radio is reachable by IP but missing from the list
+
+Automatic discovery needs incoming network broadcasts and Local Network permission.
+
+1. Open **System Settings → Privacy & Security → Local Network** and allow AetherSDR.
+2. In **Connect to Radio**, click **Retry Discovery**.
+3. For a local source build, configure with `-DAETHER_MACOS_ADHOC_SIGN=ON`, then rebuild the complete **AetherSDR** target before launching its `.app`. This development-only option signs the finished bundle so macOS recognizes its permission identity; production signing and release CI leave it disabled. See [macOS development identity](./building-from-source.md#macos-development-identity).
+4. If broadcasts are blocked by a router or VPN, use **Connect by IP**. See [Manual Connection](./manual-connection.md).
+
### Enabling DAX shows "DAX Audio Driver Missing"
The DAX Virtual Audio Driver is not installed on this Mac.
diff --git a/docs/user/versioned_docs/version-stable/manual-connection.md b/docs/user/versioned_docs/version-stable/manual-connection.md
index d4397c72e7..7b3473f909 100644
--- a/docs/user/versioned_docs/version-stable/manual-connection.md
+++ b/docs/user/versioned_docs/version-stable/manual-connection.md
@@ -40,7 +40,7 @@ The **Radio IP address** group starts with two rows:
3. Click **Connect by IP**. AetherSDR probes the radio on TCP 4992.
4. If the probe fails, the panel shows the reason. **Network Diagnostics**, beside the button, helps you check the path.
-If your VPN creates more than one active network adapter, open **Advanced: choose the VPN source path** and pick the **Source path:**. Most users can leave this on Auto.
+If your VPN creates more than one active network adapter, open **Advanced: choose the VPN source path** and pick the **Source path:**. Most users can leave this on Auto. The list matches the address you entered: an IPv6 radio address lists this PC's IPv6 addresses, and an IPv4 address or a host name lists its IPv4 addresses. If a host name turns out to have only IPv6 addresses, Connect uses the IPv6 address of the adapter you picked.
### Port forwarding (FlexRadio remote access)
diff --git a/docs/user/versioned_docs/version-stable/menu-reference.md b/docs/user/versioned_docs/version-stable/menu-reference.md
index 1af6d543b5..1de404662b 100644
--- a/docs/user/versioned_docs/version-stable/menu-reference.md
+++ b/docs/user/versioned_docs/version-stable/menu-reference.md
@@ -21,6 +21,7 @@ The top-level menus are **File · Settings · Profiles · Tools · View · Windo
|------|-------------|
| **Connect to Radio...** | Opens the connection panel (LAN radios, SmartLink, manual IP). See [First Connection](./first-connection.md) and [Manual Connection](./manual-connection.md). |
| **Disconnect** | Ends the radio session without closing AetherSDR. |
+| **Update...** | The Updates window: the newest AetherSDR release, what is in it, and the download for this computer. See [Updates](./updates.md). |
| **Quit** | Closes the application. |
## Settings
@@ -131,7 +132,7 @@ The Minimize and Full Screen keys can be rebound in **Settings → Configure Sho
| Item | What it does |
|------|-------------|
| **AetherSDR Documentation** | Opens this documentation site in your browser. |
-| **Printable Manual (PDF)** | Opens the [printable manual](pathname:///AetherSDR-Manual.pdf), all of these pages in one PDF. |
+| **Printable Manual (PDF)** | Downloads the [printable manual](pathname:///AetherSDR-Manual.pdf), all of these pages in one PDF. |
| **Log Analyzer** | Opens the [Log Analyzer](/log-analyzer), which checks a log or support bundle for known problems in your browser. |
| **Getting Started...**, **AetherSDR Help...**, **What's New...** | Built-in guides, each in its own window. They work offline, and each guide links its page on this site. In **What's New...**, only web links (http and https) open; any other kind of link in the release notes is ignored. |
| **Understanding Noise Cancellation...**, **Configuring AetherSDR Controls...**, **Configuring Data Modes...** | Topic guides, also offline. |
@@ -141,7 +142,8 @@ The Minimize and Full Screen keys can be rebound in **Settings → Configure Sho
| **Contributing to AetherSDR...** | See [Contributing Guide](./contributing-guide.md). |
| **Support & Diagnostics...** | Logging categories and support bundles. See [Support and Logging](./support-and-logging.md). |
| **Slice Troubleshooting...** | A diagnostics window for slice, audio and display state. |
-| **Check for Updates...** | Checks for a newer release now. |
+| **Check for Updates...** | Opens the Updates window and checks again now. See [Updates](./updates.md). |
+| **Check for Updates Automatically** | On by default. Checks for a newer release at startup, at most once a day, and shows **UPDATE** in the title bar when there is one. The same setting as **Check daily** in the Updates window; turning it off also removes the badge. Dimmed on store-managed installs (the Microsoft Store, or a Flatpak build), which update themselves. |
| **About AetherSDR** | The About window (below). |
## The Title Bar
@@ -152,6 +154,7 @@ The main window has one 52 px title bar. From left to right:
|------|-----------|
| **☰** | The application menu (Windows and Linux only). |
| **AetherSDR** brand mark | Drag the bar here to move the window. |
+| **UPDATE** badge | Shown when a newer AetherSDR release is available; hover names it, click opens the Updates window. See [Updates](./updates.md). |
| **Radio tabs** | One tab per known radio (LAN, SmartLink or routed). See below. |
| **EXPERIMENTAL** badge | Shown when the connected radio family's support is experimental. |
| **multiFLEX** | Appears when other clients share the radio; hover lists them, click opens the dashboard. |
@@ -163,6 +166,10 @@ The main window has one 52 px title bar. From left to right:
| **Dock left / Dock right / Pop out** | Move the applet panel to the left or right of the panadapters (click the active side again to hide it), or float it in its own window. **Ctrl+Shift+S** also pops it out. |
| **Window controls** | Minimize, maximize and close (see "Per platform"). |
+### Updates
+
+The **UPDATE** badge appears when a newer AetherSDR release is available; click it for the Updates window. See [Updates](./updates.md).
+
### Radio tabs
diff --git a/docs/user/versioned_docs/version-stable/midi-controller-mapping.md b/docs/user/versioned_docs/version-stable/midi-controller-mapping.md
index dc2a6ba8e3..e4b6604155 100644
--- a/docs/user/versioned_docs/version-stable/midi-controller-mapping.md
+++ b/docs/user/versioned_docs/version-stable/midi-controller-mapping.md
@@ -179,9 +179,9 @@ midi.settings — device preferences and active bindings
midi/
+
*The multiFLEX Dashboard: every station sharing the radio.*
@@ -54,9 +54,7 @@ AetherSDR handles this automatically:
| **TX FREQ (MHz)** | Transmit frequency |
| *(button)* | **Disconnect** removes that client from the radio |
-Below the table:
-- **Enabled / Disabled** turns multiFLEX on or off on the radio.
-- **Enable** (Local PTT) requests PTT for your station when another client holds it.
+The **Enabled / Disabled** button above the table turns multiFLEX on or off on the radio. Below the table, **Enable** (Local PTT) requests PTT for your station when another client holds it.
A green **multiFLEX** button appears in the title bar while other clients are connected. Hover it for the list of stations; click it to open the dashboard.
diff --git a/docs/user/versioned_docs/version-stable/net-scheduler.md b/docs/user/versioned_docs/version-stable/net-scheduler.md
index 76abcfc33d..f807952a50 100644
--- a/docs/user/versioned_docs/version-stable/net-scheduler.md
+++ b/docs/user/versioned_docs/version-stable/net-scheduler.md
@@ -55,6 +55,10 @@ At reminder time a banner appears in the main window with:
AetherSDR also tries to show a desktop notification.
+On a supported radio, a captured preset also reapplies its tuning step and any
+saved repeater offset or tone fields. Fields absent from the preset are left
+unchanged. The net is not a radio memory slot, and applying it does not key TX.
+
### Import and export
**Export…** saves the schedule as a JSON file; **Import…** reads one back,
diff --git a/docs/user/versioned_docs/version-stable/networked-icom.md b/docs/user/versioned_docs/version-stable/networked-icom.md
index 144119d2f4..9d2a6c8860 100644
--- a/docs/user/versioned_docs/version-stable/networked-icom.md
+++ b/docs/user/versioned_docs/version-stable/networked-icom.md
@@ -69,7 +69,7 @@ Click **Connect by IP**. The model is identified over the wire, not from the rad
AetherSDR treats an Icom differently from a FlexRadio:
-- **The radio is authoritative.** It remembers its own frequency, mode and filter. AetherSDR reads the radio's state and levels when it connects and never pushes saved state onto it.
+- **The radio is authoritative.** It remembers its own frequency, mode and filter. AetherSDR reads the radio's state and levels when it connects and never pushes saved state onto it. The one thing it initializes is the scope mode, described under [Panadapter scope modes](#panadapter-scope-modes).
- **Unknown models fail closed.** Each verified model has its own command profile. A control that has not been proven on a model is hidden, and a radio AetherSDR does not recognize gets no panadapter and no transmit, rather than guessed defaults.
What you can do:
@@ -82,6 +82,22 @@ What you can do:
- **Decoders:** the CW, RTTY and AetherClock decoders work. The CW decoder opens in CW.
- **Memory channels** use AetherSDR's shared bank on this computer, and the radio's own memories can be read in on models that support it. The IC-9700's radio memories are read-only.
+### Panadapter scope modes
+
+The panadapter is the radio's own scope, and the radio owns the scope mode. On the IC-7300MK2, the IC-705 (firmware 1.20 or later) and the IC-9700 (firmware 1.30 or later) the **Scope** row in the Display panel offers the radio's three modes:
+
+| Mode | What the window does |
+|---|---|
+| **Scroll-F** | The window stays put while you tune inside it, like a FlexRadio panadapter. Click to tune in place, drag the panadapter to pan the window, and the window follows the tuned frequency when it reaches an edge. This is the mode AetherSDR starts in. |
+| **Fixed** | The window is one of the radio's stored Fixed Edges presets and does not move on its own. |
+| **Center** | The window is centered on the tuned frequency and moves with every tune. Dragging the panadapter retunes the radio. |
+
+**At connect, AetherSDR reads the radio's scope mode and edge preset.** A radio found in Scroll-F or Fixed is left exactly as it was: nothing is written. A radio found in Center is switched to Scroll-F once per session, so the panadapter never starts slaved to the VFO. Picking Center in the Display panel is honored for that session, and the next connect initializes Scroll-F again. Picking Scroll-F or Fixed is written to the radio and stays across reconnects.
+
+**AetherSDR's window is the radio's Fixed Edges preset 4.** In Scroll-F and in Fixed chosen from the Display panel, every pan and zoom rewrites preset 4 for the band segment you are on; presets 1–3 are never written. If the radio is in Fixed on one of presets 1–3 (chosen on its front panel), the panadapter shows that preset as it is, no Scope button is lit, and a drag or zoom is refused with the view put back; click **Fixed** to switch the radio to preset 4 with the same window, after which the window is yours to pan and zoom. In Scroll-F on one of presets 1–3, the radio stays on that preset until the window first has to move: a drag or zoom in AetherSDR, or a dial move that reaches the edge of the window, switches the radio to preset 4 and writes there. The window cannot cross one of the radio's band-segment boundaries (for example 8.000 MHz on HF), so near a boundary it shifts rather than centers.
+
+Tuning works the same way as on other radios: click, drag the tuned-frequency marker, scroll the wheel, type a frequency, or recall a memory. A tune that leaves the window brings the window with it. The original IC-7300 has Center only, and the Scope row is dimmed with that reason. On the IC-9700 the panadapter follows one scope, MAIN or SUB, and that is the one read and initialized; in Dual scope the other scope is not drawn.
+
### PC Audio and data modes
The **PC Audio** toggle chooses the radio's DATA OFF modulation input: **WLAN** on the IC-705, **LAN** on the IC-7300MK2, and **MIC** when PC Audio is off. The radio's DATA MOD setting is left alone. On a model AetherSDR cannot verify, the toggle refuses.
@@ -118,6 +134,7 @@ The Icom RC-28 remote encoder is supported (**Settings → Controllers → Icom
### IC-705
+- On the IC-705, the preamp cycles through **OFF**, **P.AMP1** and **P.AMP2** below 74.800 MHz. At 74.800 MHz and above it toggles **OFF** / **P.AMP1**. The choices follow the radio's reported frequency; until that frequency is known, only OFF and P.AMP1 are offered. Changing ranges does not change the radio's preamp setting; its readback takes priority over routine meter polling. After reconnecting, S-meter readings wait for the radio's frequency so they use the correct HF or VHF reference.
- 2 m and 70 cm are available alongside HF.
- The speech processor button reads **COMP**, with a 0–10 slider and a numeric readout, as on the MK2.
- **WFM** (broadcast FM) is receive-only.
@@ -142,6 +159,7 @@ The Icom RC-28 remote encoder is supported (**Settings → Controllers → Icom
- On the IC-7300MK2, transmit audio drops out for about a third of a second roughly every 1.2 seconds while the radio stays keyed ([#6169](https://github.com/aethersdr/AetherSDR/issues/6169)).
- CW speed, break-in and pitch do nothing on models without a CW text keyer, such as the IC-9700 ([#6110](https://github.com/aethersdr/AetherSDR/issues/6110)).
- On the IC-9700, the panadapter trace can sit on the bottom line and look blank on a quiet band with the preamp off ([#4814](https://github.com/aethersdr/AetherSDR/issues/4814)).
+- In Scroll-F, the IC-7300MK2 sends no scope data while it is transmitting, so the panadapter freezes for the length of a transmission; in Center it keeps sweeping ([#6168](https://github.com/aethersdr/AetherSDR/issues/6168)).
## Troubleshooting
@@ -153,6 +171,14 @@ The **Icom CI-V:** address is wrong. AetherSDR does not correct a wrong address
2. Set **Icom CI-V:** to **Auto-detect (recommended)**.
3. If you use **Custom...**, check the address on the radio under MENU > SET > Connectors > CI-V and type it as hex (for example `A2`).
+### Audio and radio updates stop after switching applications
+
+An interrupted application shutdown can leave an old network session on the radio. If the radio releases the current audio and CI-V streams while cleaning it up, AetherSDR disconnects and retries the connection automatically.
+
+1. Allow the automatic reconnect to finish. Frequency and other radio state are read again from the radio.
+2. When switching applications, disconnect the first application and let it finish before opening the next connection.
+3. If the radio continues refusing connections, check that another network client is not still using it.
+
### Connect by IP fails with a handshake error
The radio is not accepting network control from AetherSDR. The message names the target and the likely cause.
diff --git a/docs/user/versioned_docs/version-stable/nr2-noise-reduction.md b/docs/user/versioned_docs/version-stable/nr2-noise-reduction.md
index 68770157b7..aec25b33e4 100644
--- a/docs/user/versioned_docs/version-stable/nr2-noise-reduction.md
+++ b/docs/user/versioned_docs/version-stable/nr2-noise-reduction.md
@@ -44,16 +44,16 @@ NR2 is less effective against impulse noise (clicks, pops, lightning crashes); u
### FFTW wisdom (first use)
-The first time you enable NR2, AetherSDR optimizes the FFT plans it uses (FFTW "wisdom"). An **AetherSDR — FFTW Wisdom** window appears while this runs:
+The first time you enable NR2, AetherSDR optimizes the FFT plans it uses (FFTW "wisdom"). An **FFTW Wisdom** window appears while this runs:
-
+
*The FFTW Wisdom window, shown the first time NR2 starts on a computer.*
- It shows progress, a **Working** activity indicator and an **Elapsed** time counter. Planning can take several minutes on some systems; if the progress pauses, the window says it is still working.
- The window is modeless — keep operating while it runs. On macOS it stays visible when AetherSDR is not the frontmost app.
- Clicking NR2 again while it runs brings the same window forward instead of starting a second run.
-- **Cancel** stops after the FFT plan currently being computed. NR2 is then not enabled, and your audio is left unchanged.
+- **Cancel** (or the ✕ in the corner, **Esc** or **Ctrl+W**, **⌘W** on macOS) stops after the FFT plan currently being computed. NR2 is then not enabled, and your audio is left unchanged.
- NR2 switches on when planning finishes, and the window closes itself.
The result is saved **as soon as planning finishes**, so a crash or force-quit afterwards does not lose it, and later launches skip the wait. The same cache also speeds up the WDSP receive setup on the [Hermes-Lite 2](./hermes-lite-2.md).
diff --git a/docs/user/versioned_docs/version-stable/panadapter-controls.md b/docs/user/versioned_docs/version-stable/panadapter-controls.md
index fac68dffec..0544176200 100644
--- a/docs/user/versioned_docs/version-stable/panadapter-controls.md
+++ b/docs/user/versioned_docs/version-stable/panadapter-controls.md
@@ -30,6 +30,20 @@ The panadapter is the main display: the FFT spectrum on top and the scrolling wa
- If the wheel tunes the wrong way for your mouse or trackball, turn on **Radio Setup → Appearance & Behavior → Reverse mouse-wheel tuning direction**.
- Dragging any slider shows its value in a small popup.
+### Touch controls
+
+On a touchscreen the panadapter and the rest of the app are fully operable by touch:
+
+| Gesture | Does |
+|--------|------|
+| **Tap** | Same as a click — double-tap to tune (or single-tap with **Single-Click to Tune** on) |
+| **Drag** on the spectrum / waterfall | Pan the display |
+| **Two-finger pinch** | Zoom the span, anchored under your fingers |
+| **Press and hold** (about ⅔ of a second) | Acts as a right-click — opens the context menu |
+| **Drag** in a list or menu | Flick-scroll it, with momentum; a tap still selects the item |
+
+Touch-scroll works in every scrollable list and menu. The exception is the drag-to-rearrange lists — the applet panel down the left edge and the favorites picker — where a drag moves items instead of scrolling.
+
### The header
A thin header runs across the top of each panadapter, drawn over the spectrum so the trace and grid show through it.
@@ -101,7 +115,7 @@ Drag the divider between the spectrum and the waterfall to resize them. The spli
### Band plan overlay
-The strip along the bottom of the spectrum shows band segments, colored by use. In the ARRL (US) plan, for example: blue for CW, red for data, orange for phone/SSB, cyan for beacons, purple for satellite, green for weak-signal SSB, and yellow for mixed or experimental segments. Dots mark spot frequencies (FT8, WSPR, QRP calling and so on); hover for a tooltip.
+The strip along the bottom of the spectrum shows band segments, colored by use. In the ARRL (US) plan, for example: blue for CW, red for data, orange for phone/SSB, cyan for beacons, purple for satellite, green for weak-signal SSB, and yellow for mixed or experimental segments. Dots mark spot frequencies (FT8, WSPR, QRP calling and so on); hover for a tooltip. Some segments also carry a usage note from the published band plan, such as "Digimodes, automatically controlled data stations (unattended)" or "All modes except SSB". Hover over the segment to read it. The IARU Region 1 and SSA (Sweden) plans have these notes.
**View → Band Plan** sets:
@@ -136,6 +150,13 @@ It re-uses the main panadapter's data, so it uses no extra radio panadapter or s
- Pan layouts, including floating pans, are restored when you reconnect.
- With the [Workspace Canvas](./workspace-canvas.md) on, **Import pop-outs onto canvas** places floating pans on the canvas.
+Opening a pan waits for the connected backend to publish its actual display.
+The waterfall may arrive afterward. If creation remains unconfirmed, AetherSDR
+does not automatically retry: another request could allocate a second display.
+Closing a pan requests cleanup; the pan disappears when the backend reports its
+removal. The normal close action preserves the last pan, and a backend may
+refuse a close because it still needs that receiver.
+
### Panadapter messages
Status cards appear over the spectrum for things like "Center Lock released", a renderer problem, or KiwiSDR connection state. KiwiSDR status cards can be collapsed to a small pill but not closed.
@@ -144,6 +165,10 @@ Status cards appear over the spectrum for things like "Center Lock released", a
The status bar at the bottom of the window starts with the band-stack indicator and **+PAN** (add a panadapter), followed by indicators such as **TNF**, **CWX**, **ASR**, **DVK** and **FDX** (each only on radios and builds that support it). Click an indicator to toggle it, or press **Tab** to reach it and **Return** or **Enter** to activate it.
+**FDX** requests full duplex through the connected radio. A refusal leaves its
+state unchanged; a delayed reply cannot overwrite a newer request or a newer
+radio status. Enabling full duplex does not start a transmission.
+
**View → FPS Meters** (Ctrl+F) adds spectrum and waterfall frame-rate readouts to each pan.
@@ -216,6 +241,7 @@ Click **Display** in the overlay menu. The panel is divided into sections and sc
| **FFT Line** | Off–5.0 px, default 1.0 px | Trace thickness, with its own color button. |
| **FFT Fill** | 0–100, default 70 | Fill opacity under the trace, with its own color button. |
| **FFT Floor** + **Auto** | 1–99, default 75 | With **Auto** on, the dBm scale follows the noise floor and keeps it at this height (% from top). Off by default. |
+| **NF Range** | 0–10 dB in 0.5 dB steps; the radio's default is 1.5 | How far the measured noise floor may move before **Auto** repositions the scale. A larger range steadies the display at high zoom. The radio stores it. Needs SmartSDR+ on a FLEX-8000 series or Aurora radio with firmware 4.3.16 or later; otherwise it is dimmed and its tooltip says why. |
#### WATERFALL
diff --git a/docs/user/versioned_docs/version-stable/peripherals.md b/docs/user/versioned_docs/version-stable/peripherals.md
index ff2b4d2d14..a3a6baeb26 100644
--- a/docs/user/versioned_docs/version-stable/peripherals.md
+++ b/docs/user/versioned_docs/version-stable/peripherals.md
@@ -10,7 +10,7 @@ description: "the station accessories it talks to directly, over the network or
the station accessories it talks to directly, over the network or a serial
port, rather than through the radio. It covers the 4O3A Tuner Genius XL
(TGXL), Power Genius XL (PGXL) and Antenna Genius (AG), the ShackSwitch, ACOM,
-SPE Expert, VK3AMP and Elecraft KPA1500 amplifiers, the Elecraft KAT500 tuner, and the TelePost LP-100A
+SPE Expert, VK3AMP, Elecraft KPA1500 and RF-KIT amplifiers, the Elecraft KAT500 tuner, and the TelePost LP-100A
wattmeter.
Each device has its own applet once it is connected. Those are described on
@@ -207,6 +207,7 @@ The **AG** applet (Antennas & Switching) controls a 4O3A Antenna Genius.
| SPE Expert Amplifier | Serial (115200 8N1) or a ser2net host | 7000 |
| VK3AMP Amplifier | TCP control, UDP telemetry | 5005 (UDP 5010) |
| Elecraft KPA1500 | TCP | 1500 |
+| RF-KIT Amplifier | HTTP (REST/JSON) | 8080 |
| LP-100A Meter | Serial (115200 8N1) or a ser2net host in raw mode | 2000 |
### Settings
@@ -215,7 +216,7 @@ The TGXL, PGXL, Antenna Genius and ShackSwitch addresses keep their own keys
(`TGXL_ManualIp`, `PGXL_ManualIp`, `AG_ManualIp`, `SS_ManualIp` and the
matching port keys). The device list, **Reconnect automatically**, the
per-device toggles (`Peripherals.