diff --git a/routes/dmr.py b/routes/dmr.py index 634bf06..f02a644 100644 --- a/routes/dmr.py +++ b/routes/dmr.py @@ -97,6 +97,13 @@ def parse_dsd_output(line: str) -> dict | None: if not line: return None + # Skip DSD/dsd-fme startup banner lines (ASCII art, version info, etc.) + # These contain box-drawing characters or are pure decoration. + if re.search(r'[╔╗╚╝║═██▀▄╗╝╩╦╠╣╬│┤├┘└┐┌─┼█▓▒░]', line): + return None + if re.match(r'^\s*(Build Version|MBElib|CODEC2|Audio (Out|In)|Decoding )', line): + return None + ts = datetime.now().strftime('%H:%M:%S') # Sync detection: "Sync: +DMR (data)" or "Sync: +P25 Phase 1" diff --git a/static/js/modes/dmr.js b/static/js/modes/dmr.js index 924609e..447afaa 100644 --- a/static/js/modes/dmr.js +++ b/static/js/modes/dmr.js @@ -193,9 +193,7 @@ function handleDmrMessage(msg) { } else if (msg.type === 'slot') { // Update slot info in current call } else if (msg.type === 'raw') { - // Raw DSD output — update last line display for diagnostics - const rawEl = document.getElementById('dmrRawOutput'); - if (rawEl) rawEl.textContent = msg.text || ''; + // Raw DSD output — triggers synthesizer activity via dmrSynthPulse } else if (msg.type === 'heartbeat') { // Decoder is alive and listening — keep synthesizer in listening state if (isDmrRunning && dmrSynthInitialized) { @@ -222,8 +220,6 @@ function handleDmrMessage(msg) { if (typeof showNotification === 'function') { showNotification('DMR Error', detail); } - const rawEl = document.getElementById('dmrRawOutput'); - if (rawEl) rawEl.textContent = detail; } else if (msg.text === 'stopped') { isDmrRunning = false; updateDmrUI(); diff --git a/templates/index.html b/templates/index.html index 6d51262..661dc9c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1623,7 +1623,6 @@ IDLE -