diff --git a/internal/cat/icomserial.go b/internal/cat/icomserial.go index 42e150c..604de58 100644 --- a/internal/cat/icomserial.go +++ b/internal/cat/icomserial.go @@ -262,6 +262,17 @@ func (b *IcomSerial) Connect() error { // non-default address still RENDERS; this flag only drives the SET/read commands // (mode, span, edges), which need the 0x00 selector to be accepted on the 7300. b.dualScope = idAddr == 0x98 || idAddr == 0xA2 || idAddr == 0x94 + // Silence any LEFTOVER waveform stream, BLIND, before anything else. The + // 0x27 output flag lives in the RADIO and survives sessions; its flood is + // what makes the IC-7760 stop answering CI-V — so waiting for CI-V to + // answer before sending this (the first attempt did) was the egg asking + // the chicken to hatch it. Fire-and-forget: an unanswered set costs one + // frame, and the rig acts on what it decodes whether or not we hear the + // acknowledgement. The front-panel display is deliberately untouched. + // Synchronously: Connect already runs on the CAT goroutine, and a stray + // goroutine writing to the shared link would interleave with the command + // loop. One 350 ms wait at most, once per connect. + _ = b.execScope("waveform output off (leftover)", civ.SubScopeOn, 0) // Defer the DSP snapshot until the rig actually answers CI-V. Over the network // the rig may still be booting (or off) at Connect, so an immediate readDSP // would time out and leave every control at 0 / off with no retry. ReadState @@ -473,12 +484,6 @@ func (b *IcomSerial) ReadState() (RigState, error) { if !b.dspLoaded { b.readDSP() b.dspLoaded = true - // Silence any LEFTOVER waveform stream. The 0x27 output flag lives - // in the RADIO and survives our sessions: a scope enabled by an older - // build (or another program) kept flooding every new session — and on - // the IC-7760 that flood is what kills the CI-V link. The display on - // the rig's front panel is deliberately untouched. - _ = b.execScope("waveform output off (leftover)", civ.SubScopeOn, 0) } else { b.refreshFrontPanel() }