[fix](trx-frontend-http): fix cw.js picker

Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-03 02:27:40 +01:00
parent 9bf579aaa0
commit 6f57813d36
@@ -39,13 +39,12 @@ function currentCwToneRange() {
if (toneMaxHz < toneMinHz) { if (toneMaxHz < toneMinHz) {
return null; return null;
} }
const rfLowHz = lowerSideband ? centerHz - toneMaxHz : centerHz + toneMinHz;
const rfHighHz = lowerSideband ? centerHz - toneMinHz : centerHz + toneMaxHz;
return { return {
lowHz: Math.min(rfLowHz, rfHighHz), lowHz: centerHz - halfBwHz,
highHz: Math.max(rfLowHz, rfHighHz), highHz: centerHz + halfBwHz,
centerHz, centerHz,
bandwidthHz, bandwidthHz,
halfBwHz,
toneMinHz, toneMinHz,
toneMaxHz, toneMaxHz,
lowerSideband, lowerSideband,
@@ -70,7 +69,7 @@ function drawCwTonePicker() {
} }
if (cwToneRangeEl) { if (cwToneRangeEl) {
cwToneRangeEl.textContent = `${range.toneMinHz} - ${range.toneMaxHz} Hz`; cwToneRangeEl.textContent = `${(range.bandwidthHz / 1000).toFixed(range.bandwidthHz >= 10_000 ? 0 : 1)} kHz span`;
} }
const bins = window.lastSpectrumData.bins; const bins = window.lastSpectrumData.bins;
@@ -101,10 +100,18 @@ function drawCwTonePicker() {
} }
const currentTone = clampCwTone(cwToneInput ? cwToneInput.value : 700); const currentTone = clampCwTone(cwToneInput ? cwToneInput.value : 700);
const markerFrac = (currentTone - range.toneMinHz) / Math.max(1, (range.toneMaxHz - range.toneMinHz)); const markerHz = range.lowerSideband
? range.centerHz - currentTone
: range.centerHz + currentTone;
const markerFrac = (markerHz - range.lowHz) / Math.max(1, (range.highHz - range.lowHz));
const markerX = Math.max(0, Math.min(width - 1, Math.round(markerFrac * (width - 1)))); const markerX = Math.max(0, Math.min(width - 1, Math.round(markerFrac * (width - 1))));
ctx.fillStyle = "rgba(255, 255, 255, 0.9)"; ctx.fillStyle = "rgba(255, 255, 255, 0.9)";
ctx.fillRect(markerX, 0, 2, height); ctx.fillRect(markerX, 0, 2, height);
const centerFrac = (range.centerHz - range.lowHz) / Math.max(1, (range.highHz - range.lowHz));
const centerX = Math.max(0, Math.min(width - 1, Math.round(centerFrac * (width - 1))));
ctx.fillStyle = "rgba(255, 255, 255, 0.22)";
ctx.fillRect(centerX, 0, 1, height);
} }
async function setCwTone(tone, { syncInput = true } = {}) { async function setCwTone(tone, { syncInput = true } = {}) {
@@ -152,7 +159,11 @@ if (cwToneCanvas) {
const range = currentCwToneRange(); const range = currentCwToneRange();
if (!range) return; if (!range) return;
const frac = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width)); const frac = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));
const tone = range.toneMinHz + frac * (range.toneMaxHz - range.toneMinHz); const rfHz = range.lowHz + frac * (range.highHz - range.lowHz);
const signedOffsetHz = range.lowerSideband
? range.centerHz - rfHz
: rfHz - range.centerHz;
const tone = Math.max(range.toneMinHz, Math.min(range.toneMaxHz, signedOffsetHz));
await setCwTone(tone); await setCwTone(tone);
}); });
} }