From e8002a10ab5c806d3eefe073b4a96029fb21fad7 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Tue, 3 Mar 2026 02:16:07 +0100 Subject: [PATCH] [fix](trx-frontend): expose spectrum state to CW picker Mirror live spectrum, tuned frequency, and bandwidth state onto the window object so the CW tone picker can render from current spectrum data. Co-authored-by: Stan Grams Signed-off-by: Stan Grams --- .../trx-frontend/trx-frontend-http/assets/web/app.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js index 350f4d9..917ba01 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js @@ -355,6 +355,7 @@ function syncTopBarAccess() { let overviewDrawPending = false; let lastSpectrumData = null; +window.lastSpectrumData = null; let lastControl; let lastTxEn = null; let lastHasTx = true; @@ -368,6 +369,7 @@ let sigMeasureAccumMs = 0; let sigMeasureWeighted = 0; let sigMeasurePeak = null; let lastFreqHz = null; +window.lastFreqHz = null; let centerFreqDirty = false; let jogUnit = loadSetting("jogUnit", 1000); // base unit: 1, 1000, 1000000 let jogMult = loadSetting("jogMult", 1); // divisor: 1, 10, 100 @@ -1185,6 +1187,7 @@ function applyLocalTunedFrequency(hz, forceDisplay = false) { resetWfmStereoIndicator(); } lastFreqHz = hz; + window.lastFreqHz = lastFreqHz; updateDocumentTitle(lastSpectrumData?.rds ?? null); refreshWavelengthDisplay(lastFreqHz); if (forceDisplay) { @@ -2085,6 +2088,7 @@ function render(update) { // Sync filter state (SDR backends only) if (update.filter && typeof update.filter.bandwidth_hz === "number") { currentBandwidthHz = update.filter.bandwidth_hz; + window.currentBandwidthHz = currentBandwidthHz; syncBandwidthInput(currentBandwidthHz); if (window.refreshCwTonePicker) { window.refreshCwTonePicker(); @@ -2879,6 +2883,7 @@ function formatBwLabel(hz) { // Current receive bandwidth (Hz) — updated by server sync and BW drag. let currentBandwidthHz = 3_000; +window.currentBandwidthHz = currentBandwidthHz; const spectrumBwInput = document.getElementById("spectrum-bw-input"); const spectrumBwSetBtn = document.getElementById("spectrum-bw-set-btn"); const spectrumBwAutoBtn = document.getElementById("spectrum-bw-auto-btn"); @@ -2904,6 +2909,7 @@ function syncBandwidthInput(hz) { async function applyBwDefaultForMode(mode, sendToServer) { const [def] = mwDefaultsForMode(mode); currentBandwidthHz = def; + window.currentBandwidthHz = currentBandwidthHz; syncBandwidthInput(def); if (sendToServer) { try { await postPath(`/set_bandwidth?hz=${def}`); } catch (_) {} @@ -2921,6 +2927,7 @@ async function applyBandwidthFromInput() { } const clamped = Math.max(minBw, Math.min(maxBw, next)); currentBandwidthHz = clamped; + window.currentBandwidthHz = currentBandwidthHz; syncBandwidthInput(clamped); if (lastSpectrumData) scheduleSpectrumDraw(); try { @@ -2994,6 +3001,7 @@ async function applyAutoBandwidth() { return; } currentBandwidthHz = estimated; + window.currentBandwidthHz = currentBandwidthHz; syncBandwidthInput(estimated); if (lastSpectrumData) scheduleSpectrumDraw(); try { @@ -4964,6 +4972,7 @@ function startSpectrumStreaming() { } try { lastSpectrumData = JSON.parse(evt.data); + window.lastSpectrumData = lastSpectrumData; lastSpectrumRenderData = buildSpectrumRenderData(lastSpectrumData); settlePendingSpectrumFrameWaiters(lastSpectrumData); pushSpectrumPeakHoldFrame(lastSpectrumRenderData); @@ -5832,6 +5841,7 @@ if (spectrumCanvas) { const [, minBw, maxBw] = mwDefaultsForMode(modeEl ? modeEl.value : "USB"); newBw = Math.round(Math.max(minBw, Math.min(maxBw, newBw))); currentBandwidthHz = newBw; + window.currentBandwidthHz = currentBandwidthHz; syncBandwidthInput(newBw); scheduleSpectrumDraw(); scheduleOverviewDraw();