feat: the Yaesu console follows the mode — CW gets its own controls

Microphone gain and VOX are meaningless in CW: the rig ignores both, so showing
them is showing dead controls. They are hidden, and a CW card takes their place
with keyer speed (KS), break-in (BI) and ZIN (ZI), the zero-in that retunes so
the station being received lands on the operator's own pitch.

ZIN is a one-shot with no state, so it is a plain button rather than a chip that
would look latched, and no settings read-back follows — the frequency change
arrives through the normal poll like any other.

The keyer values are read on the slow beat whatever the mode, so the card is
already populated the instant the operator switches to CW instead of filling in a
poll cycle later.

Which controls show is decided by the RIG's mode, not the logged one: the logged
mode can be a digital sub-mode the radio knows nothing about.
This commit is contained in:
2026-07-29 12:07:28 +02:00
parent 8cc6997eec
commit c9218310ae
8 changed files with 123 additions and 10 deletions
+14
View File
@@ -14991,3 +14991,17 @@ func (a *App) SetYaesuModeRaw(mode string) error {
func (a *App) SetYaesuSplitOffset(offsetHz int64) error {
return a.yaesuDo(func(y cat.YaesuController) error { return y.SetYaesuSplitOffset(offsetHz) })
}
func (a *App) SetYaesuKeySpeed(wpm int) error {
return a.yaesuDo(func(y cat.YaesuController) error { return y.SetYaesuKeySpeed(wpm) })
}
func (a *App) SetYaesuBreakIn(on bool) error {
return a.yaesuDo(func(y cat.YaesuController) error { return y.SetYaesuBreakIn(on) })
}
// YaesuZeroIn retunes the rig so the received CW signal lands on the operator's
// own pitch — the radio's ZIN key.
func (a *App) YaesuZeroIn() error {
return a.yaesuDo(func(y cat.YaesuController) error { return y.YaesuZeroIn() })
}