Skip to content

Low-Latency DAX TX drops audio when PTT is triggered by external client #752

Description

@SA7LAV

Description

When "Low-Latency DAX (FreeDV)" is enabled and an external application (e.g. WSJT-X) triggers PTT via its own FlexRadio CAT connection, DAX TX audio is silently dropped. The radio keys up (PA draws current) but no modulated signal is produced — ALC/Power meters stay at zero.

Disabling "Low-Latency DAX (FreeDV)" resolves the issue immediately.

Root Cause

In AudioEngine::feedDaxTxAudio() (AudioEngine.cpp:1022), the low-latency path gates on m_transmitting:

if (!m_transmitting) {
    m_daxPreTxBuffer.clear();
    m_txFloatAccumulator.clear();
    return;   // all audio discarded
}

m_transmitting is set via TransmitModel::setTransmitting(), which is called from the interlock status handler in RadioModel.cpp:1876:

if (!m_txOwnedByUs || (!m_txRequested && !m_transmitModel.isTuning())) {
    m_transmitModel.setTransmitting(false);   // forced off
}

When an external client triggers PTT, m_txOwnedByUs is false, so m_transmitting stays false even though the radio reports state=TRANSMITTING. The low-latency path then discards all incoming DAX TX samples.

The radio-native DAX route (DaxTxLowLatency=False, line 1040) does not have this issue — it only blocks audio when m_transmitting && !m_daxTxMode, which correctly allows DAX audio to flow regardless of TX ownership.

Steps to Reproduce

  1. Enable "Low-Latency DAX (FreeDV)" in Settings menu
  2. Connect WSJT-X (or any external client) directly to the FLEX via CAT for PTT
  3. Route WSJT-X TX audio through aethersdr-tx PipeWire sink
  4. Start an FT8 TX cycle
  5. Radio keys up but no RF output / ALC stays at zero

Expected Behavior

DAX TX audio should reach the radio's TX chain regardless of which client triggered PTT, as long as the TX slice is in a digital mode (DIGU/DIGL/RTTY).

Suggested Fix

In the low-latency path, consider gating on the radio's actual interlock state (state=TRANSMITTING) rather than m_txOwnedByUs. Alternatively, treat DAX TX audio like the radio-native route does — allow it to flow when m_daxTxMode is true, independent of TX ownership.

Environment

  • AetherSDR 0.8.2
  • FLEX-8600, firmware v1.4.0.0
  • WSJT-X Improved with Rig=FlexRadio SmartSDR Slice A, PTT via CAT
  • CachyOS (Arch Linux), PipeWire

Metadata

Metadata

Assignees

No one assigned

    Labels

    audioAudio engine and streamingbugSomething 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