fix(motor-antenna): honor the configured tunable range for the Ultrabeam

The follow logic skips out-of-range frequencies only when it knows BOTH edges
of the antenna's range. The Ultrabeam path took those edges from the
controller's status frame, but an RCU-01 behind an RS232-to-Ethernet bridge
answers with the short frame that omits FreqMax → the guard saw FreqMax==0 and
disabled itself → OpsLog forwarded every rig frequency, so 80 m (un-tunable)
reached the controller, which clamped the elements down to its lowest band
(~30 m).

ubAdapter now carries the operator-configured FreqMin/FreqMax from Settings →
Antenna (like steppirAdapter already did) and uses them as a hard floor/ceiling,
falling back to the controller-reported bound only when one is left unset. This
guarantees both bounds are present so the guard actually engages. The Tunable
range editor in the Antenna panel, previously SteppIR-only, is now shown for the
Ultrabeam too, with a generic bilingual hint.
This commit is contained in:
2026-08-06 11:02:14 +02:00
parent 82ce3353c4
commit df56391eb8
4 changed files with 33 additions and 10 deletions
+3 -3
View File
@@ -3012,10 +3012,10 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan
</div>
)}
</div>
{isSteppir && (
{(isSteppir || ultrabeam.type === 'ultrabeam') && (
<div className="border-t border-border/60 pt-3 space-y-1">
<div className="flex items-center gap-2 flex-wrap">
<Label className="text-sm">{t('hw.steppirRange')}</Label>
<Label className="text-sm">{t('hw.motorRange')}</Label>
<input type="number" min={1} max={60} value={ultrabeam.freq_min_mhz}
onChange={(e) => setUltrabeam((s) => ({ ...s, freq_min_mhz: parseInt(e.target.value, 10) || 0 }))}
className="h-8 w-16 rounded-md border border-input bg-background px-2 text-sm" />
@@ -3025,7 +3025,7 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan
className="h-8 w-16 rounded-md border border-input bg-background px-2 text-sm" />
<span className="text-xs text-muted-foreground">MHz</span>
</div>
<p className="text-xs text-muted-foreground">{t('hw.steppirRangeHint')}</p>
<p className="text-xs text-muted-foreground">{t('hw.motorRangeHint')}</p>
</div>
)}
<div className="border-t border-border/60 pt-3 space-y-1">