fix: waveform decode improved for accuracy.

feat: adds 5a diagnostic script to parse raw binary
This commit is contained in:
2026-04-15 16:36:41 -04:00
parent 8bfebadd46
commit a46961c124
5 changed files with 1474 additions and 1100 deletions
+12 -39
View File
@@ -1555,6 +1555,14 @@ function _buildWaveformCharts(data, chartsEl, emptyEl, chartsStore) {
const sr = data.sample_rate || 1024;
const pretrig = data.pretrig_samples || 0;
const decoded = data.samples_decoded || 0;
// Clip display to total_samples (pretrig + post_trig from compliance config).
// The device bulk-streams zero-padded (0xFF = -1) frames beyond the configured
// record window; without clipping these appear as a flat line at ~0 in/s past
// the end of the actual recording. Confirmed 2026-04-15: a 36-frame 5A stream
// for a 3.25s event (total_samples=3328) contained 19 trailing all-0xFF frames
// (2457 extra samples) that caused a visible flat-line in the waveform display.
const total = (data.total_samples && data.total_samples > 0) ? data.total_samples : decoded;
const display = Math.min(decoded, total);
const channels = data.channels || {};
// Destroy old chart instances
@@ -1574,7 +1582,7 @@ function _buildWaveformCharts(data, chartsEl, emptyEl, chartsStore) {
return;
}
const times = Array.from({length: decoded}, (_, i) => ((i - pretrig) / sr * 1000).toFixed(2));
const times = Array.from({length: display}, (_, i) => ((i - pretrig) / sr * 1000).toFixed(2));
if (emptyEl) emptyEl.style.display = 'none';
chartsEl.style.display = 'flex';
chartsEl.style.flexDirection = 'column';
@@ -1584,8 +1592,8 @@ function _buildWaveformCharts(data, chartsEl, emptyEl, chartsStore) {
const micPeakPsi = data.peak_values?.micl_psi ?? null;
for (const [ch, color] of Object.entries(CHANNEL_COLORS)) {
const samples = channels[ch];
if (!samples || samples.length === 0) continue;
const samples = (channels[ch] || []).slice(0, display);
if (samples.length === 0) continue;
const isGeo = ch !== 'Mic';
let plotData, peakLabel, yUnit, ttFmt, tickFmt;
@@ -2118,39 +2126,4 @@ document.getElementById('api-base').value = window.location.origin;
</div>
<button onclick="closeWfModal()"
style="background:none; border:none; color:var(--text-dim); cursor:pointer;
font-size:20px; line-height:1; padding:0 2px; flex-shrink:0;"
title="Close (Esc)">×</button>
</div>
<!-- Peaks bar — reuses .peaks-bar styles from live Events tab -->
<div class="peaks-bar" id="wf-modal-peaks">
<div class="pk"><div class="pk-label">Tran</div><div class="pk-value pk-tran" id="wf-mpk-tran"></div></div>
<div class="pk"><div class="pk-label">Vert</div><div class="pk-value pk-vert" id="wf-mpk-vert"></div></div>
<div class="pk"><div class="pk-label">Long</div><div class="pk-value pk-long" id="wf-mpk-long"></div></div>
<div class="pk"><div class="pk-label">MicL</div><div class="pk-value pk-mic" id="wf-mpk-mic"></div></div>
<div class="pk"><div class="pk-label">PVS</div><div class="pk-value pk-pvs" id="wf-mpk-pvs"></div></div>
</div>
<!-- Debug panel (same as live debug panel, hidden by default) -->
<div id="wf-modal-debug"
style="display:none; background:#0d1117; border-bottom:1px solid #21262d;
padding:5px 16px; font-family:monospace; font-size:11px; color:#6e7681; line-height:1.8">
<span style="float:right; cursor:pointer; color:#484f58; text-decoration:underline"
onclick="document.getElementById('wf-modal-debug').style.display='none'">hide</span>
<div id="wf-modal-debug-content"></div>
</div>
<!-- Waveform area -->
<div style="flex:1; overflow-y:auto; min-height:200px;">
<div id="wf-modal-empty"
style="display:flex; flex-direction:column; align-items:center;
justify-content:center; padding:60px 20px; color:var(--text-dim); gap:12px;">
<p>Loading…</p>
</div>
<div id="wf-modal-charts" style="display:none;"></div>
</div>
</div>
</div>
</body>
</html>
font-si