@microbit/microbit-connection 0.0.0-alpha.14 → 0.0.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/events.js CHANGED
@@ -5,8 +5,65 @@
5
5
  *
6
6
  * https://github.com/DerZade/typescript-event-target/blob/master/src/TypedEventTarget.ts
7
7
  */
8
+ // We've added this in to keep track of what events are active.
9
+ // Having done this it's questionable whether it's worth the reimplementation
10
+ // just to use an EventTarget API.
11
+ export class TrackingEventTarget extends EventTarget {
12
+ constructor() {
13
+ super(...arguments);
14
+ Object.defineProperty(this, "activeEventTracking", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: new Map()
19
+ });
20
+ }
21
+ addEventListener(type, callback, options) {
22
+ if (callback !== null) {
23
+ const registrations = this.activeEventTracking.get(type) ?? [];
24
+ const wasEmpty = registrations.length === 0;
25
+ const registration = new Registration(callback, options ?? false);
26
+ if (!registrations.find((r) => r.eq(registration))) {
27
+ registrations.push(registration);
28
+ this.activeEventTracking.set(type, registrations);
29
+ if (wasEmpty) {
30
+ this.eventActivated(type);
31
+ }
32
+ }
33
+ }
34
+ super.addEventListener(type, callback, options);
35
+ }
36
+ removeEventListener(type, callback, options) {
37
+ if (callback !== null) {
38
+ const registration = new Registration(callback, options ?? false);
39
+ this.filterRegistrations(type, (r) => !r.eq(registration));
40
+ }
41
+ super.removeEventListener(type, callback, options);
42
+ }
43
+ dispatchEvent(event) {
44
+ const result = super.dispatchEvent(event);
45
+ this.filterRegistrations(event.type, (r) => !r.isOnce());
46
+ return result;
47
+ }
48
+ filterRegistrations(type, predicate) {
49
+ let registrations = this.activeEventTracking.get(type) ?? [];
50
+ registrations = registrations.filter(predicate);
51
+ if (registrations.length === 0) {
52
+ this.activeEventTracking.delete(type);
53
+ this.eventDeactivated(type);
54
+ }
55
+ else {
56
+ this.activeEventTracking.set(type, registrations);
57
+ }
58
+ }
59
+ eventActivated(type) { }
60
+ eventDeactivated(type) { }
61
+ getActiveEvents() {
62
+ return [...this.activeEventTracking.keys()];
63
+ }
64
+ }
8
65
  // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
9
- export class TypedEventTarget extends EventTarget {
66
+ export class TypedEventTarget extends TrackingEventTarget {
10
67
  /**
11
68
  * Dispatches a synthetic event event to target and returns true if either
12
69
  * event's cancelable attribute value is false or its preventDefault() method
@@ -16,4 +73,32 @@ export class TypedEventTarget extends EventTarget {
16
73
  return super.dispatchEvent(event);
17
74
  }
18
75
  }
76
+ class Registration {
77
+ constructor(callback, options) {
78
+ Object.defineProperty(this, "callback", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: callback
83
+ });
84
+ Object.defineProperty(this, "options", {
85
+ enumerable: true,
86
+ configurable: true,
87
+ writable: true,
88
+ value: options
89
+ });
90
+ }
91
+ isOnce() {
92
+ return typeof this.options === "object" && this.options.once === true;
93
+ }
94
+ eq(other) {
95
+ return (other.callback === this.callback &&
96
+ eqUseCapture(this.options, other.options));
97
+ }
98
+ }
99
+ const eqUseCapture = (left, right) => {
100
+ const leftValue = typeof left === "boolean" ? left : left.capture ?? false;
101
+ const rightValue = typeof right === "boolean" ? right : right.capture ?? false;
102
+ return leftValue === rightValue;
103
+ };
19
104
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../lib/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyGH,4EAA4E;AAC5E,MAAM,OAAO,gBAA4C,SAAQ,WAAW;IAC1E;;;;OAIG;IACI,kBAAkB,CAAoB,KAAQ,EAAE,KAAW;QAChE,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../lib/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ interface Options {
2
+ /**
3
+ * If we should clear the queue return a function to create errors to reject all promises.
4
+ * Otherwise return undefined. Called before processing each entry.
5
+ */
6
+ abortCheck?: () => (() => Error) | undefined;
7
+ }
8
+ export declare class PromiseQueue {
9
+ private busy;
10
+ private entries;
11
+ private abortCheck;
12
+ constructor(options?: Options);
13
+ /**
14
+ * Queue an action.
15
+ *
16
+ * @param action Async action to perform.
17
+ * @returns A promise that resolves when all prior added actions and this action have been performed.
18
+ */
19
+ add<T>(action: () => Promise<T>): Promise<T>;
20
+ private processQueue;
21
+ /**
22
+ * Skips any queued actions that aren't in progress and rejects their
23
+ * promises with errors created with the supplied function.
24
+ */
25
+ clear(rejection: () => Error): void;
26
+ }
27
+ export {};
@@ -0,0 +1,74 @@
1
+ export class PromiseQueue {
2
+ constructor(options = {}) {
3
+ Object.defineProperty(this, "busy", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: false
8
+ });
9
+ Object.defineProperty(this, "entries", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: []
14
+ });
15
+ Object.defineProperty(this, "abortCheck", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: void 0
20
+ });
21
+ this.abortCheck = options.abortCheck ?? (() => undefined);
22
+ }
23
+ /**
24
+ * Queue an action.
25
+ *
26
+ * @param action Async action to perform.
27
+ * @returns A promise that resolves when all prior added actions and this action have been performed.
28
+ */
29
+ add(action) {
30
+ return new Promise((resolve, reject) => {
31
+ const entry = {
32
+ resolve,
33
+ reject,
34
+ action,
35
+ };
36
+ this.entries.push(entry);
37
+ if (!this.busy) {
38
+ void this.processQueue();
39
+ }
40
+ });
41
+ }
42
+ async processQueue() {
43
+ const rejection = this.abortCheck();
44
+ if (rejection) {
45
+ this.clear(rejection);
46
+ return;
47
+ }
48
+ const entry = this.entries.shift();
49
+ if (!entry) {
50
+ return;
51
+ }
52
+ this.busy = true;
53
+ try {
54
+ entry.resolve(await entry.action());
55
+ }
56
+ catch (e) {
57
+ entry.reject(e);
58
+ }
59
+ this.busy = false;
60
+ return this.processQueue();
61
+ }
62
+ /**
63
+ * Skips any queued actions that aren't in progress and rejects their
64
+ * promises with errors created with the supplied function.
65
+ */
66
+ clear(rejection) {
67
+ const entries = this.entries;
68
+ this.entries = [];
69
+ entries.forEach((e) => {
70
+ e.reject(rejection());
71
+ });
72
+ }
73
+ }
74
+ //# sourceMappingURL=promise-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-queue.js","sourceRoot":"","sources":["../lib/promise-queue.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,YAAY;IAKvB,YAAY,UAAmB,EAAE;QAJzB;;;;mBAAgB,KAAK;WAAC;QACtB;;;;mBAA6B,EAAE;WAAC;QAChC;;;;;WAA4C;QAGlD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAI,MAAwB;QACpC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAkB;gBAC3B,OAAO;gBACP,MAAM;gBACN,MAAM;aACP,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -24,7 +24,7 @@ export declare class MicrobitRadioBridgeConnection extends TypedEventTarget<Devi
24
24
  private remoteDeviceId;
25
25
  private disconnectPromise;
26
26
  private serialSessionOpen;
27
- private delegateStatusListner;
27
+ private delegateStatusListener;
28
28
  constructor(delegate: MicrobitWebUSBConnection, options?: MicrobitRadioBridgeConnectionOptions);
29
29
  getBoardVersion(): BoardVersion | undefined;
30
30
  serialWrite(data: string): Promise<void>;
@@ -34,6 +34,7 @@ export declare class MicrobitRadioBridgeConnection extends TypedEventTarget<Devi
34
34
  setRemoteDeviceId(remoteDeviceId: number): void;
35
35
  connect(): Promise<ConnectionStatus>;
36
36
  disconnect(): Promise<void>;
37
+ private log;
37
38
  private setStatus;
38
39
  private statusFromDelegate;
39
40
  }
@@ -64,7 +64,7 @@ export class MicrobitRadioBridgeConnection extends TypedEventTarget {
64
64
  writable: true,
65
65
  value: false
66
66
  });
67
- Object.defineProperty(this, "delegateStatusListner", {
67
+ Object.defineProperty(this, "delegateStatusListener", {
68
68
  enumerable: true,
69
69
  configurable: true,
70
70
  writable: true,
@@ -95,10 +95,10 @@ export class MicrobitRadioBridgeConnection extends TypedEventTarget {
95
95
  async initialize() {
96
96
  await this.delegate.initialize();
97
97
  this.setStatus(this.statusFromDelegate());
98
- this.delegate.addEventListener("status", this.delegateStatusListner);
98
+ this.delegate.addEventListener("status", this.delegateStatusListener);
99
99
  }
100
100
  dispose() {
101
- this.delegate.removeEventListener("status", this.delegateStatusListner);
101
+ this.delegate.removeEventListener("status", this.delegateStatusListener);
102
102
  this.delegate.dispose();
103
103
  }
104
104
  clearDevice() {
@@ -122,25 +122,29 @@ export class MicrobitRadioBridgeConnection extends TypedEventTarget {
122
122
  });
123
123
  await this.delegate.connect();
124
124
  try {
125
- this.serialSession = new RadioBridgeSerialSession(this.logging, this.remoteDeviceId, this.delegate, this.dispatchTypedEvent.bind(this), this.setStatus.bind(this), () => {
126
- // Remote connection lost
127
- this.logging.event({
128
- type: "Serial",
129
- message: "Serial connection lost 1",
130
- });
131
- // This is the point we tell the consumer that we're trying to reconnect
132
- // in the background.
133
- // Leave serial connection running in case the remote device comes back.
134
- }, () => {
135
- // Remote connection... even more lost?
136
- this.logging.event({
137
- type: "Serial",
138
- message: "Serial connection lost 2",
139
- });
140
- this.serialSession?.dispose();
125
+ this.serialSession = new RadioBridgeSerialSession(this.logging, this.remoteDeviceId, this.delegate, this.dispatchTypedEvent.bind(this), {
126
+ onConnecting: () => this.setStatus(ConnectionStatus.CONNECTING),
127
+ onReconnecting: () => {
128
+ // Leave serial connection running in case the remote device comes back.
129
+ if (this.status !== ConnectionStatus.RECONNECTING) {
130
+ this.setStatus(ConnectionStatus.RECONNECTING);
131
+ }
132
+ },
133
+ onFail: () => {
134
+ if (this.status !== ConnectionStatus.DISCONNECTED) {
135
+ this.setStatus(ConnectionStatus.DISCONNECTED);
136
+ }
137
+ this.serialSession?.dispose();
138
+ this.serialSessionOpen = false;
139
+ },
140
+ onSuccess: () => {
141
+ if (this.status !== ConnectionStatus.CONNECTED) {
142
+ this.setStatus(ConnectionStatus.CONNECTED);
143
+ }
144
+ this.serialSessionOpen = true;
145
+ },
141
146
  });
142
147
  await this.serialSession.connect();
143
- this.serialSessionOpen = true;
144
148
  this.logging.event({
145
149
  type: "Connect",
146
150
  message: "Serial connect success",
@@ -148,6 +152,7 @@ export class MicrobitRadioBridgeConnection extends TypedEventTarget {
148
152
  return this.status;
149
153
  }
150
154
  catch (e) {
155
+ this.serialSessionOpen = false;
151
156
  this.logging.error("Failed to initialise serial protocol", e);
152
157
  this.logging.event({
153
158
  type: "Connect",
@@ -166,8 +171,12 @@ export class MicrobitRadioBridgeConnection extends TypedEventTarget {
166
171
  this.disconnectPromise = undefined;
167
172
  })();
168
173
  }
174
+ log(v) {
175
+ this.logging.log(v);
176
+ }
169
177
  setStatus(status) {
170
178
  this.status = status;
179
+ this.log("Radio connection status " + status);
171
180
  this.dispatchTypedEvent("status", new ConnectionStatusEvent(status));
172
181
  }
173
182
  statusFromDelegate() {
@@ -186,7 +195,7 @@ class RadioBridgeSerialSession {
186
195
  this.dispatchTypedEvent(type, new ButtonEvent(type, sensorData[button] ? ButtonState.ShortPress : ButtonState.NotPressed));
187
196
  }
188
197
  }
189
- constructor(logging, remoteDeviceId, delegate, dispatchTypedEvent, onStatusChanged, onRemoteConnectionLost1, onRemoteConnectionLost2) {
198
+ constructor(logging, remoteDeviceId, delegate, dispatchTypedEvent, callbacks) {
190
199
  Object.defineProperty(this, "logging", {
191
200
  enumerable: true,
192
201
  configurable: true,
@@ -211,23 +220,11 @@ class RadioBridgeSerialSession {
211
220
  writable: true,
212
221
  value: dispatchTypedEvent
213
222
  });
214
- Object.defineProperty(this, "onStatusChanged", {
215
- enumerable: true,
216
- configurable: true,
217
- writable: true,
218
- value: onStatusChanged
219
- });
220
- Object.defineProperty(this, "onRemoteConnectionLost1", {
223
+ Object.defineProperty(this, "callbacks", {
221
224
  enumerable: true,
222
225
  configurable: true,
223
226
  writable: true,
224
- value: onRemoteConnectionLost1
225
- });
226
- Object.defineProperty(this, "onRemoteConnectionLost2", {
227
- enumerable: true,
228
- configurable: true,
229
- writable: true,
230
- value: onRemoteConnectionLost2
227
+ value: callbacks
231
228
  });
232
229
  Object.defineProperty(this, "unprocessedData", {
233
230
  enumerable: true,
@@ -315,8 +312,8 @@ class RadioBridgeSerialSession {
315
312
  this.delegate.addEventListener("serialdata", this.serialDataListener);
316
313
  this.delegate.addEventListener("serialerror", this.serialErrorListener);
317
314
  try {
315
+ this.callbacks.onConnecting();
318
316
  await this.handshake();
319
- this.onStatusChanged(ConnectionStatus.CONNECTED);
320
317
  this.logging.log(`Serial: using remote device id ${this.remoteDeviceId}`);
321
318
  const remoteMbIdCommand = protocol.generateCmdRemoteMbId(this.remoteDeviceId);
322
319
  const remoteMbIdResponse = await this.sendCmdWaitResponse(remoteMbIdCommand);
@@ -343,9 +340,10 @@ class RadioBridgeSerialSession {
343
340
  // TODO: in the first-time connection case we used to move the error/disconnect to the background here, why? timing?
344
341
  await periodicMessagePromise;
345
342
  this.startConnectionCheck();
343
+ this.callbacks.onSuccess();
346
344
  }
347
345
  catch (e) {
348
- this.dispose();
346
+ this.callbacks.onFail();
349
347
  }
350
348
  }
351
349
  async dispose() {
@@ -360,7 +358,6 @@ class RadioBridgeSerialSession {
360
358
  this.delegate.removeEventListener("serialdata", this.serialDataListener);
361
359
  this.delegate.removeEventListener("serialerror", this.serialErrorListener);
362
360
  await this.delegate.softwareReset();
363
- this.onStatusChanged(ConnectionStatus.DISCONNECTED);
364
361
  }
365
362
  async sendCmdWaitResponse(cmd) {
366
363
  const responsePromise = new Promise((resolve, reject) => {
@@ -376,15 +373,27 @@ class RadioBridgeSerialSession {
376
373
  startConnectionCheck() {
377
374
  // Check for connection lost
378
375
  if (this.connectionCheckIntervalId === undefined) {
379
- this.connectionCheckIntervalId = setInterval(async () => {
376
+ this.connectionCheckIntervalId = setInterval(() => {
377
+ if (this.lastReceivedMessageTimestamp &&
378
+ Date.now() - this.lastReceivedMessageTimestamp <= 1_000) {
379
+ this.callbacks.onSuccess();
380
+ }
380
381
  if (this.lastReceivedMessageTimestamp &&
381
382
  Date.now() - this.lastReceivedMessageTimestamp > 1_000) {
382
- this.onRemoteConnectionLost1();
383
+ this.logging.event({
384
+ type: "Serial",
385
+ message: "Serial connection lost - attempting to reconnect",
386
+ });
387
+ this.callbacks.onReconnecting();
383
388
  }
384
389
  if (this.lastReceivedMessageTimestamp &&
385
390
  Date.now() - this.lastReceivedMessageTimestamp >
386
391
  connectTimeoutDuration) {
387
- this.onRemoteConnectionLost2();
392
+ this.logging.event({
393
+ type: "Serial",
394
+ message: "Serial connection lost",
395
+ });
396
+ this.callbacks.onFail();
388
397
  }
389
398
  }, 1000);
390
399
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usb-radio-bridge.js","sourceRoot":"","sources":["../lib/usb-radio-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usb-radio-bridge.js","sourceRoot":"","sources":["../lib/usb-radio-bridge.ts"],"names":[],"mappings":"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"}
package/build/usb.d.ts CHANGED
@@ -20,7 +20,7 @@ export declare class MicrobitWebUSBConnection extends TypedEventTarget<DeviceCon
20
20
  */
21
21
  private connection;
22
22
  private serialState;
23
- private serialStateChange;
23
+ private serialStateChangeQueue;
24
24
  private serialListener;
25
25
  private flashing;
26
26
  private disconnectAfterFlash;
@@ -29,8 +29,6 @@ export declare class MicrobitWebUSBConnection extends TypedEventTarget<DeviceCon
29
29
  private unloading;
30
30
  private beforeUnloadListener;
31
31
  private logging;
32
- private _addEventListener;
33
- private _removeEventListener;
34
32
  private addedListeners;
35
33
  constructor(options?: MicrobitWebUSBConnectionOptions);
36
34
  private log;
@@ -55,6 +53,6 @@ export declare class MicrobitWebUSBConnection extends TypedEventTarget<DeviceCon
55
53
  clearDevice(): Promise<void>;
56
54
  private connectInternal;
57
55
  private chooseDevice;
58
- private startNotifications;
59
- private stopNotifications;
56
+ protected eventActivated(type: string): void;
57
+ protected eventDeactivated(type: string): Promise<void>;
60
58
  }
package/build/usb.js CHANGED
@@ -7,6 +7,7 @@ import { TimeoutError, withTimeout } from "./async-util.js";
7
7
  import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceError, FlashDataError, FlashEvent, SerialDataEvent, SerialErrorEvent, SerialResetEvent, } from "./device.js";
8
8
  import { TypedEventTarget } from "./events.js";
9
9
  import { NullLogging } from "./logging.js";
10
+ import { PromiseQueue } from "./promise-queue.js";
10
11
  import { DAPWrapper } from "./usb-device-wrapper.js";
11
12
  import { PartialFlashing } from "./usb-partial-flashing.js";
12
13
  // Temporary workaround for ChromeOS 105 bug.
@@ -54,11 +55,11 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
54
55
  writable: true,
55
56
  value: false
56
57
  });
57
- Object.defineProperty(this, "serialStateChange", {
58
+ Object.defineProperty(this, "serialStateChangeQueue", {
58
59
  enumerable: true,
59
60
  configurable: true,
60
61
  writable: true,
61
- value: void 0
62
+ value: new PromiseQueue()
62
63
  });
63
64
  Object.defineProperty(this, "serialListener", {
64
65
  enumerable: true,
@@ -155,18 +156,6 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
155
156
  writable: true,
156
157
  value: void 0
157
158
  });
158
- Object.defineProperty(this, "_addEventListener", {
159
- enumerable: true,
160
- configurable: true,
161
- writable: true,
162
- value: this.addEventListener
163
- });
164
- Object.defineProperty(this, "_removeEventListener", {
165
- enumerable: true,
166
- configurable: true,
167
- writable: true,
168
- value: this.removeEventListener
169
- });
170
159
  Object.defineProperty(this, "addedListeners", {
171
160
  enumerable: true,
172
161
  configurable: true,
@@ -188,20 +177,6 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
188
177
  }
189
178
  });
190
179
  this.logging = options.logging;
191
- // TODO: this doesn't account for the rules around add/remove call equivalence
192
- this.addEventListener = (type, ...args) => {
193
- this._addEventListener(type, ...args);
194
- if (++this.addedListeners[type] === 1 && !this.flashing) {
195
- this.startNotifications(type);
196
- }
197
- };
198
- this.removeEventListener = (type, ...args) => {
199
- this._removeEventListener(type, ...args);
200
- if (--this.addedListeners[type] <= 0) {
201
- this.addedListeners[type] = 0;
202
- this.stopNotifications(type);
203
- }
204
- };
205
180
  }
206
181
  log(v) {
207
182
  this.logging.log(v);
@@ -302,9 +277,7 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
302
277
  }
303
278
  }
304
279
  async startSerialInternal() {
305
- const prev = this.serialStateChange;
306
- this.serialStateChange = (async () => {
307
- await prev;
280
+ return this.serialStateChangeQueue.add(async () => {
308
281
  if (!this.connection || this.serialState) {
309
282
  return;
310
283
  }
@@ -321,20 +294,16 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
321
294
  .finally(() => {
322
295
  this.serialState = false;
323
296
  });
324
- })();
325
- await this.serialStateChange;
297
+ });
326
298
  }
327
299
  async stopSerialInternal() {
328
- const prev = this.serialStateChange;
329
- this.serialStateChange = (async () => {
330
- await prev;
300
+ return this.serialStateChangeQueue.add(async () => {
331
301
  if (!this.connection || !this.serialState) {
332
302
  return;
333
303
  }
334
304
  this.connection.stopSerial(this.serialListener);
335
305
  this.dispatchTypedEvent("serialreset", new SerialResetEvent());
336
- })();
337
- await this.serialStateChange;
306
+ });
338
307
  }
339
308
  async disconnect() {
340
309
  try {
@@ -440,7 +409,7 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
440
409
  this.dispatchTypedEvent("afterrequestdevice", new AfterRequestDevice());
441
410
  return this.device;
442
411
  }
443
- async startNotifications(type) {
412
+ eventActivated(type) {
444
413
  switch (type) {
445
414
  case "serialdata": {
446
415
  this.startSerialInternal();
@@ -448,7 +417,7 @@ export class MicrobitWebUSBConnection extends TypedEventTarget {
448
417
  }
449
418
  }
450
419
  }
451
- async stopNotifications(type) {
420
+ async eventDeactivated(type) {
452
421
  switch (type) {
453
422
  case "serialdata": {
454
423
  this.stopSerialInternal();