[feat](trx-frontend-http): auto-enable aprs and cw decode
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
@@ -70,6 +70,8 @@ let supportedModes = [];
|
|||||||
let supportedBands = [];
|
let supportedBands = [];
|
||||||
let freqDirty = false;
|
let freqDirty = false;
|
||||||
let modeDirty = false;
|
let modeDirty = false;
|
||||||
|
let aprsAutoToggleInFlight = false;
|
||||||
|
let cwAutoToggleInFlight = false;
|
||||||
let initialized = false;
|
let initialized = false;
|
||||||
let lastEventAt = Date.now();
|
let lastEventAt = Date.now();
|
||||||
let es;
|
let es;
|
||||||
@@ -245,6 +247,24 @@ function render(update) {
|
|||||||
const mode = normalizeMode(update.status.mode);
|
const mode = normalizeMode(update.status.mode);
|
||||||
modeEl.value = mode ? mode.toUpperCase() : "";
|
modeEl.value = mode ? mode.toUpperCase() : "";
|
||||||
}
|
}
|
||||||
|
const currentMode = update.status && update.status.mode ? normalizeMode(update.status.mode) : "";
|
||||||
|
const modeUpper = currentMode ? currentMode.toUpperCase() : "";
|
||||||
|
const aprsDesired = modeUpper === "PKT";
|
||||||
|
const cwDesired = modeUpper === "CW" || modeUpper === "CWR";
|
||||||
|
const aprsEnabled = !!update.aprs_decode_enabled;
|
||||||
|
const cwEnabled = !!update.cw_decode_enabled;
|
||||||
|
if (aprsDesired !== aprsEnabled && !aprsAutoToggleInFlight) {
|
||||||
|
aprsAutoToggleInFlight = true;
|
||||||
|
postPath("/toggle_aprs_decode")
|
||||||
|
.catch((e) => console.error("APRS auto-toggle failed", e))
|
||||||
|
.finally(() => { aprsAutoToggleInFlight = false; });
|
||||||
|
}
|
||||||
|
if (cwDesired !== cwEnabled && !cwAutoToggleInFlight) {
|
||||||
|
cwAutoToggleInFlight = true;
|
||||||
|
postPath("/toggle_cw_decode")
|
||||||
|
.catch((e) => console.error("CW auto-toggle failed", e))
|
||||||
|
.finally(() => { cwAutoToggleInFlight = false; });
|
||||||
|
}
|
||||||
if (update.status && typeof update.status.tx_en === "boolean") {
|
if (update.status && typeof update.status.tx_en === "boolean") {
|
||||||
lastTxEn = update.status.tx_en;
|
lastTxEn = update.status.tx_en;
|
||||||
pttBtn.textContent = update.status.tx_en ? "PTT On" : "PTT Off";
|
pttBtn.textContent = update.status.tx_en ? "PTT On" : "PTT Off";
|
||||||
@@ -362,24 +382,6 @@ function render(update) {
|
|||||||
if (typeof update.clients === "number") {
|
if (typeof update.clients === "number") {
|
||||||
document.getElementById("about-clients").textContent = update.clients;
|
document.getElementById("about-clients").textContent = update.clients;
|
||||||
}
|
}
|
||||||
// Decoder toggle buttons
|
|
||||||
const aprsToggleBtn = document.getElementById("aprs-decode-toggle-btn");
|
|
||||||
const cwToggleBtn = document.getElementById("cw-decode-toggle-btn");
|
|
||||||
if (aprsToggleBtn) {
|
|
||||||
const aprsOn = !!update.aprs_decode_enabled;
|
|
||||||
aprsToggleBtn.textContent = aprsOn ? "Disable APRS" : "Enable APRS";
|
|
||||||
aprsToggleBtn.style.borderColor = aprsOn ? "#00d17f" : "";
|
|
||||||
aprsToggleBtn.style.color = aprsOn ? "#00d17f" : "";
|
|
||||||
window.aprsDecodeEnabled = aprsOn;
|
|
||||||
}
|
|
||||||
if (cwToggleBtn) {
|
|
||||||
const cwOn = !!update.cw_decode_enabled;
|
|
||||||
cwToggleBtn.textContent = cwOn ? "Disable CW" : "Enable CW";
|
|
||||||
cwToggleBtn.style.borderColor = cwOn ? "#00d17f" : "";
|
|
||||||
cwToggleBtn.style.color = cwOn ? "#00d17f" : "";
|
|
||||||
window.cwDecodeEnabled = cwOn;
|
|
||||||
}
|
|
||||||
|
|
||||||
powerHint.textContent = readyText();
|
powerHint.textContent = readyText();
|
||||||
lastLocked = update.status && update.status.lock === true;
|
lastLocked = update.status && update.status.lock === true;
|
||||||
lockBtn.textContent = lastLocked ? "Unlock" : "Lock";
|
lockBtn.textContent = lastLocked ? "Unlock" : "Lock";
|
||||||
|
|||||||
@@ -145,7 +145,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="subtab-aprs" class="sub-tab-panel" style="display:none;">
|
<div id="subtab-aprs" class="sub-tab-panel" style="display:none;">
|
||||||
<div class="aprs-controls">
|
<div class="aprs-controls">
|
||||||
<button id="aprs-decode-toggle-btn" type="button">Enable APRS</button>
|
|
||||||
<button id="aprs-clear-btn" type="button">Clear</button>
|
<button id="aprs-clear-btn" type="button">Clear</button>
|
||||||
<small id="aprs-status" style="color:var(--text-muted);">Waiting for server decode</small>
|
<small id="aprs-status" style="color:var(--text-muted);">Waiting for server decode</small>
|
||||||
</div>
|
</div>
|
||||||
@@ -153,7 +152,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="subtab-cw" class="sub-tab-panel" style="display:none;">
|
<div id="subtab-cw" class="sub-tab-panel" style="display:none;">
|
||||||
<div class="cw-controls">
|
<div class="cw-controls">
|
||||||
<button id="cw-decode-toggle-btn" type="button">Enable CW</button>
|
|
||||||
<button id="cw-clear-btn" type="button">Clear</button>
|
<button id="cw-clear-btn" type="button">Clear</button>
|
||||||
<small id="cw-status" style="color:var(--text-muted);">Waiting for server decode</small>
|
<small id="cw-status" style="color:var(--text-muted);">Waiting for server decode</small>
|
||||||
<div id="cw-signal-indicator" class="cw-signal-off"></div>
|
<div id="cw-signal-indicator" class="cw-signal-off"></div>
|
||||||
|
|||||||
@@ -72,10 +72,6 @@ function addAprsPacket(pkt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("aprs-decode-toggle-btn").addEventListener("click", async () => {
|
|
||||||
try { await postPath("/toggle_aprs_decode"); } catch (e) { console.error("APRS toggle failed", e); }
|
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById("aprs-clear-btn").addEventListener("click", async () => {
|
document.getElementById("aprs-clear-btn").addEventListener("click", async () => {
|
||||||
aprsPacketsEl.innerHTML = "";
|
aprsPacketsEl.innerHTML = "";
|
||||||
aprsPacketHistory = [];
|
aprsPacketHistory = [];
|
||||||
|
|||||||
@@ -6,10 +6,6 @@ const cwToneInput = document.getElementById("cw-tone");
|
|||||||
const cwSignalIndicator = document.getElementById("cw-signal-indicator");
|
const cwSignalIndicator = document.getElementById("cw-signal-indicator");
|
||||||
const CW_MAX_LINES = 200;
|
const CW_MAX_LINES = 200;
|
||||||
|
|
||||||
document.getElementById("cw-decode-toggle-btn").addEventListener("click", async () => {
|
|
||||||
try { await postPath("/toggle_cw_decode"); } catch (e) { console.error("CW toggle failed", e); }
|
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById("cw-clear-btn").addEventListener("click", async () => {
|
document.getElementById("cw-clear-btn").addEventListener("click", async () => {
|
||||||
cwOutputEl.innerHTML = "";
|
cwOutputEl.innerHTML = "";
|
||||||
try { await postPath("/clear_cw_decode"); } catch (e) { console.error("CW clear failed", e); }
|
try { await postPath("/clear_cw_decode"); } catch (e) { console.error("CW clear failed", e); }
|
||||||
|
|||||||
Reference in New Issue
Block a user