fix: clarify event handling in waveform viewer

This commit is contained in:
2026-04-06 00:00:06 -04:00
parent ecb1147216
commit dfa09d2a4f
3 changed files with 94 additions and 30 deletions
+31 -10
View File
@@ -240,6 +240,7 @@
let charts = {};
let lastData = null;
let unitInfo = null;
let eventList = []; // populated from /device/events after connect
let currentEventIndex = 0;
function setStatus(msg, cls = '') {
@@ -283,24 +284,45 @@
return;
}
// Populate unit bar
// Populate unit bar from /device/info
document.getElementById('u-serial').textContent = unitInfo.serial || '—';
document.getElementById('u-fw').textContent = unitInfo.firmware_version || '—';
const sr = unitInfo.compliance_config?.sample_rate;
document.getElementById('u-sr').textContent = sr ? `${sr} sps` : '—';
const count = unitInfo.event_count ?? 0;
document.getElementById('u-count').textContent = count;
// Build event chips
// Fetch real event list from /device/events — SUB 08 count is unreliable
setStatus('Fetching event list…', 'loading');
const eventsUrl = `${apiBase}/device/events?host=${encodeURIComponent(devHost)}&tcp_port=${tcpPort}`;
try {
const evResp = await fetch(eventsUrl);
if (!evResp.ok) {
const err = await evResp.json().catch(() => ({ detail: evResp.statusText }));
throw new Error(err.detail || evResp.statusText);
}
const evData = await evResp.json();
eventList = evData.events || [];
} catch (e) {
setStatus(`Error fetching events: ${e.message}`, 'error');
btn.disabled = false;
btn.textContent = 'Reconnect';
return;
}
const count = eventList.length;
document.getElementById('u-count').textContent = count;
// Build event chips with timestamps
const chipsEl = document.getElementById('event-chips');
chipsEl.innerHTML = '';
for (let i = 0; i < count; i++) {
eventList.forEach((ev, i) => {
const chip = document.createElement('button');
chip.className = 'event-chip' + (i === 0 ? ' active' : '');
chip.textContent = `Event ${i}`;
const label = ev.timestamp?.display ?? `Event ${ev.index}`;
chip.textContent = label;
chip.title = ev.record_type || '';
chip.onclick = () => selectEvent(i);
chipsEl.appendChild(chip);
}
});
document.getElementById('unit-bar').style.display = 'flex';
document.getElementById('load-btn').disabled = count === 0;
@@ -324,8 +346,7 @@
c.classList.toggle('active', i === idx);
});
document.getElementById('prev-btn').disabled = idx <= 0;
const count = unitInfo?.event_count ?? 0;
document.getElementById('next-btn').disabled = idx >= count - 1;
document.getElementById('next-btn').disabled = idx >= eventList.length - 1;
loadWaveform();
}
@@ -363,7 +384,7 @@
}
function stepEvent(delta) {
const count = unitInfo?.event_count ?? 0;
const count = eventList.length;
const next = Math.max(0, Math.min(count - 1, currentEventIndex + delta));
selectEvent(next);
}