|
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>SDR Spectrum + Waterfall</title>
- <link rel="stylesheet" href="style.css" />
- </head>
- <body>
- <header>
- <div class="title">SDRplay RSP1b Visualizer</div>
- <div class="meta" id="meta"></div>
- </header>
- <main>
- <section class="panel controls-panel">
- <div class="panel-header">
- <div>Radio Controls</div>
- <div class="panel-subtitle" id="configStatus">Loading...</div>
- </div>
- <div class="controls-grid">
- <label class="control-label" for="centerInput">Center (MHz)</label>
- <div class="control-row">
- <input id="centerInput" type="number" step="0.001" min="0" />
- <div class="preset-row">
- <button class="preset-btn" data-center="7.1">40m</button>
- <button class="preset-btn" data-center="14.1">20m</button>
- <button class="preset-btn" data-center="18.1">17m</button>
- </div>
- </div>
-
- <label class="control-label" for="spanInput">Span (MHz)</label>
- <div class="control-row">
- <input id="spanInput" type="number" step="0.05" min="0.05" />
- </div>
-
- <label class="control-label" for="sampleRateSelect">Sample Rate (MHz)</label>
- <div class="control-row">
- <select id="sampleRateSelect">
- <option value="0.5">0.5</option>
- <option value="1.0">1.0</option>
- <option value="1.536">1.536</option>
- <option value="2.048">2.048</option>
- <option value="2.5">2.5</option>
- <option value="3.072">3.072</option>
- <option value="4.096">4.096</option>
- </select>
- </div>
-
- <label class="control-label" for="fftSelect">FFT Size</label>
- <div class="control-row">
- <select id="fftSelect">
- <option value="512">512</option>
- <option value="1024">1024</option>
- <option value="2048">2048</option>
- <option value="4096">4096</option>
- <option value="8192">8192</option>
- <option value="16384">16384</option>
- <option value="32768">32768</option>
- <option value="65536">65536</option>
- </select>
- </div>
-
- <label class="control-label" for="gainRange">Gain (dB)</label>
- <div class="control-row">
- <input id="gainRange" type="range" min="0" max="60" step="1" />
- <input id="gainInput" type="number" min="0" max="60" step="1" />
- </div>
-
- <label class="control-label" for="thresholdRange">Detector (dB)</label>
- <div class="control-row">
- <input id="thresholdRange" type="range" min="-120" max="0" step="1" />
- <input id="thresholdInput" type="number" min="-120" max="0" step="1" />
- </div>
-
- <label class="control-label">DSP</label>
- <div class="toggle-row">
- <label class="toggle">
- <input id="agcToggle" type="checkbox" />
- <span>AGC</span>
- </label>
- <label class="toggle">
- <input id="dcToggle" type="checkbox" />
- <span>DC Block</span>
- </label>
- <label class="toggle">
- <input id="iqToggle" type="checkbox" />
- <span>IQ Balance</span>
- </label>
- </div>
- </div>
- </section>
- <section class="panel spectrum-panel">
- <canvas id="spectrum"></canvas>
- </section>
- <section class="panel waterfall-panel">
- <canvas id="waterfall"></canvas>
- </section>
- <section class="panel timeline-panel">
- <div class="panel-header">
- <div>Event Timeline</div>
- <div class="panel-subtitle" id="timelineRange">Waiting for events...</div>
- </div>
- <canvas id="timeline"></canvas>
- </section>
- </main>
- <aside class="drawer" id="eventDrawer" aria-hidden="true">
- <div class="drawer-header">
- <div>Event Detail</div>
- <button class="drawer-close" id="drawerClose" type="button">Close</button>
- </div>
- <div class="drawer-body">
- <div class="detail-grid">
- <div class="detail-label">Center</div>
- <div id="detailCenter">-</div>
- <div class="detail-label">Bandwidth</div>
- <div id="detailBw">-</div>
- <div class="detail-label">Start</div>
- <div id="detailStart">-</div>
- <div class="detail-label">End</div>
- <div id="detailEnd">-</div>
- <div class="detail-label">SNR</div>
- <div id="detailSnr">-</div>
- <div class="detail-label">Duration</div>
- <div id="detailDur">-</div>
- </div>
- <div class="detail-section-title">Latest Spectrogram Slice</div>
- <canvas id="detailSpectrogram"></canvas>
- <div class="detail-section-title">Recorded Clips (placeholder)</div>
- <div class="clips-empty">No clips recorded yet.</div>
- </div>
- </aside>
- <footer>
- <div id="status">Connecting...</div>
- </footer>
- <script src="app.js"></script>
- </body>
- </html>
|