feat: FlexRadio TX power per band and mode class
Settings → FlexRadio, beside the per-band antennas and applied the same way: when the band or the mode changes. 1.5 kW that is fine on SSB has no business going into an FT8 signal on the same band. Three classes rather than one row per mode, because what decides the power is duty cycle and what the amplifier will take of it, not the mode's name — FT8 and RTTY punish an amplifier the same way, SSB and AM do not. The classification is pinned by a test: a digital mode sorted as phone would deliver exactly the 1.5 kW this exists to prevent. An empty box means "leave the power alone", never zero watts, and an unknown mode changes nothing — setting a transmit power from a name we do not recognise is not a good guess. Unlike the antennas, a locked band does not skip it: the lock means "do not let the rig drag my log entry around", not "let the amplifier keep whatever the last mode left".
This commit is contained in:
+20
-1
@@ -17,7 +17,7 @@ import {
|
||||
SMTPConfigured, SendLogToDeveloper,
|
||||
WorkedBefore,
|
||||
SetCompactMode,
|
||||
GetCATState, SetCATFrequency, SetCATMode, SwitchCATRig, FlexApplyBandAntenna,
|
||||
GetCATState, SetCATFrequency, SetCATMode, SwitchCATRig, FlexApplyBandAntenna, FlexApplyBandPower,
|
||||
GetSecretStatus, UnlockSecrets,
|
||||
RefreshCtyDat, DownloadAllReferenceLists,
|
||||
RotatorGoTo, RotatorStop, GetRotatorHeading,
|
||||
@@ -2304,6 +2304,25 @@ export default function App() {
|
||||
FlexApplyBandAntenna(b).catch(() => {});
|
||||
}, [band, catState.backend, locks.band]);
|
||||
|
||||
// Per-band, per-mode TX power. Applied on band AND mode changes — the point is
|
||||
// that moving to FT8 on a band where full power is fine for SSB does not put
|
||||
// full power into a 100% duty-cycle signal.
|
||||
//
|
||||
// Not skipped on a locked band, unlike the antennas: the lock means "do not
|
||||
// let the rig drag my log entry around", not "let the amplifier take whatever
|
||||
// the last mode left it at".
|
||||
const lastPwrRef = useRef('');
|
||||
useEffect(() => {
|
||||
if (catState.backend !== 'flex') return;
|
||||
const b = band.trim();
|
||||
const m = mode.trim();
|
||||
if (!b || !m) return;
|
||||
const key = b + '/' + m;
|
||||
if (key === lastPwrRef.current) return;
|
||||
lastPwrRef.current = key;
|
||||
FlexApplyBandPower(b, m).catch(() => {});
|
||||
}, [band, mode, catState.backend]);
|
||||
|
||||
// Cluster live wiring: hydrate per-server status + saved server list,
|
||||
// then subscribe to push events.
|
||||
async function reloadClusterMeta() {
|
||||
|
||||
Reference in New Issue
Block a user