Skip to content
This repository has been archived by the owner on Aug 6, 2024. It is now read-only.

Commit

Permalink
fix: errors in worker get caught and stops uploader (#243)
Browse files Browse the repository at this point in the history
* fix: errors in worker get caught and stops uploader

* fix: errors in worker get caught and stops uploader

* fix: also handle unknown errors

* chore: remove console.log

* chore: prettier

* fix: oops
  • Loading branch information
koen1711 authored Apr 22, 2024
1 parent 86872e0 commit 3362931
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 9 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"@blockly/field-bitmap": "^4.0.13",
"@blockly/workspace-backpack": "^5.3.3",
"@fortawesome/fontawesome-free": "^6.1.1",
"@leaphy-robotics/avrdude-webassembly": "^1.6.0",
"@leaphy-robotics/avrdude-webassembly": "^1.6.1",
"@leaphy-robotics/dfu-util-wasm": "1.0.2",
"@leaphy-robotics/leaphy-blocks": "2.0.3",
"@leaphy-robotics/picotool-wasm": "1.0.2",
Expand Down
31 changes: 27 additions & 4 deletions src/app/services/arduino-uploader/protocols/avrdude/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,33 @@ export default class Avrdude extends BaseProtocol {

this.port.ondisconnect = resolve;
});

const oldConsoleError = console.error;
const workerErrorPromise = new Promise((resolve) => {
console.error = (...data) => {
if (data[1].name == "ExitStatus") {
resolve({ type: "worker-error" });
} else {
oldConsoleError(...data);
resolve({ type: "error" });
}
};
});
const startAvrdude = avrdude.cwrap("startAvrdude", "number", [
"string",
]);

let race = await Promise.race([disconnectPromise, startAvrdude(args)]);
// if the winner is the disconnect promise, then the port was disconnected and we should stop the other promise
let race = await Promise.race([
disconnectPromise,
startAvrdude(args),
workerErrorPromise,
]);
console.error = oldConsoleError;
if (race.type) {
race = -2;
if (race.type == "worker-error") {
race = -3;
} else {
race = -2;
}
}

if (window["writeStream"]) window["writeStream"].releaseLock();
Expand All @@ -78,11 +96,16 @@ export default class Avrdude extends BaseProtocol {
if (race != 0) {
if (race == -2) {
throw new Error("Port disconnected");
} else if (race == -3) {
throw new Error("Worker error");
}
throw new Error("Avrdude failed");
}
await this.port.open({ baudRate: 115200 });
this.uploadState.statusMessage = "UPDATE_COMPLETE";

// if the winner is the disconnect promise, then the port was disconnected and we should stop the other promise

return;
}
}
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1829,10 +1829,10 @@
resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60"
integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==

"@leaphy-robotics/avrdude-webassembly@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@leaphy-robotics/avrdude-webassembly/-/avrdude-webassembly-1.6.0.tgz#79f2cb12b1acc9da9b8aaf3fbdc47b9d24206bc9"
integrity sha512-/vyom0nTJ7J1/wYfp9ZdsziDIg9i5WuqxGQNssslMeecvePcUWwjkkzHhneplsmH3rcK9Ug1q6KCb+nas1U42Q==
"@leaphy-robotics/avrdude-webassembly@^1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@leaphy-robotics/avrdude-webassembly/-/avrdude-webassembly-1.6.1.tgz#78a9e58748130034e4443db09fbdd7870868acea"
integrity sha512-RJZVa6GN8KUC02IQkUQgMeIIjqLF9XzMSselYA3WdUQT67QriLbScd5uKiuCgHpjjzmI/FEIfKF9XSgCmuz+yg==
dependencies:
"@leaphy-robotics/webusb-ftdi" "^1.0.0"

Expand Down

0 comments on commit 3362931

Please sign in to comment.