Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

173 строки
6.3KB

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <title>SDR Spectrum + Waterfall</title>
  7. <link rel="stylesheet" href="style.css" />
  8. </head>
  9. <body>
  10. <header>
  11. <div class="title">SDRplay RSP1b Visualizer</div>
  12. <div class="meta" id="meta"></div>
  13. </header>
  14. <main>
  15. <section class="panel controls-panel">
  16. <div class="panel-header">
  17. <div>Radio Controls</div>
  18. <div class="panel-subtitle" id="configStatus">Loading...</div>
  19. </div>
  20. <div class="controls-grid">
  21. <label class="control-label" for="centerInput">Center (MHz)</label>
  22. <div class="control-row">
  23. <input id="centerInput" type="number" step="0.001" min="0" />
  24. <div class="preset-row">
  25. <button class="preset-btn" data-center="7.1">40m</button>
  26. <button class="preset-btn" data-center="14.1">20m</button>
  27. <button class="preset-btn" data-center="18.1">17m</button>
  28. </div>
  29. </div>
  30. <label class="control-label" for="spanInput">Span (MHz)</label>
  31. <div class="control-row">
  32. <input id="spanInput" type="number" step="0.05" min="0.05" />
  33. </div>
  34. <label class="control-label" for="sampleRateSelect">Sample Rate (MHz)</label>
  35. <div class="control-row">
  36. <select id="sampleRateSelect">
  37. <option value="0.5">0.5</option>
  38. <option value="1.0">1.0</option>
  39. <option value="1.536">1.536</option>
  40. <option value="2.048">2.048</option>
  41. <option value="2.5">2.5</option>
  42. <option value="3.072">3.072</option>
  43. <option value="4.096">4.096</option>
  44. </select>
  45. </div>
  46. <label class="control-label" for="bwSelect">Tuner BW (kHz)</label>
  47. <div class="control-row">
  48. <select id="bwSelect">
  49. <option value="200">200</option>
  50. <option value="300">300</option>
  51. <option value="600">600</option>
  52. <option value="1536">1536</option>
  53. <option value="5000">5000</option>
  54. <option value="6000">6000</option>
  55. <option value="7000">7000</option>
  56. <option value="8000">8000</option>
  57. </select>
  58. </div>
  59. <label class="control-label" for="fftSelect">FFT Size</label>
  60. <div class="control-row">
  61. <select id="fftSelect">
  62. <option value="512">512</option>
  63. <option value="1024">1024</option>
  64. <option value="2048">2048</option>
  65. <option value="4096">4096</option>
  66. <option value="8192">8192</option>
  67. <option value="16384">16384</option>
  68. <option value="32768">32768</option>
  69. <option value="65536">65536</option>
  70. </select>
  71. </div>
  72. <label class="control-label" for="gainRange">Gain (dB) (higher = more gain)</label>
  73. <div class="control-row">
  74. <input id="gainRange" type="range" min="0" max="60" step="1" />
  75. <input id="gainInput" type="number" min="0" max="60" step="1" />
  76. </div>
  77. <label class="control-label" for="thresholdRange">Detector (dB)</label>
  78. <div class="control-row">
  79. <input id="thresholdRange" type="range" min="-120" max="0" step="1" />
  80. <input id="thresholdInput" type="number" min="-120" max="0" step="1" />
  81. </div>
  82. <label class="control-label">DSP</label>
  83. <div class="toggle-row">
  84. <label class="toggle">
  85. <input id="agcToggle" type="checkbox" />
  86. <span>AGC</span>
  87. </label>
  88. <label class="toggle">
  89. <input id="dcToggle" type="checkbox" />
  90. <span>DC Block</span>
  91. </label>
  92. <label class="toggle">
  93. <input id="iqToggle" type="checkbox" />
  94. <span>IQ Balance</span>
  95. </label>
  96. </div>
  97. <label class="control-label">Display</label>
  98. <div class="control-row">
  99. <select id="avgSelect">
  100. <option value="0">Averaging Off</option>
  101. <option value="0.4">Averaging Fast</option>
  102. <option value="0.2">Averaging Medium</option>
  103. <option value="0.1">Averaging Slow</option>
  104. </select>
  105. </div>
  106. <div class="toggle-row">
  107. <label class="toggle">
  108. <input id="maxHoldToggle" type="checkbox" />
  109. <span>Max Hold</span>
  110. </label>
  111. <button id="maxHoldReset" type="button" class="preset-btn">Reset Max</button>
  112. <label class="toggle">
  113. <input id="gpuToggle" type="checkbox" />
  114. <span>GPU FFT</span>
  115. </label>
  116. </div>
  117. </div>
  118. </section>
  119. <section class="panel spectrum-panel">
  120. <canvas id="spectrum"></canvas>
  121. </section>
  122. <section class="panel waterfall-panel">
  123. <canvas id="waterfall"></canvas>
  124. </section>
  125. <section class="panel timeline-panel">
  126. <div class="panel-header">
  127. <div>Event Timeline</div>
  128. <div class="panel-subtitle" id="timelineRange">Waiting for events...</div>
  129. </div>
  130. <canvas id="timeline"></canvas>
  131. </section>
  132. </main>
  133. <aside class="drawer" id="eventDrawer" aria-hidden="true">
  134. <div class="drawer-header">
  135. <div>Event Detail</div>
  136. <button class="drawer-close" id="drawerClose" type="button">Close</button>
  137. </div>
  138. <div class="drawer-body">
  139. <div class="detail-grid">
  140. <div class="detail-label">Center</div>
  141. <div id="detailCenter">-</div>
  142. <div class="detail-label">Bandwidth</div>
  143. <div id="detailBw">-</div>
  144. <div class="detail-label">Start</div>
  145. <div id="detailStart">-</div>
  146. <div class="detail-label">End</div>
  147. <div id="detailEnd">-</div>
  148. <div class="detail-label">SNR</div>
  149. <div id="detailSnr">-</div>
  150. <div class="detail-label">Duration</div>
  151. <div id="detailDur">-</div>
  152. </div>
  153. <div class="detail-section-title">Latest Spectrogram Slice</div>
  154. <canvas id="detailSpectrogram"></canvas>
  155. <div class="detail-section-title">Recorded Clips (placeholder)</div>
  156. <div class="clips-empty">No clips recorded yet.</div>
  157. </div>
  158. </aside>
  159. <footer>
  160. <div id="status">Connecting...</div>
  161. </footer>
  162. <script src="app.js"></script>
  163. </body>
  164. </html>