fix: SteppIR flaky status pinned FlexRadio TX interlock — operator couldn't transmit
The motorized-antenna follow loop keyed its deadband off the antenna's reported
frequency. A SteppIR reports an intermittent/stale status frequency (flips
between the commanded freq and its home/6 m value), so the deadband tripped on
almost every 1.5 s poll and re-issued a tune command. Each command refreshed
noteMotorMoveCommanded(), keeping motorTXInhibitLoop's recentCmd window alive, so
the Flex transmit-inhibit ("Interlock is preventing transmission") never
released — confirmed in a real log (moving=0 throughout, recentCmd was the
driver).
Follow loop now keys the deadband off the LAST COMMANDED rig frequency, only
re-tuning when the radio actually QSYs beyond the step — immune to a flaky
antenna status. Falls back to the antenna's freq only until the first command.
Also dropped SetTXInhibit's `interlock set reason=` sends: `reason` is a
read-only field on the Flex interlock object, so writing it is rejected
(cmd error 5000002D on V1.4.0.0) and did nothing; `transmit set inhibit=` is the
real mechanism and is unchanged.
This commit is contained in:
@@ -1889,15 +1889,11 @@ func (f *Flex) SetTune(on bool) error {
|
||||
// SmartSDR refuses to transmit while inhibit is set, so it holds even against a
|
||||
// footswitch or an external keyer, which a software PTT block could not.
|
||||
//
|
||||
// It also labels the interlock reason "OpsLog" so SmartSDR shows WHY TX is
|
||||
// blocked. The reason is best-effort (a separate interlock object); the inhibit
|
||||
// is what actually blocks TX, so a rig that ignores the reason still stays safe.
|
||||
// `transmit set inhibit=` is the whole mechanism. We used to also send
|
||||
// `interlock set reason=OpsLog` to label WHY TX was blocked, but `reason` is a
|
||||
// read-only status field on the interlock object — writing it is rejected
|
||||
// (cmd error 5000002D on SmartSDR v1.4/v3) and does nothing, so it's dropped.
|
||||
func (f *Flex) SetTXInhibit(on bool) error {
|
||||
if on {
|
||||
f.send("interlock set reason=OpsLog")
|
||||
} else {
|
||||
f.send("interlock set reason=")
|
||||
}
|
||||
return f.txSet("transmit set inhibit="+boolFlex(on), "inhibit", func(t *flexTX) { t.inhibit = on })
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user