feat: a typed watering hole carries its mode; Yaesu RTTY sideband

His log settles the 28.074 case: "SetCATFrequency 28.074 MHz" and the
state still reads mode=USB — nothing sent a mode, so the rig simply
stayed where it was. A spot click has always carried one; a frequency
typed by hand carried none. It now uses the same table and the same
tolerance as a spot (±3 kHz of a known FT8/FT4/JS8 frequency), and only
towards the digital modes: tuning AWAY from one leaves the mode alone,
because there the frequency says nothing about what the operator means.

RTTY on Yaesu is a choice the log cannot make: ADIF records "RTTY" and
the rig has MD06 (RTTY-L) and MD09 (RTTY-U). The older lower sideband
stays the default and a station whose FSK controller wants the upper one
says so once in Settings → CAT.
This commit is contained in:
2026-09-06 23:01:08 +02:00
parent 3745d23339
commit 9ce7cf3b69
8 changed files with 97 additions and 13 deletions
+24 -1
View File
@@ -5926,7 +5926,29 @@ export default function App() {
const mhz = parseFloat(mhzStr);
if (!Number.isFinite(mhz) || mhz < 0.1 || mhz > 3000) return;
noteManualEdit();
SetCATFrequency(Math.round(mhz * 1_000_000)).catch(() => {});
const hz = Math.round(mhz * 1_000_000);
SetCATFrequency(hz).catch(() => {});
tuneModeForWateringHole(hz);
};
// 28.074 IS FT8, and typing it says so.
//
// A spot click has always carried a mode; a frequency typed by hand carried
// none, so the rig stayed in whatever it was — an FTDX3000 landing on 28.074
// in USB while the operator waited for decodes. Nobody tunes a watering hole
// to listen to it in SSB, and this is the same table and the same tolerance a
// spot click is judged with (±3 kHz of a known digital frequency).
//
// Only when it actually changes something, and only towards the digital
// modes: tuning away from 28.074 leaves the mode alone, because there the
// frequency says nothing about what the operator means to do.
const tuneModeForWateringHole = (hz: number) => {
const m = inferDigitalMode(hz);
if (!m || m === mode) return;
setMode(m);
applyModePreset(m);
if (catState.enabled && catState.connected && !locks.mode) SetCATMode(m).catch(() => {});
ConfigureDecoderMode(m).catch(() => {});
};
// Carry out what was typed in the call field. Bands go through the ordinary
// band change, so the antennas, the power table and the outbound integrations
@@ -5944,6 +5966,7 @@ export default function App() {
const b = bandForMHz(hz / 1_000_000);
if (b) setBand(b);
if (catState.enabled && catState.connected) SetCATFrequency(hz).catch(() => {});
tuneModeForWateringHole(hz);
showToast((hz / 1_000_000).toFixed(3) + ' MHz');
};