From 23685277f5e483081fd43feed554c8858b529a5f Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sun, 20 Apr 2025 16:55:13 +1000 Subject: [PATCH 1/5] fix signal graph dBm value --- web/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/js/main.js b/web/js/main.js index aca6157..8e93d70 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -534,7 +534,7 @@ function initCanvas() { let adjustedTickValue; switch(localStorage.getItem("signalUnit")) { case "dbuv": adjustedTickValue = tick.value - 11.25; break; - case "dbm": adjustedTickValue = tick.value - -120; break; + case "dbm": adjustedTickValue = tick.value - 120; break; default: adjustedTickValue = tick.value; break; } From bacd2970d7617536e87b15f63bb4f81ffa97de03 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sun, 20 Apr 2025 16:57:24 +1000 Subject: [PATCH 2/5] fix TP TA M/S updates on frequency change --- web/js/main.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/js/main.js b/web/js/main.js index 8e93d70..de3b2f4 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -972,7 +972,6 @@ const updateDataElements = throttle(function(parsedData) { } updateHtmlIfChanged($('#data-regular-pi'), parsedData.txInfo.reg === true ? parsedData.txInfo.pi : ' '); - updateCounter++; if (updateCounter % 8 === 0) { $dataTp.html(parsedData.tp === 0 ? "TP" : "TP"); $dataTa.html(parsedData.ta === 0 ? "TA" : "TA"); @@ -996,7 +995,7 @@ const updateDataElements = throttle(function(parsedData) { let isEventListenerAdded = false; function updatePanels(parsedData) { - updateCounter++; + updateCounter = (updateCounter % 10000) + 1; // Count to 10000 then reset back to 1 signalData.push(parsedData.sig); if (signalData.length > 8) { From e92395cceea0aad5e8afe65a8fa999b1f9b1ea00 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sun, 20 Apr 2025 17:00:07 +1000 Subject: [PATCH 3/5] remove mobile tooltip after 5 seconds (previous behaviour) --- web/js/main.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web/js/main.js b/web/js/main.js index de3b2f4..db5b5ec 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -1168,6 +1168,11 @@ function initTooltips(target = null) { // Apply positioning tooltipEl.css({ top: posY, left: posX, opacity: 1 }); + + // For touchscreen devices + if ((/Mobi|Android|iPhone|iPad|iPod|Opera Mini/i.test(navigator.userAgent)) && ('ontouchstart' in window || navigator.maxTouchPoints)) { + setTimeout(() => { $('.tooltiptext').remove(); }, 5000); + } }, 300)); }, function () { From 67664d698407652ced1cb48548d623ed3fb771e0 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:23:03 +1000 Subject: [PATCH 4/5] fix android audio stutter running in background --- web/js/main.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/web/js/main.js b/web/js/main.js index db5b5ec..7612c10 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -461,6 +461,7 @@ function initCanvas() { delay: 150, onRefresh: (chart) => { if (!chart?.data?.datasets || parsedData?.sig === undefined) return; + if ((isAndroid || isIOS || isIPadOS) && (document.hidden || !document.hasFocus())) return; signalBuffer.push(parsedData.sig); if (signalBuffer.length > 8) { @@ -573,6 +574,21 @@ function initCanvas() { }); } +function setRefreshRate(rate) { + const rt = signalChart.options.scales.x.realtime; + rt.refresh = rate; + signalChart.update('none'); + console.log(`Graph refresh rate set to ${rate} ms`); +} + +window.addEventListener("focus", () => { + if (isAndroid || isIOS || isIPadOS) setRefreshRate(75); +}); + +window.addEventListener("blur", () => { + if (isAndroid || isIOS || isIPadOS) setRefreshRate(3000); +}); + let reconnectTimer = null; let dataTimeout = null; let dataTimeoutPrevious = null; From 2ae4e0d5bdd890aa2fd07335766f2652abeb9bd7 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:49:29 +1000 Subject: [PATCH 5/5] further optimise graph cpu usage --- web/js/main.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/web/js/main.js b/web/js/main.js index 7612c10..8be0f84 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -444,6 +444,7 @@ function initCanvas() { bottom: -10 }, }, + animation: false, responsive: true, maintainAspectRatio: false, elements: { @@ -459,20 +460,23 @@ function initCanvas() { duration: 30000, refresh: 75, delay: 150, + frameRate: 30, // default is 30 onRefresh: (chart) => { if (!chart?.data?.datasets || parsedData?.sig === undefined) return; if ((isAndroid || isIOS || isIPadOS) && (document.hidden || !document.hasFocus())) return; - signalBuffer.push(parsedData.sig); - if (signalBuffer.length > 8) { - signalBuffer.shift(); - } + const sig = parsedData.sig; + if (signalBuffer.length > 0 && signalBuffer[signalBuffer.length - 1] === sig) return; // skip if data hasn't changed + + signalBuffer.push(sig); + if (signalBuffer.length > 8) signalBuffer.shift(); + const avgSignal = signalBuffer.reduce((sum, val) => sum + val, 0) / signalBuffer.length; - chart.data.datasets[0].data.push({ - x: Date.now(), - y: avgSignal - }); + const dataset = chart.data.datasets[0].data; + dataset.push({ x: Date.now(), y: avgSignal }); + + if (dataset.length > 400) dataset.shift(); // duration / refresh } } },