Skip to content

APD control remains hidden when connecting to a capable radio (FLEX-8600) after first connecting to an incapable radio (FLEX-6600) #359

Description

@chibondking

Report preparation

  • I used the AI-assisted bug report tool (Help → Support → File an Issue)
  • I have attached a support bundle or log file

What happened?

Bug: APD control remains hidden when connecting to a capable radio (FLEX-8600) after first connecting to an incapable radio (FLEX-6600)

Labels: bug, GUI, transmit


What

When a user connects to a FLEX-6600 (which does not support SmartSignal / APD), the APD button in TxApplet is correctly hidden. However, if the user then disconnects and connects to a FLEX-8600 (which does support APD), the APD button remains hidden for the remainder of that session. The control does not re-evaluate capability on the new connection.

Reproduced steps:

  1. Launch AetherSDR.
  2. Connect to a FLEX-6600 (no APD support). Observe: APD button is hidden. ✅ Correct.
  3. Disconnect.
  4. Connect to a FLEX-8600 (APD supported). Observe: APD button is still hidden. ❌ Bug.

Why

APD (Automatic Pre-Distortion / SmartSignal™) is a hardware-dependent feature supported only on the FLEX-8400, FLEX-8400M, FLEX-8600, and FLEX-8600M. AetherSDR correctly hides the APD control when it is not applicable. However, the visibility state appears to be set once on first connect and not re-evaluated on subsequent connections within the same session.

This means any user who switches between radios — or simply connects to their capable radio after briefly touching a 6000-series unit — silently loses access to APD for the entire session, with no indication that the control exists or was suppressed. There is no error, no tooltip, no log entry. The feature simply vanishes.

From a user perspective this is invisible and confusing: "I swear there was an APD button last time I used this radio."


How Other Clients Do It

SmartSDR for Windows evaluates APD availability per-connection. When connected to a capable radio (FLEX-8000 series with firmware ≥ v3.9.18), the APD button appears in the TX panel. The button shows one of three states:

  • AVAIL — radio is capable and ready to enable APD
  • CAL — APD is enabled and calibrating on the current TX slice
  • ACTIVE — APD is actively applying pre-distortion

When connected to an incapable radio (e.g., FLEX-6600), the button is absent entirely. Reconnecting to a capable radio within the same SmartSDR session restores the button. SmartSDR re-derives capability from the radio's transmitted status on every connection, not from a session-wide flag.

SDR Console and other third-party FlexLib clients do not implement APD (it requires firmware-side support and is FlexRadio-proprietary), so there is no other comparison point.


Suggested Behavior

  1. On every disconnect, TransmitModel (or RadioModel) should reset the APD capability flag to false/unknown. The TX applet should respond to this reset and hide the APD control.

  2. On every new connection, after the transmit status messages arrive, AetherSDR should re-evaluate whether the connected radio advertises APD availability. If the radio sends an APD-related key (e.g., apd_mode, apd_available, or similar — see Protocol Hints), the APD button should become visible and reflect current state.

  3. The APD button visibility must be driven entirely by radio-reported status, not by a flag set at startup or carried across disconnect/reconnect cycles.

  4. If the radio does not send any APD status key (as is the case for the 6000 series and older firmware), the control remains hidden. No change to the current 6600 behavior.

User flow after fix:

  • Connect to 6600 → APD hidden ✅
  • Disconnect → APD hidden ✅
  • Connect to 8600 → APD visible, showing AVAIL/CAL/ACTIVE state ✅
  • Disconnect → APD hidden ✅
  • Connect to 6600 again → APD hidden ✅

Protocol Hints

The APD state is advertised by the radio via transmit status messages. The exact key names observed on firmware v3.9.18+ are not yet confirmed in AetherSDR's codebase or CLAUDE.md, but based on SmartSDR source analysis and community reports, the likely keys are:

S<handle>|transmit apd_mode=0          # APD disabled
S<handle>|transmit apd_mode=1          # APD enabled
S<handle>|transmit apd_state=avail     # capability confirmed, not yet active
S<handle>|transmit apd_state=cal       # calibrating
S<handle>|transmit apd_state=active    # correction being applied

The absence of apd_mode / apd_state keys in the transmit status stream is itself the signal that the connected radio does not support APD. Capability detection should be presence-based: if neither key ever arrives after connection, the button stays hidden.

⚠️ Needs verification: A Wireshark or SmartSDR protocol log from an FLEX-8600 connection showing the full transmit status dump would confirm the exact key names. The TransmitModel::applyStatus() parser should log any unrecognized transmit keys in debug mode to help surface this.

Relevant code locations:

  • src/models/TransmitModelapplyStatus() is where APD keys should be parsed and a capability flag set
  • src/gui/TxApplet — APD button visibility should be wired to a TransmitModel::apdAvailableChanged() signal (currently may be set only once at startup)
  • Disconnect/reconnect lifecycle: RadioModel reset path should call TransmitModel::reset() to clear the capability flag

What did you expect?

No response

Steps to reproduce

No response

Radio model & firmware

Flex 8600 4.1.5

Linux distro & Qt version

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfacebugSomething isn't working

    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