fix: IC-7610 VFO A over OmniRig + faster Icom LAN reconnect
OmniRig: on the IC-7610 the generic Freq property reports the wrong VFO (its Main/Sub model confuses the stock ini), so OpsLog showed VFO B. Detect the rig by RigType and, in simplex, read VFO A explicitly — matching Log4OM. Only the 7610 is affected; other rigs keep using the generic Freq. Icom network: when the rig tears the session down (control/CI-V 0x05) OpsLog only logged it and kept the half-dead link until the 6 s liveness timeout expired. Mark the link dead on 0x05 so Alive() fails on the next poll and the manager reconnects cleanly right away.
This commit is contained in:
+17
-1
@@ -32,6 +32,7 @@ type OmniRig struct {
|
||||
omnirig *ole.IDispatch
|
||||
rig *ole.IDispatch
|
||||
lastSig string // last logged Split/VFO signature — only log on change
|
||||
rigType string // OmniRig's RigType string (the .ini title), e.g. "IC-7610"
|
||||
|
||||
// lastSetFreq is the frequency most recently COMMANDED via SetFrequency.
|
||||
// SetMode uses it to pick USB vs LSB for "SSB" instead of reading OmniRig's
|
||||
@@ -80,11 +81,20 @@ func (o *OmniRig) Connect() error {
|
||||
o.rig = rigVar.ToIDispatch()
|
||||
|
||||
if rt, err := oleutil.GetProperty(o.rig, "RigType"); err == nil {
|
||||
debugLog.Printf("OmniRig connected to Rig%d type=%q", o.RigNum, rt.ToString())
|
||||
o.rigType = rt.ToString()
|
||||
debugLog.Printf("OmniRig connected to Rig%d type=%q", o.RigNum, o.rigType)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// isIC7610 reports whether the connected rig is an IC-7610. OmniRig's generic
|
||||
// Freq property reads the wrong VFO on the 7610 (its Main/Sub model confuses the
|
||||
// stock ini), so we read VFO A explicitly for it instead — matching what Log4OM
|
||||
// shows.
|
||||
func (o *OmniRig) isIC7610() bool {
|
||||
return strings.Contains(strings.ToUpper(o.rigType), "7610")
|
||||
}
|
||||
|
||||
func (o *OmniRig) Disconnect() {
|
||||
if o.rig != nil {
|
||||
o.rig.Release()
|
||||
@@ -199,6 +209,12 @@ func (o *OmniRig) ReadState() (RigState, error) {
|
||||
s.Split = false
|
||||
s.RxFreqHz = 0
|
||||
s.FreqHz = freqMain
|
||||
// IC-7610 quirk: OmniRig's generic Freq reports VFO B (its Main/Sub model
|
||||
// confuses the stock ini), so OpsLog showed the wrong VFO. Read VFO A
|
||||
// explicitly for the 7610 — what the operator actually wants to see.
|
||||
if o.isIC7610() && freqA != 0 {
|
||||
s.FreqHz = freqA
|
||||
}
|
||||
if s.FreqHz == 0 {
|
||||
if s.Vfo == "B" || s.Vfo == "BB" {
|
||||
s.FreqHz = freqB
|
||||
|
||||
Reference in New Issue
Block a user