Use this prompt and method for live automation-bridge tests against a real radio. Replace every bracketed value; do not infer them from an earlier run.
Run a control-and-transmit sweep against
[RADIO MODEL]over the AetherSDR automation bridge. The dummy load is connected to[EXACT TX ANTENNA VALUE]. You are authorized to transmit up to[MAX PHYSICAL WATTS] Wat[FREQUENCY]in[MODE].Before keying, assert the exact live TX antenna, tuner bypass, frequency, mode, RF Power, and Tune Power. Treat an unreadable state as failure. Apply a conservative percentage ceiling and a separate measured-watt watchdog; a power-control percentage is not watts. Unkey immediately on over-limit power, missing/stale power telemetry, high SWR, timeout, disconnect, or any state disagreement.
Cover meters, control set/reply/external-change paths, a short TX window, and a complete AetherSDR restart. Verify actual visible widgets, not only models. Restore all non-transmitting state, confirm the radio is unkeyed, and leave the tuner bypassed if restoring its prior state would require RF.
All gates must pass before each keying stage:
- Explicit authorization names the radio, frequency/mode, exact dummy-load antenna value, and maximum physical watts.
dumpTreereports exactly that TX antenna. Empty, ambiguous, or different values abort the run.- The tuner already reports bypass.
atu bypassdoes not key, but changing a tuned state is not automatically reversible without a new RF tune cycle. - RF Power and Tune Power are both read and staged conservatively. Icom two-tone uses Tune Power; an ATU cycle may use backend/radio-specific drive.
AETHER_AUTOMATION_TX_MAX_POWERis treated only as a 0–100 control percentage ceiling. It is never reported as a watt limit.- A calibrated forward-power meter must produce a fresh sample promptly after key. Unkey on the first sample above the authorized watt limit. This is a reactive backstop and cannot prevent the first transient; use an external wattmeter/interlock when a transient would be unacceptable.
- Every exit path sends unkey and confirms tuning, MOX, model transmitting, and radio transmitting are false.
Do not run unattended TX certification on a backend with no calibrated live power meter unless an independent physical interlock enforces the watt limit.
- Confirm one automation instance and no competing radio session.
- Capture
whoami,liveness,health,controls map,controls meters, and the relevantdumpTreewidgets. - At idle, require the visible forward-power gauge to read zero. A retained backend sample is diagnostic history, not current power.
For each control:
- record the operator's original radio and UI value;
- drive the actual widget or semantic bridge verb;
- verify expected protocol bytes from the model's official guide;
- wait for the radio reply and verify model plus actual widget;
- change it externally at the radio or with a safe raw protocol command;
- allow two periodic-poll intervals and verify model plus widget again; and
- restore the original value when restoration does not transmit.
For Icom 0000–0255 percentage levels, independently calculate:
write raw = ceil(percent * 255 / 100)
read percent = floor(raw * 100 / 255)
Do not use that formula for 15 xx meters; use the model-specific published
calibration curve. CI-V Transceive is helpful but is not accepted as the only
subscription path.
- Begin with the lowest authorized Tune Power percentage.
- Sample forward power, SWR, ALC, compression, voltage, current, and thermal data that the radio actually supports. Mark unsupported meters as such.
- Reject stale ages and rail-pinned values. Do not substitute scalar defaults for unsupported temperature or voltage. Report ALC in its declared native unit.
- Start the freshness deadline at the key command, including command latency. A sample predating that command cannot qualify as this burst's telemetry.
- In CW, a zero-carrier gap deliberately nulls the displayed SWR. It can continue only after a qualified SWR was observed in this burst, with fresh zero-watt power and fresh SWR receive timestamps. Missing/stale telemetry and a missing ratio with positive power still stop the run; the timing budgets are unchanged.
- Icom's current TUNE producer is a single sine wave.
txtest twotonerefuses that family; do not record ordinary TUNE output as two-tone or IMD proof. - Verify the actual power gauge is live only while keyed.
- Unkey immediately, then verify the gauge is zero both at the edge and after a late in-flight response could arrive.
Use the guarded harness:
python3 tools/tx_meter_test.py \
--serial RADIO_SERIAL --ant ANT1 --frequency 14.2 --mode USB \
--max-watts 10 \
--levels 2,5--levels and --two-tone-percent are Tune Power control settings, not measured
watts. --max-control bounds both RF and Tune controls (default 5). Each burst
rechecks the exact radio, TX slice, antenna, frequency, mode, offsets, VOX and
bypass state. The sampling window repeats the context check and uses fresh
unsmoothed fwdPowerInstant for the watt cutoff; it records peak watts,
peak SWR and every sampled meter row. Missing/unknown link state, a missing or
stale calibrated power definition, and missing/stale SWR stop the run. Unkey
is confirmed before restoring power; unknown TX flags never count as unkeyed.
For Icom, model flags alone are insufficient: the harness additionally requires
stateFreshness.fields.ptt to report a confirmed false value received during
that unkey observation window and younger than 500 ms. Older app builds without
this diagnostic cannot satisfy that Icom confirmation gate.
Close AetherSDR completely and repeat the baseline with a fresh process. Verify distinctive safe values are adopted from the radio rather than replayed from client defaults. Repeat one external-change/poll test. A same-process disconnect/reconnect is useful but does not replace an application restart.
Report a table with one row per control/meter and separate columns for:
- set path;
- protocol value;
- same-session radio reply;
- visible widget;
- external-change convergence;
- post-restart adoption; and
- restoration.
Report peak measured watts, SWR, telemetry freshness, abort reason, and final unkey state. Never call a percentage setting “watts.”