feat: FlexRadio CWX CW keyer (send/stop/speed) — no WinKeyer/SmartCAT needed
Adds a third CW engine alongside WinKeyer and Icom CI-V: FlexRadio's CWX keyer over the existing SmartSDR CAT connection. - cat.FlexController: SendCW (cwx send), StopCW (cwx clear); flex.go implements them, escaping the quoted text form. Speed reuses SetCWSpeed (cw wpm). - App bindings FlexSendCW/FlexStopCW/FlexSetKeySpeed via FlexDo. - Frontend: cwSource gains 'flex'; macros/auto-call/<LOGQSO>/send-on-type route to Flex when the CAT backend is a Flex (estimate-based timing like Icom, no busy echo). Keyer panel shows 'Flex CWX' + ready/offline; Settings adds the engine option with a CAT-backend guard. Core send/stop/speed first; type-ahead buffer + mid-send backspace (cwx delete) to follow.
This commit is contained in:
@@ -10359,6 +10359,36 @@ func (a *App) IcomSendCW(text string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// FlexSendCW keys a CW message through the FlexRadio CWX keyer (SmartSDR), so a
|
||||
// Flex needs no WinKeyer / SmartCAT. Text is already variable-resolved by the UI.
|
||||
func (a *App) FlexSendCW(text string) error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
}
|
||||
err := a.cat.FlexDo(func(fc cat.FlexController) error { return fc.SendCW(text) })
|
||||
if err != nil {
|
||||
applog.Printf("flex cw: FlexSendCW(%q) failed: %v", text, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// FlexStopCW clears the CWX buffer, aborting whatever is being keyed.
|
||||
func (a *App) FlexStopCW() error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
}
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error { return fc.StopCW() })
|
||||
}
|
||||
|
||||
// FlexSetKeySpeed sets the CW keyer speed in WPM (the CWX keyer uses the radio's
|
||||
// CW speed).
|
||||
func (a *App) FlexSetKeySpeed(wpm int) error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
}
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error { return fc.SetCWSpeed(wpm) })
|
||||
}
|
||||
|
||||
// IcomStopCW aborts the CW message currently being sent.
|
||||
func (a *App) IcomStopCW() error {
|
||||
if a.cat == nil {
|
||||
|
||||
Reference in New Issue
Block a user