fix(cat): stop deasserting DTR/RTS on Kenwood and Yaesu
d4bfd30 fixed a Xiegu G90 behind a DE-19 that keyed on connect, and I
applied the same line-lowering to Kenwood and Yaesu with no evidence that
either needed it. It silenced them: many USB-serial interfaces will not
transmit with RTS low — hardware flow control, or an output stage the
line enables. A TS-990 on COM3 opened cleanly and answered nothing, which
reached us as "CAT stopped working after the update".
Xiegu keeps the behaviour: that is where the fault was reported, and that
backend now has an explicit setting for which line keys the rig. The CI-V
backend keeps its own, which predates all of this.
Kenwood also distinguishes a silent port from one sending data that never
answers, and quotes what arrived — "the rig is not answering" sent an
operator checking the power switch on a radio whose frames were visibly
on the wire.
This commit is contained in:
@@ -265,8 +265,8 @@ func TestKenwoodSilentRigIsNotConnected(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Fatal("a silent port was reported as a connected rig")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "not answering") {
|
||||
t.Errorf("error was %q — it should say the rig is not answering", err)
|
||||
if !strings.Contains(err.Error(), "sent nothing") {
|
||||
t.Errorf("error was %q — a silent port should be reported as silence", err)
|
||||
}
|
||||
if k.model != "" {
|
||||
t.Errorf("a stale model survived a failed connect: %q", k.model)
|
||||
@@ -355,3 +355,26 @@ func TestKenwoodSplitWhenFRFTRejected(t *testing.T) {
|
||||
t.Errorf("IF-reported split broke: split=%v tx=%d rx=%d", s.Split, s.FreqHz, s.RxFreqHz)
|
||||
}
|
||||
}
|
||||
|
||||
// A rig that talks but never answers what was asked must not be reported as a
|
||||
// silent one.
|
||||
//
|
||||
// The two faults need opposite responses: silence means the radio is off, the
|
||||
// wrong port, or a dead cable; noise means the baud rate is wrong or something
|
||||
// is echoing the line. "The rig is not answering" sent an operator checking the
|
||||
// power switch on a radio whose frames were visibly arriving.
|
||||
func TestKenwoodNoisyRigIsReportedAsNoiseNotSilence(t *testing.T) {
|
||||
k := NewKenwood("COM-TEST", 9600, "FT8")
|
||||
k.dialPort = func() (serial.Port, error) {
|
||||
return &fakeSerial{toRig: &strings.Builder{}, answer: func(cmd string) string {
|
||||
return "XX9999;" // something, but never the reply to ID; or IF;
|
||||
}}, nil
|
||||
}
|
||||
err := k.Connect()
|
||||
if err == nil {
|
||||
t.Fatal("a rig answering gibberish was reported as connected")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "sending data") || !strings.Contains(err.Error(), "XX9999;") {
|
||||
t.Errorf("error was %q — it should say data arrived, and quote it", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user