fix: the FTDX10 refuses KY; — stop waiting on a status it will never send
The log settled it: the rig answers "?;" — its "unknown command" — to KY; and to MG;. So the keyer status query cannot work on this model, and every send spent four seconds waiting for an answer that was never coming. "?;" is now recognised as what it is. A command refused once is never asked again: models implement different subsets, and re-asking costs a 600 ms timeout on every slow beat for a control that will never answer — which is also why the panel felt sluggish. Without a buffer status there is still a real constraint: one KY command carries 24 characters and the rig DROPS the rest silently. So the send is now paced by how long the text takes to key, from PARIS timing at the rig's own speed. A long macro goes out complete instead of losing its tail. That leaves the question the log cannot answer: whether KY <text>; itself is accepted. If the rig also replies "?;" to it, the CAT menu's PC KEYING setting is the next suspect — but nothing in the code will be guessing at it.
This commit is contained in:
@@ -17,6 +17,7 @@ package cat
|
||||
// rather than showing a zero that reads as "it reset itself".
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -199,8 +200,21 @@ func (y *Yaesu) readPanelSettings() {
|
||||
// this model lacks then keeps its previous value instead of dropping to zero,
|
||||
// which would look like a setting that reset itself.
|
||||
func (y *Yaesu) askNum(cmd, prefix string, digits int) (int, bool) {
|
||||
// A command this model refused once is never asked again. Models implement
|
||||
// different subsets — an FTDX10 answers "?;" to MG; — and re-asking costs a
|
||||
// 600 ms timeout on every slow beat, for a control that will never answer.
|
||||
if y.unsupported[cmd] {
|
||||
return 0, false
|
||||
}
|
||||
r, err := y.ask(cmd)
|
||||
if err != nil {
|
||||
if errors.Is(err, errYaesuUnsupported) {
|
||||
if y.unsupported == nil {
|
||||
y.unsupported = map[string]bool{}
|
||||
}
|
||||
y.unsupported[cmd] = true
|
||||
debugLog.Printf("yaesu: this rig does not support %q — not asking again", cmd)
|
||||
}
|
||||
return 0, false
|
||||
}
|
||||
if !strings.HasPrefix(r, prefix) || len(r) < len(prefix)+digits {
|
||||
|
||||
Reference in New Issue
Block a user