fix(icom): sidebands by name, model-aware controls, address 0x00

From an IC-7300 report, four faults and one addition.

USB and LSB could not be commanded at all: modeCode knew 'SSB' — which
resolves the sideband from the band — and answered 'unsupported mode' to
the sideband names themselves. So an operator wanting USB on 40 m had no
way to say it, from the console or from anywhere else. They are separate
buttons now, and a rig reporting the folded ADIF 'SSB' still lights the
side its frequency implies.

The console offered controls the radio does not have: ANT1/ANT2 on a rig
with one socket, and a PSK button every non-7610-class Icom NAKs. Both
now follow the model, as the band buttons and attenuator steps already
did. Mic gain stops being phone-only — on USB-D it still sets what the
radio transmits at, so an operator who lives in FT8 had none.

CI-V address 0x00 was refused by a 'n > 0' test and silently replaced by
the IC-7610 default; an EMPTY setting is what means unconfigured, so the
parse error decides now, not the value. Plus the 60 m band button that
was missing.
This commit is contained in:
2026-09-02 00:00:21 +02:00
parent 3f97084246
commit ad69371f6a
4 changed files with 92 additions and 18 deletions
+9 -2
View File
@@ -8330,8 +8330,15 @@ func (a *App) GetCATSettings() (CATSettings, error) {
if n, _ := strconv.Atoi(m[keyCATIcomBaud]); n > 0 {
out.IcomBaud = n
}
if n, _ := strconv.Atoi(m[keyCATIcomAddr]); n > 0 && n <= 0xFF {
out.IcomAddr = n
// 0x00 is a real CI-V address an operator may need (a bare interface, a rig
// left at its factory broadcast address), and "> 0" silently sent them back
// to the IC-7610 default with no way to say what they meant. An EMPTY
// setting is what means "never configured" — so the error is what decides,
// not the value.
if v := strings.TrimSpace(m[keyCATIcomAddr]); v != "" {
if n, err := strconv.Atoi(v); err == nil && n >= 0 && n <= 0xFF {
out.IcomAddr = n
}
}
if out.Backend == "" {
out.Backend = "omnirig"