mirror of
https://github.com/meshcore-dev/flasher.meshcore.dev.git
synced 2026-04-20 22:13:50 +00:00
sync prod -> git
This commit is contained in:
parent
4d696db87f
commit
ea3dae33dc
74 changed files with 4313 additions and 1073 deletions
|
|
@ -1,6 +1,7 @@
|
|||
function delay(msecs) {
|
||||
return new Promise((resolve) => setTimeout(resolve, msecs));
|
||||
}
|
||||
|
||||
class LineBreakTransformer {
|
||||
chunks = '';
|
||||
port = null;
|
||||
|
|
|
|||
63
lib/dfu.js
63
lib/dfu.js
|
|
@ -80,7 +80,30 @@ function calcCrc16(data, crc = 0xFFFF) {
|
|||
}
|
||||
|
||||
function sleep(milliseconds) {
|
||||
return new Promise((resolve) => setTimeout(resolve, milliseconds))
|
||||
return new Promise((resolve) => {
|
||||
const startTime = performance.now();
|
||||
const targetTime = startTime + milliseconds;
|
||||
|
||||
function checkTime() {
|
||||
if (performance.now() >= targetTime) {
|
||||
resolve();
|
||||
} else {
|
||||
requestAnimationFrame(checkTime);
|
||||
}
|
||||
}
|
||||
|
||||
const initialDelay = Math.max(0, milliseconds - 16); // Wake up ~1 frame early to start polling
|
||||
|
||||
if (initialDelay > 0) {
|
||||
setTimeout(() => {
|
||||
// Now start the more precise polling
|
||||
checkTime();
|
||||
}, initialDelay);
|
||||
} else {
|
||||
// If the desired sleep is very short, go straight to polling
|
||||
checkTime();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// --- HciPacket Class (adapted from dfu/dfu_transport_serial.py) ---
|
||||
|
|
@ -128,6 +151,29 @@ export class Dfu {
|
|||
this.eraseBeforeUpdate = eraseBeforeUpdate; // Store the erase flag
|
||||
}
|
||||
|
||||
getReader() {
|
||||
const reader = this.port.readable.getReader();
|
||||
|
||||
return {
|
||||
read() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timeoutHandle = setTimeout(() => {
|
||||
reader.releaseLock();
|
||||
reject(new Error("Read timeout"));
|
||||
}, DEFAULT_SERIAL_PORT_TIMEOUT * 1000 * 5)
|
||||
|
||||
reader.read().then(result => {
|
||||
clearTimeout(timeoutHandle);
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
},
|
||||
releaseLock() {
|
||||
return reader.releaseLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async sendPacket(pkt) {
|
||||
if (!this.port || !this.port.writable) {
|
||||
throw new Error("Serial port not open or not writable.");
|
||||
|
|
@ -149,7 +195,7 @@ export class Dfu {
|
|||
throw new Error("Serial port not open or not readable.");
|
||||
}
|
||||
|
||||
const reader = this.port.readable.getReader();
|
||||
const reader = this.getReader();
|
||||
let buffer = [];
|
||||
let c0Count = 0;
|
||||
|
||||
|
|
@ -169,13 +215,12 @@ export class Dfu {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Date.now() - startTime > DEFAULT_SERIAL_PORT_TIMEOUT * 1000 * 5) { // Increased timeout for safety
|
||||
HciPacket.sequenceNumber = 0; // Reset sequence number on timeout.
|
||||
throw new Error("Timeout waiting for ACK.");
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
}
|
||||
catch(e) {
|
||||
HciPacket.sequenceNumber = 0;
|
||||
}
|
||||
finally {
|
||||
reader.releaseLock();
|
||||
}
|
||||
// Decode SLIP
|
||||
|
|
@ -216,7 +261,7 @@ export class Dfu {
|
|||
} else if (data[i] === 0xC0) {
|
||||
// Ignore 0xC0 (start/end of packet)
|
||||
}
|
||||
else {
|
||||
else {
|
||||
result.push(data[i]);
|
||||
}
|
||||
i++;
|
||||
|
|
|
|||
9
lib/iframeResizer.contentWindow.min.js
vendored
Normal file
9
lib/iframeResizer.contentWindow.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue