Skip to content

BYPASS state lost on TX/RX switch when all chain stages were already disabled #2892

Description

@TnxQSO-Admin

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?

What happened

Intermittent issue: when BYPASS is enabled on the Aetherial Audio Channel
Strip TX side, then the strip is switched to RX and back to TX, the BYPASS
button is no longer checked. Same applies to the RX side.

Root cause

isTxBypassed() returns !m_txBypassSnapshot.isEmpty(), but the snapshot is
only populated with stages that were enabled at the time of BYPASS click.
If all stages are already disabled when BYPASS is engaged, the snapshot
stays empty and isTxBypassed() returns false even though setTxBypassed(true)
was just called.

On the TX/RX/TX switch, AetherialAudioStrip queries isTxBypassed() to
re-sync the button state, gets false back, and unchecks the button.
setTxBypassed(false) is never actually called - the state just becomes
inconsistent.

Code references:

  • AudioEngine.cpp:2204 - setTxBypassed() populates snapshot conditionally
  • AudioEngine.cpp:2122 - isTxBypassed() returns based on snapshot emptiness
  • AetherialAudioStrip.cpp:243 - side-switch reads isTxBypassed()
  • AudioEngine.cpp:2220 - identical bug exists for RX side

Suggested fix

Add dedicated bool members m_txBypassActive{false} and m_rxBypassActive{false}
to AudioEngine.h. Set them in setTxBypassed()/setRxBypassed() before the
emit. Change isTxBypassed()/isRxBypassed() to return the flag instead of
checking snapshot emptiness.

The snapshot continues to serve its restore purpose unchanged. The flag
becomes the sole source of truth for "is bypass currently engaged".

Environment

  • AetherSDR: current main
  • OS: Linux (Arch / KDE)

Suggested labels: bug, audio, GUI

What did you expect?

What I expected

BYPASS state should persist across TX/RX side switches.

Steps to reproduce

Steps to reproduce

  1. Open Aetherial Audio Channel Strip on TX
  2. Ensure all chain stages (GATE, EQ, DESS, COMP, TUBE, EVO, VERB) are
    disabled
  3. Click BYPASS - button appears checked
  4. Switch to RX
  5. Switch back to TX - BYPASS is no longer checked

The bug is reproducible whenever BYPASS is clicked while all bypass-eligible
stages are already disabled. It also reproduces on app restart after a
previous session ended with BYPASS active (settings persist all stages as
disabled, then any subsequent BYPASS click hits the same case).

AetherSDR version

v26.5.2.1

Radio model & firmware

AU-520

Operating system

Linux

OS version and hardware

CachyOS

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfaceaudioAudio engine and streamingbugSomething isn't workingmaintainer-reviewRequires maintainer review before any action is taken

    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