From 9a67023678b4a73246ff19a2bbeb198da7f106db Mon Sep 17 00:00:00 2001 From: Robert Knight Date: Mon, 18 Aug 2025 15:10:59 +0100 Subject: [PATCH 1/2] Ignore delegate status on radio bridge disconnect --- lib/usb-radio-bridge.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/usb-radio-bridge.ts b/lib/usb-radio-bridge.ts index f199636..4c44a69 100644 --- a/lib/usb-radio-bridge.ts +++ b/lib/usb-radio-bridge.ts @@ -209,7 +209,9 @@ class MicrobitRadioBridgeConnectionImpl } this.serialSessionOpen = false; this.disconnectPromise = (async () => { + this.ignoreDelegateStatus = true; await this.serialSession?.dispose(true); + this.ignoreDelegateStatus = false; this.disconnectPromise = undefined; })(); } From 6373a63908084e9488ab921b1d2610d42f35a1a6 Mon Sep 17 00:00:00 2001 From: Robert Knight Date: Tue, 26 Aug 2025 15:30:57 +0100 Subject: [PATCH 2/2] Make serial listener a boolean Having number values don't make sense since we wouldn't respect them anyway. We're listening to serial data or we're not. --- lib/usb.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/usb.ts b/lib/usb.ts index 38a7fee..8e596a5 100644 --- a/lib/usb.ts +++ b/lib/usb.ts @@ -189,7 +189,7 @@ class MicrobitWebUSBConnectionImpl setTimeout(() => { if (this.status === ConnectionStatus.CONNECTED) { this.unloading = false; - if (this.addedListeners.serialdata) { + if (this.listeningToSerialData) { this.startSerialInternal(); } } @@ -202,9 +202,7 @@ class MicrobitWebUSBConnectionImpl private logging: Logging; private deviceSelectionMode: DeviceSelectionMode; - private addedListeners: Record = { - serialdata: 0, - }; + private listeningToSerialData = false; constructor(options: MicrobitWebUSBConnectionOptions = {}) { super(); @@ -337,7 +335,7 @@ class MicrobitWebUSBConnectionImpl await this.disconnect(); this.visibilityReconnect = true; } else { - if (this.addedListeners.serialdata) { + if (this.listeningToSerialData) { this.log("Reinstating serial after flash"); if (this.connection.daplink) { await this.connection.daplink.connect(); @@ -493,7 +491,7 @@ class MicrobitWebUSBConnectionImpl } else { await withTimeout(this.connection.reconnectAsync(), 10_000); } - if (this.addedListeners.serialdata && !this.flashing) { + if (this.listeningToSerialData && !this.flashing) { this.startSerialInternal(); } this.setStatus(ConnectionStatus.CONNECTED); @@ -569,7 +567,7 @@ class MicrobitWebUSBConnectionImpl this.startSerialInternal(); } // Allows for reinstating serial after flashing. - this.addedListeners.serialdata++; + this.listeningToSerialData = true; break; } } @@ -579,7 +577,7 @@ class MicrobitWebUSBConnectionImpl switch (type as keyof SerialConnectionEventMap) { case "serialdata": { this.stopSerialInternal(); - this.addedListeners.serialdata--; + this.listeningToSerialData = false; break; } }