fix(cat): make the Kenwood/Elecraft link an explicit USB-or-network choice

The network option IS implemented — the same ASCII CAT over TCP instead
of a cable, for a ser2net bridge, an Ethernet-serial adapter, or a radio
exposing its raw CAT port. What was wrong is how it was offered: the COM
port and the network address sat side by side with nothing to say that
the address wins whenever it is not empty.

Worse, the example address read 192.168.1.50:4532. That is Hamlib
rigctld's port — a different protocol, and the one OpsLog SERVES under
'Share CAT'. Anyone copying the example was pointing the radio link at
OpsLog's own server.

Now one choice, then the fields that belong to it. And when the far end
answers something that is not the radio's CAT, the error says that rather
than 'check the baud rate', which over TCP is advice about a setting that
cannot be the cause.
This commit is contained in:
2026-08-25 17:27:44 +02:00
parent 97ae05d688
commit 2f2fced15c
4 changed files with 41 additions and 6 deletions
+9
View File
@@ -273,6 +273,15 @@ func (k *Kenwood) Connect() error {
// commands back produces the same). Say which of the two it is, and quote
// what came back, because that is the fact that decides where to look.
if seen := k.heard; seen != "" {
// Over a NETWORK link, baud means nothing and saying "check the baud
// rate" sends the operator to a setting that cannot be the cause.
// The usual mistake there is a different protocol on the other end:
// Hamlib's rigctld (4532) answers text, so it looks alive and never
// replies to ID;. OpsLog itself serves that port under "Share CAT",
// which makes it an easy number to reach for.
if k.host != "" {
return fmt.Errorf("kenwood: %s is sending data but no reply to ID; or IF; — got %q. That end is not speaking the radio's CAT: point this at a serial-over-network bridge or the radio's own raw CAT port, not at Hamlib rigctld (4532)", k.host, seen)
}
return fmt.Errorf("kenwood: %s is sending data but no reply to ID; or IF; — got %q. Check the baud rate (set to %d here) and that nothing else is echoing the port", k.where(), seen, k.baud)
}
if k.host != "" {