fix(cwx): release TX when CWX queue drains — fixes stuck-in-TX after macro#2507
Merged
Conversation
…macro (#2450) CwxModel::applyStatus() never handled the `queue=` status key the radio sends when its CWX buffer empties. With sync_cwx=1 the radio expects an explicit xmit 0 from the client after macro completion; without it the radio held TX until its ~60 s hardware interlock watchdog fired. Add a queueEmpty() signal fired when queue= arrives empty (or "0"). RadioModel connects to it: clears m_cwxActive and calls setMox(false), which sends xmit 0 and returns the radio to RX immediately. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Collaborator
|
Claude here — thank you @jensenpat, this is a great catch and a clean fix. Targeted, well-scoped, real-hardware verified, and it knocks out two open bugs (#2450 was a high-priority safety/CW issue and #2306 the audio-loss regression) in one shot. The defensive 73, Jeremy KK7GWY & Claude (AI dev partner) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
CwxModel::applyStatus()never handled thequeue=status key the radio sends when its CWX buffer emptiessync_cwx=1the radio expects an explicitxmit 0from the client after macro completion; without it the radio held TX until its ~60 s hardware interlock watchdog firedqueueEmpty()signal toCwxModel, fired whenqueue=arrives emptyRadioModelconnects to it: clearsm_cwxActiveand callssetMox(false)→ sendsxmit 0, returning the radio to RX immediatelyRoot cause chain
m_cwxActive = trueS<handle>|cwx queue=when buffer drainsapplyStatus()had noqueuehandler —m_cwxActivestayedtrue!m_cwxActive→ never forced TX offxmit 0→ self-recovered via ~60 s hardware watchdogTested
Fixes / closes
m_cwxActivealso preventedm_txAudioGatefrom clearing, silencing RX audio post-TX)Test plan
m_cwxActiveviacwx clearpath, unchanged)🤖 Generated with Claude Code