[fix](trx-frontend-http): fix cw.js picker
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user