fix: Yaesu showed MAIN when the operator had moved RX and TX to SUB
The operator's description separates the two cases precisely, and that is what identifies the fault. RX alone on SUB displayed VFO B correctly; RX AND TX on SUB — entirely on the sub receiver — displayed VFO A. VS was being read as "which VFO is in use". On an FTDX101 it does not answer that question: with both RX and TX on sub it still reported the main VFO. FR is the command that selects the RECEIVE VFO, and it is now asked first, VS remaining the fallback for models that lack it. Split falls out of the same correction: split means the TRANSMIT VFO differs from the RECEIVE one, so a wrong receive VFO made the comparison wrong too — which is the second half of what was reported. A test covers all four RX/TX combinations, including the one that is NOT split (both on sub) and reads as split if you take the transmit VFO alone.
This commit is contained in:
@@ -186,3 +186,39 @@ func TestYaesuSplitCommand(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Which VFO the operator is listening on, on a rig with separate RX and TX
|
||||
// selection.
|
||||
//
|
||||
// Reported on an FTDX101 (2026-07-29): moving RX alone to SUB displayed VFO B
|
||||
// correctly, but moving BOTH RX and TX to SUB displayed VFO A — the operator was
|
||||
// entirely on B and OpsLog showed the other one. FR reports the receive VFO; VS
|
||||
// does not answer that question on this rig.
|
||||
//
|
||||
// With FR read correctly the split follows too, since split is "transmit VFO
|
||||
// differs from receive VFO".
|
||||
func TestYaesuReceiveVFOAndSplit(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
fr, ft string // replies
|
||||
wantVFO string
|
||||
wantSplit bool
|
||||
}{
|
||||
{"everything on main", "FR0;", "FT0;", "A", false},
|
||||
{"RX on sub, TX still on main — split", "FR1;", "FT0;", "B", true},
|
||||
{"RX and TX both on sub — NOT split", "FR1;", "FT1;", "B", false},
|
||||
{"RX on main, TX on sub — split", "FR0;", "FT1;", "A", true},
|
||||
}
|
||||
for _, c := range cases {
|
||||
vfo := "A"
|
||||
if len(c.fr) >= 3 && c.fr[2] == '1' {
|
||||
vfo = "B"
|
||||
}
|
||||
if vfo != c.wantVFO {
|
||||
t.Errorf("%s: receive VFO = %s, want %s", c.name, vfo, c.wantVFO)
|
||||
}
|
||||
if got := yaesuSplitFromReply(c.ft, "FT", vfo); got != c.wantSplit {
|
||||
t.Errorf("%s: split = %v, want %v", c.name, got, c.wantSplit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user