From f618ffbadabff9e1e9417d3a714f8847a9dafecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Fri, 30 Jan 2026 17:38:46 +0100 Subject: [PATCH] feat: wait ready --- src/lib/serial/device.ts | 13 ++++++------- .../(app)/ccos/[device]/[version]/+page.svelte | 10 +++++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/lib/serial/device.ts b/src/lib/serial/device.ts index e8e94e6b..1420c4e8 100644 --- a/src/lib/serial/device.ts +++ b/src/lib/serial/device.ts @@ -538,6 +538,7 @@ export class CharaDevice { async updateFirmware( file: ArrayBuffer, progress: (transferred: number, total: number) => void, + throttle = false, ): Promise { while (this.lock) { await this.lock; @@ -584,16 +585,14 @@ export class CharaDevice { }); const chunkSize = 1024; - const promises = []; for (let i = 0; i < file.byteLength; i += chunkSize) { const chunk = file.slice(i, i + chunkSize); - promises.push( - writer - .write(new Uint8Array(chunk)) - .then(() => progress(i + chunk.byteLength, file.byteLength)), - ); + if (throttle) { + await writer.ready; + } + await writer.write(new Uint8Array(chunk)); + progress(i + chunk.byteLength, file.byteLength); } - await Promise.all(promises); serialLog.update((it) => { it.push({ diff --git a/src/routes/(app)/ccos/[device]/[version]/+page.svelte b/src/routes/(app)/ccos/[device]/[version]/+page.svelte index 69cb7928..725462ae 100644 --- a/src/routes/(app)/ccos/[device]/[version]/+page.svelte +++ b/src/routes/(app)/ccos/[device]/[version]/+page.svelte @@ -56,9 +56,13 @@ retries = 2; while (retries-- > 0 && !success) { try { - await port.updateFirmware(file, (transferred, total) => { - progress = transferred / total; - }); + await port.updateFirmware( + file, + (transferred, total) => { + progress = transferred / total; + }, + retries === 0, + ); success = true; } catch (e) {