Skip to content

fix(rigctl): route cwx send/clear through CwxModel for CAT sidetone (#2909). Principle I.#2914

Merged
aethersdr-agent[bot] merged 1 commit into
mainfrom
aetherclaude/issue-2909
May 21, 2026
Merged

fix(rigctl): route cwx send/clear through CwxModel for CAT sidetone (#2909). Principle I.#2914
aethersdr-agent[bot] merged 1 commit into
mainfrom
aetherclaude/issue-2909

Conversation

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Summary

Fixes #2909

What was changed

fix(rigctl): route cwx send/clear through CwxModel for CAT sidetone (#2909). Principle I.

Files modified

  • src/core/RigctlProtocol.cpp
 src/core/RigctlProtocol.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Generated by AetherClaude (automated agent for AetherSDR)

…2909). Principle I.

Hamlib `b <text>` / `\send_morse` over rigctld was dispatching `cwx send`
directly via RadioModel::sendCmdPublic, which skipped CwxModel and the
local sidetone gate it drives (CwxModel::transmissionRequested →
CwxLocalKeyer → CwSidetoneGenerator). MIDI key and the on-screen CWX
panel produce sidetone; CAT-driven CW was silent.

cmdSendMorse now calls m_model->cwxModel().send(text), which emits both
commandReady (forwarded to the radio with the FlexLib CWX wire format —
spaces encoded as 0x7f, monotonic block-id appended) and
transmissionRequested for the local keyer. cmdStopMorse calls
clearBuffer() so transmissionCancelled cuts any in-flight sidetone in
addition to sending `cwx clear`.

Honors Principle I (FlexLib Is The Protocol Authority): the CAT path
now uses the same FlexLib CWX encoding (space → 0x7f, block-id suffix)
that CwxModel::send produces for the CWX panel, instead of a raw
`cwx send "..."` that silently differs on the wire.

Blast radius: seed cmdSendMorse risk_score=0.0235, 2 high-risk affected
(top: RadioModel::sendCmd, PerfTelemetry::instance — both downstream
shared infrastructure that the new path also traverses via
CwxModel::commandReady → RadioModel::sendCmd). The file-level hook
reported MainWindow callers (bw=0.15 for MainWindow::MainWindow) because
they instantiate RigctlProtocol, but the two CW handler bodies are not
on the construction/menu-wiring path so no MainWindow behavior changes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

@jensenpat jensenpat left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improve sidetone for CAT applications using existing Cwx sidetone path.

@aethersdr-agent aethersdr-agent Bot merged commit 7960b0f into main May 21, 2026
4 checks passed
@aethersdr-agent aethersdr-agent Bot deleted the aetherclaude/issue-2909 branch May 21, 2026 13:57
G6PWY-Chris pushed a commit to G6PWY-Chris/AetherSDR that referenced this pull request Jun 22, 2026
…ethersdr#2909). Principle I. (aethersdr#2914)

## Summary

Fixes aethersdr#2909

### What was changed

fix(rigctl): route cwx send/clear through CwxModel for CAT sidetone
(aethersdr#2909). Principle I.

### Files modified

- `src/core/RigctlProtocol.cpp`

```
 src/core/RigctlProtocol.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
```

---
Generated by AetherClaude (automated agent for AetherSDR)

Co-authored-by: aethersdr-agent[bot] <273844287+aethersdr-agent[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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.

CW sidetone is missing when transmitting via CAT (rigctrld)

1 participant