Skip to content

Radio DSP slice menu: parameter slider only shown for last-activated function; no per-function reset to defaults #2344

Description

@rnash2

What happened?
In the slice DSP controls (radio-side noise mitigation), the FLEX-6600 supports enabling NR, NB, and ANF concurrently. AetherSDR's slice menu correctly allows all three toggle buttons to be activated simultaneously. However, the parameter adjustment slider (controlling depth/level for the active DSP function) only renders for whichever toggle button was most recently pressed — it does not persist or co-display sliders for the other already-enabled functions.
This means that if a user enables NB, then NR, then ANF in sequence, only ANF's parameter slider is visible. To adjust NB's parameter, the user must click the NB button again, which may or may not be the intended interaction model but is not communicated to the user, and creates confusion about whether re-clicking NB is toggling it off and back on or simply "selecting" it for adjustment.
Additionally, there is no factory reset / default button for any individual DSP parameter slider. Once a parameter has been adjusted away from its default value, there is no in-UI way to return it to the radio's default value without manually hunting for the correct number or reconnecting.
This issue affects:

Confirmed: NR, NB, ANF (can be enabled concurrently on FLEX-6600 fw 4.2.18.41174)
Unconfirmed (license-gated): NRL, ANFL, ANFT — concurrent-use behavior and slider visibility behavior are unknown without a + license

What did you expect?
Option A (likely current design intent): Clicking a DSP toggle button both enables the function and selects it for parameter adjustment. In that case, the active "selected" button should have a visually distinct state (e.g. highlighted border or different background) so the user understands that clicking an already-enabled function switches the slider context without toggling the function off. This state distinction is currently absent.
Option B (preferred UX enhancement): When multiple DSP functions are enabled simultaneously, the parameter slider for each enabled function is displayed persistently and independently, allowing the user to fine-tune all active noise mitigation methods without switching context. This mirrors how SmartSDR handles concurrent DSP controls.
In either case, each DSP function's parameter slider should have a "Reset to default" button (a small factory-reset or ↺ icon button beside the slider) that sends the radio's known default value for that parameter, giving the user a reliable known-good baseline.
Steps to reproduce

Connect to a FLEX-6600 running firmware 4.2.18.41174.
Open the slice menu for Slice A.
Navigate to the radio-side DSP noise mitigation controls.
Enable NB — confirm its parameter slider appears.
Enable NR — observe that NB's slider disappears and only NR's slider is shown.
Enable ANF — observe that NR's slider disappears and only ANF's slider is shown.
Attempt to adjust NB's parameter — note there is no slider visible for it without re-clicking NB.
Note the absence of any "reset to default" / factory reset control for any slider.

Radio model & firmware

Radio: FLEX-6600
Firmware: 4.2.18.41174

OS & version

OS: Windows
AetherSDR version: 0.9.6
Qt version: 6.7.3

Developer Notes
Relevant source files:
Based on the CLAUDE.md architecture, the radio-side DSP toggle buttons and their associated parameter sliders for the slice menu are most likely implemented in:

src/gui/RxApplet.cpp / RxApplet.h — The CLAUDE.md architecture description lists "NB/NR/ANF DSP toggles" as part of RxApplet's control layout. The single-slider-context behavior is almost certainly implemented here: a QStackedWidget or a pattern where each toggle button calls a helper like showDspSlider(DspFunction) that hides all other sliders and shows only the one for the newly pressed button. Look for a m_activeDspFunction tracking variable or a QButtonGroup connected to a slot that swaps slider visibility.
src/gui/SpectrumOverlayMenu.cpp / SpectrumOverlayMenu.h — The right-click DSP overlay on the spectrum may have a parallel or shared DSP control section. If sliders are duplicated here, the same single-context bug may also be present.
src/models/SliceModel.cpp / SliceModel.h — Per-slice DSP state (NR enabled/level, NB enabled/level, ANF enabled/level) lives here. The applyStatus() method parses slice N status KV pairs from the radio. Relevant SmartSDR protocol keys are likely nr, nr_level, nb, nb_level, anf, anf_level (and nrl, anfl, anft for + license features). Verify the exact key names against the radio's status messages.

SmartSDR protocol commands to verify default values (for the reset button):
The radio's factory defaults for NR/NB/ANF levels can be determined by issuing a fresh slice get after a factory-reset slice, or by comparing SmartSDR's known defaults. The reset button should send, e.g.:
slice set 0 nr_level=50
slice set 0 nb_level=50
slice set 0 anf_level=50
(Actual default values should be verified against the radio's slice get response on a fresh session.)
Logging to enable:
In Help → Support, enable the following categories to capture diagnostic data:

Slice (or equivalent) — to log all slice set commands sent and S|slice N status messages received, confirming which parameter keys and values are being exchanged for NR/NB/ANF level changes.
Protocol / Command — to capture the raw TCP command/response stream and verify the exact key names the radio uses for DSP parameters.

Root cause hypothesis:
The most likely implementation is a single QSlider (or a QWidget container with a label + slider) that is reused across all DSP functions. When a toggle button is pressed, a slot fires that: (1) updates the slider's minimum/maximum/value for the new function, and (2) reconnects the slider's valueChanged signal to the appropriate SliceModel setter. The prior function's slider state is effectively hidden or orphaned. The fix for Option A is to add a visual "selected for adjustment" indicator to the active toggle button without altering the existing swap-on-click logic. The fix for Option B is to instantiate a separate QSlider + label + reset button per DSP function and show/hide each group based on its toggle's enabled state, rather than swapping a single shared slider.
Concurrency note for + license features (NRL, ANFL, ANFT):
These functions are gated behind the FlexRadio + license and are conditionally shown in the UI. If they share the same single-slider mechanism, the same bug would apply. The SliceModel should be checked to confirm whether NRL/ANFL/ANFT level parameters are modeled separately from NR/NB/ANF, or whether they reuse the same state fields.

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfaceenhancementImprovement to existing featuremaintainer-reviewRequires maintainer review before any action is takenpriority: lowLow priority

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions