Better connection handling, CSS
This commit is contained in:
+42
-14
@@ -215,14 +215,28 @@ async function doReset() {
|
||||
// float temp [12], float biasRms [16]
|
||||
// uint16 recalCount [20], uint8 chargeStatus [22], uint8 pad [23]
|
||||
function parseTelemetry(dv) {
|
||||
const view = new DataView(dv.buffer ?? dv);
|
||||
const uptime = view.getUint32(0, true);
|
||||
const leftClicks = view.getUint32(4, true);
|
||||
const rightClicks = view.getUint32(8, true);
|
||||
const temp = view.getFloat32(12,true);
|
||||
const biasRms = view.getFloat32(16,true);
|
||||
const recalCount = view.getUint16(20, true);
|
||||
const chargeStatus= view.getUint8(22);
|
||||
let view;
|
||||
try {
|
||||
view = dv instanceof DataView ? new DataView(dv.buffer, dv.byteOffset, dv.byteLength) : new DataView(dv);
|
||||
} catch(e) { log(`parseTelemetry: DataView wrap failed — ${e.message}`,'err'); return; }
|
||||
|
||||
if (view.byteLength < 24) {
|
||||
const bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
||||
const hex = Array.from(bytes).map(b=>b.toString(16).padStart(2,'0')).join(' ');
|
||||
log(`TELEM: expected 24B, got ${view.byteLength}B — MTU too small? raw: ${hex}`,'err');
|
||||
return;
|
||||
}
|
||||
|
||||
let uptime, leftClicks, rightClicks, temp, biasRms, recalCount, chargeStatus;
|
||||
try {
|
||||
uptime = view.getUint32(0, true);
|
||||
leftClicks = view.getUint32(4, true);
|
||||
rightClicks = view.getUint32(8, true);
|
||||
temp = view.getFloat32(12,true);
|
||||
biasRms = view.getFloat32(16,true);
|
||||
recalCount = view.getUint16(20, true);
|
||||
chargeStatus= view.getUint8(22);
|
||||
} catch(e) { log(`parseTelemetry: parse error at offset — ${e.message}`,'err'); return; }
|
||||
|
||||
document.getElementById('telTemp').textContent = temp.toFixed(1)+'°';
|
||||
document.getElementById('telUptime').textContent = formatUptime(uptime);
|
||||
@@ -342,12 +356,26 @@ const TRAIL_LEN = 120;
|
||||
let cursorX = canvas.width/2, cursorY = canvas.height/2, trail = [];
|
||||
|
||||
function parseImuStream(dv) {
|
||||
const view = new DataView(dv.buffer ?? dv);
|
||||
const gyroY = view.getInt16(0, true);
|
||||
const gyroZ = view.getInt16(2, true);
|
||||
const moveX = view.getInt8(10);
|
||||
const moveY = view.getInt8(11);
|
||||
const flags = view.getUint8(12);
|
||||
let view;
|
||||
try {
|
||||
view = dv instanceof DataView ? new DataView(dv.buffer, dv.byteOffset, dv.byteLength) : new DataView(dv);
|
||||
} catch(e) { log(`parseImuStream: DataView wrap failed — ${e.message}`,'err'); return; }
|
||||
|
||||
if (view.byteLength < 14) {
|
||||
const bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
||||
const hex = Array.from(bytes).map(b=>b.toString(16).padStart(2,'0')).join(' ');
|
||||
log(`IMU raw (${view.byteLength}B, expected 14): ${hex}`,'err');
|
||||
return;
|
||||
}
|
||||
|
||||
let gyroY, gyroZ, moveX, moveY, flags;
|
||||
try {
|
||||
gyroY = view.getInt16(0, true);
|
||||
gyroZ = view.getInt16(2, true);
|
||||
moveX = view.getInt8(10);
|
||||
moveY = view.getInt8(11);
|
||||
flags = view.getUint8(12);
|
||||
} catch(e) { log(`parseImuStream: parse error — ${e.message}`,'err'); return; }
|
||||
const idle = !!(flags & 0x01);
|
||||
const single = !!(flags & 0x02);
|
||||
const dbl = !!(flags & 0x04);
|
||||
|
||||
Reference in New Issue
Block a user