fix: the Yaesu keyer refused to send — a status reply we read too strictly
"the keyer buffer stayed full for 4s" and nothing keyed, on a rig whose CAT is working. The buffer was not full: the check demanded the reply be exactly "KY0;" with the digit at byte 2, so anything the FTDX10 phrases differently — a space before the digit, another command's reply arriving first — read as "still full" on every poll until the deadline. The test is now asymmetric on purpose: only a clear "1" holds the send back. Anything unrecognised goes ahead. Refusing to transmit because a status line was phrased unexpectedly is the worse failure — the operator gets silence with no explanation, where at worst sending early truncates a long message, which the chunk loop then recovers from. The reply is also logged once per run, since we have no verified sample of it — that line is what turns the next surprise into a fact instead of a theory.
This commit is contained in:
@@ -61,3 +61,34 @@ func TestYaesuCWChunking(t *testing.T) {
|
||||
t.Errorf("chunks rejoin to %q, want %q", joined, msg)
|
||||
}
|
||||
}
|
||||
|
||||
// Reading the KY status reply.
|
||||
//
|
||||
// The first version demanded exactly "KY0;" with the digit at byte 2, and on a
|
||||
// real FTDX10 that refused to send at all: the reply was phrased differently,
|
||||
// every poll read as "still full", and after four seconds the send gave up
|
||||
// having keyed nothing. Hence the asymmetry — only a clear "1" blocks.
|
||||
func TestYaesuCWBufferFull(t *testing.T) {
|
||||
cases := []struct {
|
||||
reply string
|
||||
full bool
|
||||
}{
|
||||
{"KY0;", false},
|
||||
{"KY1;", true},
|
||||
{"KY 0;", false}, // a space before the digit
|
||||
{"KY 1;", true},
|
||||
{"ky1;", true}, // lower case
|
||||
{" KY0; ", false},
|
||||
// Shapes we have no sample of must NOT block: silence with no explanation
|
||||
// is a worse failure than sending a moment early.
|
||||
{"KY;", false},
|
||||
{"", false},
|
||||
{"FA014074000;", false}, // another command's reply arriving first
|
||||
{"KYX;", false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
if got := yaesuCWBufferFull(c.reply); got != c.full {
|
||||
t.Errorf("yaesuCWBufferFull(%q) = %v, want %v", c.reply, got, c.full)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user