feat: Implemented scope on Ethernet for Icom
This commit is contained in:
@@ -32,6 +32,16 @@ type Backend interface {
|
||||
SetPTT(on bool) error
|
||||
}
|
||||
|
||||
// interruptible is an OPTIONAL backend capability: abort an in-progress Connect
|
||||
// quickly. The network Icom backend's Connect blocks for up to tens of seconds
|
||||
// (UDP handshake + login + waiting for the rig to boot from standby); without a
|
||||
// way to interrupt it, Stop()/Start() would freeze on the poll goroutine until
|
||||
// the dial gives up — which is why Settings "Save & Close" hung for ~1 min once
|
||||
// the link was lost. Backends that don't implement it are simply not interrupted.
|
||||
type interruptible interface {
|
||||
Interrupt()
|
||||
}
|
||||
|
||||
// RigState is the snapshot exchanged with the frontend.
|
||||
//
|
||||
// FreqHz follows the ADIF FREQ convention: it is the TX frequency. When the
|
||||
@@ -156,6 +166,7 @@ func (m *Manager) stopLocked() {
|
||||
m.mu.Lock()
|
||||
stop := m.stopCh
|
||||
done := m.doneCh
|
||||
b := m.backend
|
||||
m.stopCh = nil
|
||||
m.doneCh = nil
|
||||
m.cmdCh = nil
|
||||
@@ -164,6 +175,11 @@ func (m *Manager) stopLocked() {
|
||||
if stop != nil {
|
||||
close(stop)
|
||||
}
|
||||
// Abort any in-progress Connect so we don't block on a slow network dial
|
||||
// (the poll goroutine can be tens of seconds deep in the Icom UDP handshake).
|
||||
if iv, ok := b.(interruptible); ok {
|
||||
iv.Interrupt()
|
||||
}
|
||||
if done != nil {
|
||||
<-done
|
||||
}
|
||||
@@ -403,6 +419,22 @@ type IcomTXState struct {
|
||||
Preamp int `json:"preamp"` // 0=off, 1=P.AMP1, 2=P.AMP2
|
||||
Att int `json:"att"` // dB attenuation, 0=off
|
||||
Filter int `json:"filter"` // 1 | 2 | 3 (FIL1/2/3)
|
||||
// Antenna (IC-7610 = ANT1/ANT2).
|
||||
Antenna int `json:"antenna"` // 1 | 2 (0 = unknown)
|
||||
// Filter fine controls: Twin PBT + manual notch (0-100, 50 = centre).
|
||||
PBTInner int `json:"pbt_inner"`
|
||||
PBTOuter int `json:"pbt_outer"`
|
||||
ManualNotch bool `json:"manual_notch"`
|
||||
NotchPos int `json:"notch_pos"`
|
||||
// TX extras.
|
||||
Squelch int `json:"squelch"`
|
||||
Comp bool `json:"comp"`
|
||||
CompLevel int `json:"comp_level"`
|
||||
Monitor bool `json:"monitor"`
|
||||
MonLevel int `json:"mon_level"`
|
||||
VOX bool `json:"vox"`
|
||||
VOXGain int `json:"vox_gain"`
|
||||
AntiVOX int `json:"anti_vox"`
|
||||
}
|
||||
|
||||
// IcomController is an OPTIONAL backend capability (the Icom CI-V backend): the
|
||||
@@ -436,6 +468,20 @@ type IcomController interface {
|
||||
StopCW() error // abort the CW message being sent
|
||||
SetKeySpeed(int) error // CW keyer speed in WPM
|
||||
SetBreakIn(int) error // CW break-in: 0=OFF, 1=SEMI, 2=FULL
|
||||
SetAntenna(int) error // 1 = ANT1, 2 = ANT2
|
||||
SetPBTInner(int) error // Twin PBT inside (0-100, 50 = centre)
|
||||
SetPBTOuter(int) error // Twin PBT outside (0-100, 50 = centre)
|
||||
SetManualNotch(bool) error
|
||||
SetNotchPos(int) error // manual-notch position (0-100, 50 = centre)
|
||||
SetSquelch(int) error
|
||||
SetComp(bool) error
|
||||
SetCompLevel(int) error
|
||||
SetMonitor(bool) error
|
||||
SetMonLevel(int) error
|
||||
SetVOX(bool) error
|
||||
SetVOXGain(int) error
|
||||
SetAntiVOX(int) error
|
||||
SetPower(bool) error // turn the transceiver on/off (manual — never auto on connect)
|
||||
}
|
||||
|
||||
// ScopeSweep is one complete spectrum-scope sweep reassembled from the Icom's
|
||||
|
||||
Reference in New Issue
Block a user