122 lines
4.9 KiB
HTML
122 lines
4.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>MARTe2 UDP Streamer</title>
|
||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||
<link rel="stylesheet" href="/uPlot.min.css">
|
||
<link rel="stylesheet" href="/style.css">
|
||
<script src="/uPlot.iife.min.js"></script>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- ── Top bar ───────────────────────────────────────────────── -->
|
||
<div id="topbar">
|
||
<button id="btn-sidebar" class="ctrl-btn active" title="Toggle sidebar">☰</button>
|
||
<span id="app-title">MARTe2 UDP Streamer</span>
|
||
<div class="topbar-vsep"></div>
|
||
<button id="btn-layout" class="ctrl-btn layout-toggle" title="Select layout">⊞ 1×1 ▾</button>
|
||
<div class="topbar-sep"></div>
|
||
<div id="cursor-readout">
|
||
<span id="cur-ta">A: —</span><span class="cur-sep">│</span>
|
||
<span id="cur-tb">B: —</span><span class="cur-sep">│</span>
|
||
<span id="cur-dt">ΔT: —</span>
|
||
</div>
|
||
<span class="ctrl-label" id="lbl-window">Window:</span>
|
||
<select id="window-select" class="ctrl-select">
|
||
<option value="1">1 s</option><option value="5" selected>5 s</option>
|
||
<option value="10">10 s</option><option value="30">30 s</option>
|
||
<option value="60">60 s</option>
|
||
</select>
|
||
<button id="btn-cursor" class="ctrl-btn" style="display:none">Cursor</button>
|
||
<button id="btn-zoom-back" class="ctrl-btn" style="display:none">← Back</button>
|
||
<button id="btn-zoom-fit" class="ctrl-btn">Fit</button>
|
||
<button id="btn-csv-all" class="ctrl-btn" title="Export all signals to CSV">⬇ CSV</button>
|
||
<button id="btn-sync-resume" class="ctrl-btn resume-btn" style="display:none">↺ Auto</button>
|
||
<button id="btn-trigger" class="ctrl-btn">⚡ Trigger</button>
|
||
<button id="btn-pause-global" class="ctrl-btn">⏸ Pause</button>
|
||
</div>
|
||
|
||
<!-- ── Trigger bar ───────────────────────────────────────────── -->
|
||
<div id="trigbar">
|
||
<div class="trig-group">
|
||
<span class="trig-label">Signal</span>
|
||
<select id="trig-signal" class="trig-select"><option value="">— none —</option></select>
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group">
|
||
<span class="trig-label">Edge</span>
|
||
<select id="trig-edge" class="trig-select">
|
||
<option value="rising">Rising ↑</option>
|
||
<option value="falling">Falling ↓</option>
|
||
<option value="both">Both ↕</option>
|
||
</select>
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group">
|
||
<span class="trig-label">Threshold</span>
|
||
<input id="trig-threshold" class="trig-input" type="number" value="0" step="any">
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group">
|
||
<span class="trig-label">Window</span>
|
||
<select id="trig-window" class="trig-select">
|
||
<option value="0.0001">100 μs</option><option value="0.001">1 ms</option>
|
||
<option value="0.01">10 ms</option><option value="0.1">100 ms</option>
|
||
<option value="0.5">500 ms</option><option value="1" selected>1 s</option>
|
||
<option value="5">5 s</option><option value="10">10 s</option>
|
||
</select>
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group">
|
||
<span class="trig-label">Pre</span>
|
||
<input id="trig-pre" class="trig-range" type="range" min="0" max="100" value="20">
|
||
<span class="trig-range-val" id="trig-pre-val">20%</span>
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group">
|
||
<span class="trig-label">Mode</span>
|
||
<select id="trig-mode" class="trig-select">
|
||
<option value="normal">Normal</option>
|
||
<option value="single">Single</option>
|
||
</select>
|
||
</div>
|
||
<div class="trig-sep"></div>
|
||
<div class="trig-group" style="gap:8px">
|
||
<span id="trig-status-badge">IDLE</span>
|
||
<button id="btn-trig-stop" style="display:none">Stop</button>
|
||
<button id="btn-trig-rearm">Rearm</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ── Body ─────────────────────────────────────────────────── -->
|
||
<div id="body">
|
||
<div id="sidebar">
|
||
<div id="sidebar-header">Signals</div>
|
||
<div id="signal-list">
|
||
<div style="padding:20px 14px;color:var(--overlay0);font-size:12px;text-align:center;">
|
||
Waiting for streamer…
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="main">
|
||
<div id="plot-grid" class="l1x1"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ── Status bar ─────────────────────────────────────────────── -->
|
||
<div id="statusbar">
|
||
<div id="sb-left">
|
||
<div id="status-led"></div>
|
||
<span id="status-text">Disconnected</span>
|
||
<span id="sb-tsage"></span>
|
||
</div>
|
||
<span id="build-version"></span>
|
||
</div>
|
||
|
||
<div id="layout-menu"></div>
|
||
<script src="/app.js"></script>
|
||
</body>
|
||
</html>
|