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:
2026-08-01 12:09:11 +02:00
parent c62d992ad6
commit 3dd428d748
4 changed files with 81 additions and 32 deletions
+5 -13
View File
@@ -150,20 +150,12 @@ func (y *Yaesu) Connect() error {
if err != nil {
return fmt.Errorf("yaesu: open %s @ %d baud: %w", y.portName, y.baud, err)
}
// Deassert DTR and RTS.
// The modem lines are LEFT ALONE — see the same note in kenwood.go.
//
// Windows raises both when a serial port is opened, and a great many
// interfaces read them as PTT: a Xiegu G90 behind a DE-19 goes into
// transmit the moment OpsLog connects and STAYS there — Xiegu's own
// documentation asks for RTS and DTR low. The same applies to an Icom with
// USB SEND mapped to a line (which is why the CI-V backend has done this
// from the start) and to any rig keyed by a home-made cable.
//
// PTT on this backend is a CAT command, so neither line should ever be
// asserted here. A station keying by RTS/DTR configures that separately,
// on its own port.
_ = p.SetDTR(false)
_ = p.SetRTS(false)
// Deasserting them to keep an interface from keying the rig silenced radios
// instead: many USB-serial interfaces will not transmit with RTS low. The
// Xiegu fault that change was written for is handled in that backend, which
// now has an explicit setting for which line keys the rig.
p.SetReadTimeout(300 * time.Millisecond)
y.port = p