108 lines
3.4 KiB
HTML
Executable File
108 lines
3.4 KiB
HTML
Executable File
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8"/>
|
|
<title>Dual Camera Stream (HTTPS + WSS)</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<script src="WebSocket.js" defer></script>
|
|
<script src="buttonCmd.js" defer></script>
|
|
<script src="GamePad.js" defer></script>
|
|
<script src="KeyboardInput.js" defer></script>
|
|
<link rel="stylesheet" href="indexA.css">
|
|
</head>
|
|
<body>
|
|
<h1>Robot Control</h1>
|
|
|
|
<div class="grid">
|
|
<!-- Camera 0 -->
|
|
<section class="panel">
|
|
<h2>Camera 0</h2>
|
|
|
|
|
|
<div class="video-wrap">
|
|
<canvas id="canvas0" width="1280" height="720"></canvas>
|
|
<img id="overlayImg"
|
|
src="/snapshots/snapshot_video0_1765356085372_two_cam_overlay.png">
|
|
</div>
|
|
<div id="status0" class="status">Connecting…</div>
|
|
</section>
|
|
|
|
<!-- Camera 1 -->
|
|
<section class="panel">
|
|
<h2>Camera 1</h2>
|
|
<div class="video-wrap">
|
|
<canvas id="canvas1" width="1280" height="720"></canvas>
|
|
</div>
|
|
<div id="status1" class="status">Connecting…</div>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="controls">
|
|
|
|
|
|
<div style="display:flex; gap:0.5rem; align-items:end;">
|
|
<button id="snap0">Snapshot</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="snapshotLink" class="status"></div>
|
|
<div id="csvTable" class="status"></div>
|
|
|
|
</section>
|
|
|
|
<section class="panel">
|
|
|
|
<div id="divButtons">
|
|
<h3>Controls</h3>
|
|
<button id="b_uparrow">Up</button>
|
|
<button id="b_downarw">Down</button>
|
|
</br/>
|
|
<button id="b_right">Right</button>
|
|
<button id="b_left">Left</button>
|
|
<br/>
|
|
<button id="b_forward">Forward</button>
|
|
<button id="b_backward">Backward</button>
|
|
<br/>
|
|
<button id="b_M114">Info</button>
|
|
<button id="b_G28">Null</button>
|
|
<button id="b_default">△ Default</button>
|
|
<br/>
|
|
<br/>
|
|
<button id="b_aPlus" >a+</button>
|
|
<button id="b_aMinus">a-</button>
|
|
<br/>
|
|
<button id="b_bPlus" >B+</button>
|
|
<button id="b_bMinus">B-</button>
|
|
<br/>
|
|
<button id="b_cPlus" >C+</button>
|
|
<button id="b_cMinus">C-</button>
|
|
|
|
<br/>
|
|
<button id="b_ePlus" >E+</button>
|
|
<button id="b_eMinus">E-</button>
|
|
</div>
|
|
<div id="divGCodeWindow">
|
|
<div id="GCode">
|
|
<form onsubmit="return false;"><input id="GKarth"/><button id="btnSendGCode" type="button">Send GCode</button></form>
|
|
<br/>
|
|
</div>
|
|
|
|
<button id="btnListFile" type="button">ListFile</button>
|
|
<br/>
|
|
<textarea id="GCodeWindow" class="editor-look" readonly>
|
|
|
|
</textarea>
|
|
<br/>
|
|
<button id="btnPoint">🗙 Point</button>
|
|
<button id="btnDown">⇩</button>
|
|
<button id="btnUp">⇧</button>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<!-- External scripts only (CSP-safe, no inline JS) -->
|
|
<script src="/readCSV.js" defer></script>
|
|
<script src="/videoService.js" defer></script>
|
|
<script src="/app.js" defer></script>
|
|
</body>
|
|
</html> |