feat(station): drive the motorized antenna from its widget

It showed pattern, elements and Retract — everything except where the antenna
is pointed, which is the thing an operator changes most. Tuning it meant opening
Settings or moving the rig.

A button per band, taken from the bands configured in Settings rather than a
list invented here: a band dropped there cannot be clicked here. They point at
where people actually work, not the arithmetic centre — 20 m centres on 14175
and nobody lives there, 10 m spans 1.7 MHz of which the top half is empty.

Up and down move 25 kHz, which is also the finest tracking threshold: a smaller
nudge would be undone by the next poll while tracking is on. They work from the
ANTENNA's frequency, not the rig's, or walking the antenna across a band while
the rig stays put would be undone on the first press.

Tracking moved within reach because it is an operating decision — off to park
the antenna, on to resume — not something set up once. Its step only appears
when it is on: a threshold for something switched off is a question the operator
cannot act on.

MotorTuneKHz carries the CURRENT direction rather than resetting it. Both
controllers set frequency and pattern in one command, so a bare frequency would
silently drop a 180° or bidirectional pattern — a beam turning round is not an
acceptable side effect of clicking a band.
This commit is contained in:
2026-08-11 15:45:02 +02:00
parent 1ac00c101e
commit c4d90e6880
7 changed files with 203 additions and 6 deletions
+6
View File
@@ -3300,6 +3300,9 @@ export namespace main {
band: number;
moving: boolean;
elements: number[];
follow: boolean;
step_khz: number;
bands: string[];
static createFrom(source: any = {}) {
return new UltrabeamStatusInfo(source);
@@ -3315,6 +3318,9 @@ export namespace main {
this.band = source["band"];
this.moving = source["moving"];
this.elements = source["elements"];
this.follow = source["follow"];
this.step_khz = source["step_khz"];
this.bands = source["bands"];
}
}
export class UpdateInfo {