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
}
}
},