From 2fb4a4d0cec51aa3e5681bce9532125b370a569f Mon Sep 17 00:00:00 2001 From: rouggy Date: Fri, 28 Aug 2026 23:21:17 +0200 Subject: [PATCH] =?UTF-8?q?fix(spot):=20in=20split,=20pre-fill=20the=20RX?= =?UTF-8?q?=20frequency=20=E2=80=94=20where=20the=20station=20is?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Send-spot dialog took catState.freq_hz, which is the TX frequency. Working a DXpedition split, that is where WE transmit: the spot went out five up from the DX, pointing the whole cluster at the pile-up instead of the station. The RX frequency is where we listen — where the DX is — and is what a spot names. --- changelog.json | 6 ++++-- frontend/src/App.tsx | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/changelog.json b/changelog.json index f32cdf2..358b4b6 100644 --- a/changelog.json +++ b/changelog.json @@ -3,10 +3,12 @@ "version": "0.26.24", "date": "", "en": [ - "TCI (SunSDR): the meter subscription is renewed when the radio announces it is ready — sent only at connect, it could fall inside the initial state dump and be ignored, which left the transmit power and SWR empty. The log now also records the subscription and the first sensor frames, so a report can tell “the radio never sends them” from “they arrived and were dropped”." + "TCI (SunSDR): the meter subscription is renewed when the radio announces it is ready — sent only at connect, it could fall inside the initial state dump and be ignored, which left the transmit power and SWR empty. The log now also records the subscription and the first sensor frames, so a report can tell “the radio never sends them” from “they arrived and were dropped”.", + "Sending a spot while in split now pre-fills the RX frequency — where the station actually is — instead of the TX frequency, which spotted the pile-up five up from the DX." ], "fr": [ - "TCI (SunSDR) : l'abonnement aux mesures est renouvelé quand la radio annonce qu'elle est prête — envoyé seulement à la connexion, il pouvait tomber pendant l'envoi initial de l'état et être ignoré, laissant la puissance et le ROS vides en émission. Le journal enregistre aussi l'abonnement et les premières trames de mesure, pour distinguer « la radio ne les envoie jamais » de « elles arrivaient et étaient perdues »." + "TCI (SunSDR) : l'abonnement aux mesures est renouvelé quand la radio annonce qu'elle est prête — envoyé seulement à la connexion, il pouvait tomber pendant l'envoi initial de l'état et être ignoré, laissant la puissance et le ROS vides en émission. Le journal enregistre aussi l'abonnement et les premières trames de mesure, pour distinguer « la radio ne les envoie jamais » de « elles arrivaient et étaient perdues ».", + "Envoyer un spot en split préremplit désormais la fréquence RX — là où la station se trouve réellement — au lieu de la fréquence TX, qui spottait le pile-up cinq au-dessus du DX." ] }, { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 6ca9867..2e19e84 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8652,9 +8652,14 @@ export default function App() { // freqMhz display string, which the manual-edit freeze / field locks can // leave stale (that dropped the sub-kHz: on 14134.5 the frozen "14.134" // string spotted 14134). Fall back to the entry field, then the last QSO. + // + // The RX frequency when split, deliberately: a spot names where the + // STATION is, and in split that is where we listen — freq_hz is where + // we transmit, and spotting a 5-up pile-up's TX frequency sent the + // whole cluster five kHz above the DX. defaultFreqKHz={ - catState.connected && (catState.freq_hz ?? 0) > 0 - ? Math.round(((catState.freq_hz ?? 0) / 1000) * 10) / 10 + catState.connected && ((catState.split && (catState.freq_rx_hz ?? 0) > 0 ? catState.freq_rx_hz : catState.freq_hz) ?? 0) > 0 + ? Math.round((((catState.split && (catState.freq_rx_hz ?? 0) > 0 ? catState.freq_rx_hz : catState.freq_hz) ?? 0) / 1000) * 10) / 10 : parseFloat(freqMhz) > 0 ? Math.round(parseFloat(freqMhz) * 1000 * 10) / 10 : (qsos[0]?.freq_hz ? Math.round((qsos[0].freq_hz / 1000) * 10) / 10 : 0)