From 236e23086c1c9d6886631e1d506bf6df9c4cd4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Sun, 29 Sep 2024 02:00:29 +0200 Subject: [PATCH] ota suppor --- src/lib/serial/device.ts | 43 ++++++++++++++++++++++++ src/routes/(app)/ota-update/+page.svelte | 15 +++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/routes/(app)/ota-update/+page.svelte diff --git a/src/lib/serial/device.ts b/src/lib/serial/device.ts index 41cd73ba..92c1be57 100644 --- a/src/lib/serial/device.ts +++ b/src/lib/serial/device.ts @@ -439,4 +439,47 @@ export class CharaDevice { async getRamBytesAvailable(): Promise { return Number(await this.send(1, "RAM").then(([bytes]) => bytes)); } + + async updateFirmware(file: File): Promise { + const size = file.size; + // use separate serial connection + await this.port.open({ baudRate: this.baudRate }); + const decoderStream = new TextDecoderStream(); + this.port.readable!.pipeTo(decoderStream.writable); + + const reader = decoderStream + .readable!.pipeThrough(new TransformStream(new LineBreakTransformer())) + .getReader(); + serialLog.update((it) => { + it.push({ + type: "system", + value: "Starting firmware update", + }); + return it; + }); + + const writer = this.port.writable!.getWriter(); + try { + await writer.write(new TextEncoder().encode(`RST OTA\r\n`)); + } finally { + writer.releaseLock(); + } + + console.log((await reader.read()).value); + + await file.stream().pipeTo(this.port.writable!); + + console.log((await reader.read()).value); + + await reader.cancel(); + reader.releaseLock(); + await this.port.close(); + serialLog.update((it) => { + it.push({ + type: "system", + value: "Success?", + }); + return it; + }); + } } diff --git a/src/routes/(app)/ota-update/+page.svelte b/src/routes/(app)/ota-update/+page.svelte new file mode 100644 index 00000000..29f70707 --- /dev/null +++ b/src/routes/(app)/ota-update/+page.svelte @@ -0,0 +1,15 @@ + + +