Skip to content

fix(flex): mic source, DVK licence, remote_audio_tx id, TX state on reconnect, unkey on client drop - #15

Merged
nigelfenton merged 1 commit into
mainfrom
fix/sim-tx-audio-state
Oct 11, 2026
Merged

nigelfenton merged 1 commit into
mainfrom
fix/sim-tx-audio-state

Conversation

@nigelfenton

Copy link
Copy Markdown
Owner

Summary

Five radio behaviours that AetherSDR's client-side voice keyer (aethersdr/AetherSDR#6292) relies on were missing from the sim. They turned up while testing that PR against flex-sim. Until now each one needed a throwaway patch before the test could run.

Gap What happened against the old sim
No mic input <src>, no mic_selection= in the transmit status, no PC in mic list #6292 refuses to record unless the radio reports PC, so recording could never be tested
No license feature status AE fails open when it hears nothing, so every sim looked DVK-licensed and the unlicensed path (the one #6292 exists for) was unreachable
remote_audio_tx shared netcw's id AE held one id for two different streams
sub tx all not answered with TX state a client that reconnected while the sim was keyed believed it was in RX
Client drop left the sim keyed the next client inherited a carrier nobody owned

Changes

  • mic list returns MIC,BAL,LINE,ACC,PC. mic input <src> selects the source. The transmit status now carries mic_selection= and dax=.
  • sub license all reports digital_voice_keyer with enabled=1, or enabled=0 with the new --no-dvk-license. This applies to rack mode too.
  • remote_audio_tx gets its own stream id (0x88000000 + radio).
  • sub tx all is answered with the current interlock and transmit status.
  • A client that disconnects while keyed (MOX, xmit or TUNE) is unkeyed.
  • tests/test_tx_audio_state.py (11 checks, own ports :5995/:8735 and :5996/:8736) and PROTOCOL.md §10.

Testing

  • tests/test_tx_audio_state.py: 11/11. It cannot start on main, because --no-dvk-license does not exist there.
  • Full suite python -m pytest tests/: 43 passed, 0 skipped (Windows, Python 3.12). loopback_test.py passes.
  • End to end with the #6292 build (AE 26.10.1 base, Qt 6.12), with no test patches:
    • with --no-dvk-license, AE picks the Local keyer by itself
    • the mic source switches to PC and AE reads it back from the radio
    • MOX followed by a client drop leaves the sim unkeyed
    • after reconnect, AE and the sim agree it is in RX

🤖 Generated with Claude Code

…econnect, unkey on client drop

Radio behaviours AetherSDR's client-side voice keyer (#6292) depends on, found
testing it against the sim:

- `mic list` includes PC; `mic input <src>` selects the source, and the
  transmit status reports `mic_selection=` and `dax=` so a client reads them
  back. #6292 refuses to record unless the radio reports PC.
- `sub license all` reports `digital_voice_keyer` enabled=1, or 0 with the new
  `--no-dvk-license`. AE fails open without it, so the unlicensed path was
  untestable.
- `stream create type=remote_audio_tx` gets its own id; it shared netcw's.
- `sub tx all` is answered with the current TX state.
- A client that disconnects while keyed is unkeyed.

tests/test_tx_audio_state.py pins all five (11 checks). PROTOCOL.md §10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nigelfenton
nigelfenton merged commit 516faba into main Oct 11, 2026
4 checks passed
@nigelfenton nigelfenton mentioned this pull request Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant