diff --git a/app.go b/app.go index ea4592f..a1f79cb 100644 --- a/app.go +++ b/app.go @@ -11990,6 +11990,8 @@ func (a *App) ultrabeamFollowNow(freqHz int64) { return } if !motorBandAllowed(s.Bands, freqHz) { + applog.Printf("ultrabeam: followNow %.3f MHz is %q — not in covered bands %v; no move", + float64(freqHz)/1e6, bandForHz(freqHz), s.Bands) return // a band the antenna doesn't cover — leave it where it is } khz := int(freqHz / 1000) @@ -14448,6 +14450,7 @@ func (a *App) startUltrabeam() { if s.Follow { stop := make(chan struct{}) a.ubFollowStop = stop + applog.Printf("ultrabeam: follow loop starting — covered bands %v, step %d kHz", s.Bands, s.StepKHz) go a.ultrabeamFollowLoop(a.motorAnt, s.StepKHz, s.Bands, stop) } if s.TXInhibit { @@ -14635,15 +14638,21 @@ func (a *App) ultrabeamFollowLoop(c motorAntenna, stepKHz int, bands []string, s // follow loop chases. If the antenna QSYs unexpectedly, this shows the // CAT backend started reporting that frequency (e.g. WSJT-X moved the // dial, or the active slice changed) even though you didn't touch the VFO. - if rigKHz != lastRigKHz { + newFreq := rigKHz != lastRigKHz + if newFreq { applog.Printf("ultrabeam: follow loop reads rig freq %.3f MHz (mode %s) — antenna at %d kHz, step %d kHz", float64(rs.FreqHz)/1e6, rs.Mode, st.Frequency, stepKHz) lastRigKHz = rigKHz } // Skip bands the antenna doesn't cover (per the operator's band list) — // no tune command, so the elements stay where they are on 80 m, an - // un-fitted 30 m, etc. + // un-fitted 30 m, etc. Log the decision once per QSY so "why did/didn't + // the antenna move" is answerable from the log. if !motorBandAllowed(bands, rs.FreqHz) { + if newFreq { + applog.Printf("ultrabeam: %.3f MHz is %q — not in covered bands %v; leaving the antenna put", + float64(rs.FreqHz)/1e6, bandForHz(rs.FreqHz), bands) + } continue } // Deadband reference = the rig freq we LAST commanded a move for, not the