@microbit/microbit-connection 0.0.0-alpha.1 → 0.0.0-alpha.10

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.
Files changed (57) hide show
  1. package/build/accelerometer-service.d.ts +10 -9
  2. package/build/accelerometer-service.js +61 -27
  3. package/build/accelerometer-service.js.map +1 -1
  4. package/build/bluetooth-device-wrapper.d.ts +30 -14
  5. package/build/bluetooth-device-wrapper.js +143 -27
  6. package/build/bluetooth-device-wrapper.js.map +1 -1
  7. package/build/bluetooth-utils.d.ts +5 -0
  8. package/build/bluetooth-utils.js +14 -0
  9. package/build/bluetooth-utils.js.map +1 -0
  10. package/build/bluetooth.d.ts +12 -13
  11. package/build/bluetooth.js +59 -75
  12. package/build/bluetooth.js.map +1 -1
  13. package/build/board-id.d.ts +2 -1
  14. package/build/board-id.js +8 -0
  15. package/build/board-id.js.map +1 -1
  16. package/build/board-serial-info.d.ts +1 -1
  17. package/build/board-serial-info.js +1 -1
  18. package/build/board-serial-info.js.map +1 -1
  19. package/build/button-service.d.ts +13 -0
  20. package/build/button-service.js +76 -0
  21. package/build/button-service.js.map +1 -0
  22. package/build/buttons.d.ts +10 -0
  23. package/build/buttons.js +18 -0
  24. package/build/buttons.js.map +1 -0
  25. package/build/constants.d.ts +1 -0
  26. package/build/constants.js +1 -0
  27. package/build/constants.js.map +1 -1
  28. package/build/device.d.ts +19 -29
  29. package/build/device.js +19 -2
  30. package/build/device.js.map +1 -1
  31. package/build/hex-flash-data-source.d.ts +7 -9
  32. package/build/hex-flash-data-source.js +16 -44
  33. package/build/hex-flash-data-source.js.map +1 -1
  34. package/build/index.d.ts +10 -7
  35. package/build/index.js +7 -6
  36. package/build/index.js.map +1 -1
  37. package/build/logging.js +3 -1
  38. package/build/logging.js.map +1 -1
  39. package/build/service-events.d.ts +7 -3
  40. package/build/service-events.js +12 -0
  41. package/build/service-events.js.map +1 -1
  42. package/build/usb-device-wrapper.d.ts +9 -3
  43. package/build/usb-device-wrapper.js +41 -4
  44. package/build/usb-device-wrapper.js.map +1 -1
  45. package/build/usb-partial-flashing-utils.js +1 -1
  46. package/build/usb-partial-flashing-utils.js.map +1 -1
  47. package/build/usb-partial-flashing.d.ts +13 -7
  48. package/build/usb-partial-flashing.js +55 -12
  49. package/build/usb-partial-flashing.js.map +1 -1
  50. package/build/usb-radio-bridge.d.ts +28 -19
  51. package/build/usb-radio-bridge.js +277 -192
  52. package/build/usb-radio-bridge.js.map +1 -1
  53. package/build/usb.d.ts +13 -14
  54. package/build/usb.js +117 -48
  55. package/build/usb.js.map +1 -1
  56. package/package.json +3 -2
  57. package/vite.config.ts +1 -1
@@ -1,8 +1,8 @@
1
- import { createBluetoothDeviceWrapper, } from "./bluetooth-device-wrapper";
2
- import { profile } from "./bluetooth-profile";
3
- import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, SerialResetEvent, } from "./device";
4
- import { TypedEventTarget } from "./events";
5
- import { NullLogging } from "./logging";
1
+ import { createBluetoothDeviceWrapper, } from "./bluetooth-device-wrapper.js";
2
+ import { profile } from "./bluetooth-profile.js";
3
+ import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, } from "./device.js";
4
+ import { TypedEventTarget } from "./events.js";
5
+ import { NullLogging } from "./logging.js";
6
6
  const requestDeviceTimeoutDuration = 30000;
7
7
  /**
8
8
  * A Bluetooth connection to a micro:bit device.
@@ -10,14 +10,11 @@ const requestDeviceTimeoutDuration = 30000;
10
10
  export class MicrobitWebBluetoothConnection extends TypedEventTarget {
11
11
  constructor(options = {}) {
12
12
  super();
13
- // TODO: when do we call getAvailable() ?
14
13
  Object.defineProperty(this, "status", {
15
14
  enumerable: true,
16
15
  configurable: true,
17
16
  writable: true,
18
- value: navigator.bluetooth
19
- ? ConnectionStatus.NO_AUTHORIZED_DEVICE
20
- : ConnectionStatus.NOT_SUPPORTED
17
+ value: ConnectionStatus.SUPPORT_NOT_KNOWN
21
18
  });
22
19
  /**
23
20
  * The USB device we last connected to.
@@ -53,13 +50,45 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
53
50
  writable: true,
54
51
  value: this.removeEventListener
55
52
  });
53
+ Object.defineProperty(this, "activeEvents", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: {
58
+ accelerometerdatachanged: false,
59
+ buttonachanged: false,
60
+ buttonbchanged: false,
61
+ }
62
+ });
63
+ Object.defineProperty(this, "availabilityListener", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: (e) => {
68
+ // TODO: is this called? is `value` correct?
69
+ const value = e.value;
70
+ this.availability = value;
71
+ }
72
+ });
73
+ Object.defineProperty(this, "availability", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: void 0
78
+ });
79
+ Object.defineProperty(this, "nameFilter", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: void 0
84
+ });
56
85
  this.logging = options.logging || new NullLogging();
57
86
  this.addEventListener = (type, ...args) => {
58
87
  this._addEventListener(type, ...args);
59
- this.startNotifications(type);
88
+ this.connection?.startNotifications(type);
60
89
  };
61
90
  this.removeEventListener = (type, ...args) => {
62
- this.stopNotifications(type);
91
+ this.connection?.stopNotifications(type);
63
92
  this._removeEventListener(type, ...args);
64
93
  };
65
94
  }
@@ -67,38 +96,22 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
67
96
  this.logging.log(v);
68
97
  }
69
98
  async initialize() {
70
- if (navigator.bluetooth) {
71
- // TODO: availabilitychanged
72
- }
99
+ navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
100
+ this.availability = await navigator.bluetooth?.getAvailability();
101
+ this.setStatus(this.availability
102
+ ? ConnectionStatus.NO_AUTHORIZED_DEVICE
103
+ : ConnectionStatus.NOT_SUPPORTED);
73
104
  }
74
105
  dispose() {
75
- if (navigator.bluetooth) {
76
- // TODO: availabilitychanged
77
- }
106
+ navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
78
107
  }
79
- async connect(options = {}) {
80
- await this.connectInternal(options);
108
+ async connect() {
109
+ await this.connectInternal();
81
110
  return this.status;
82
111
  }
83
112
  getBoardVersion() {
84
113
  return this.connection?.boardVersion;
85
114
  }
86
- // @ts-ignore
87
- async startSerialInternal() {
88
- if (!this.connection) {
89
- // As connecting then starting serial are async we could disconnect between them,
90
- // so handle this gracefully.
91
- return;
92
- }
93
- // TODO
94
- }
95
- // @ts-ignore
96
- async stopSerialInternal() {
97
- if (this.connection) {
98
- // TODO
99
- this.dispatchTypedEvent("serialreset", new SerialResetEvent());
100
- }
101
- }
102
115
  async disconnect() {
103
116
  try {
104
117
  if (this.connection) {
@@ -124,7 +137,7 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
124
137
  }
125
138
  setStatus(newStatus) {
126
139
  this.status = newStatus;
127
- this.log("Device status " + newStatus);
140
+ this.log("Bluetooth connection status " + newStatus);
128
141
  this.dispatchTypedEvent("status", new ConnectionStatusEvent(newStatus));
129
142
  }
130
143
  serialWrite(data) {
@@ -138,20 +151,23 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
138
151
  this.device = undefined;
139
152
  this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
140
153
  }
141
- async connectInternal(options) {
154
+ async connectInternal() {
142
155
  if (!this.connection) {
143
- const device = await this.chooseDevice(options);
156
+ const device = await this.chooseDevice();
144
157
  if (!device) {
145
158
  return;
146
159
  }
147
- this.connection = await createBluetoothDeviceWrapper(device, this.logging, (type, event) => this.dispatchTypedEvent(type, event));
160
+ this.connection = await createBluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this), this.activeEvents);
148
161
  }
149
162
  // TODO: timeout unification?
150
163
  // Connection happens inside createBluetoothDeviceWrapper.
151
164
  // await this.connection?.connect();
152
165
  this.setStatus(ConnectionStatus.CONNECTED);
153
166
  }
154
- async chooseDevice(options) {
167
+ setNameFilter(name) {
168
+ this.nameFilter = name;
169
+ }
170
+ async chooseDevice() {
155
171
  if (this.device) {
156
172
  return this.device;
157
173
  }
@@ -163,8 +179,8 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
163
179
  navigator.bluetooth.requestDevice({
164
180
  filters: [
165
181
  {
166
- namePrefix: options.name
167
- ? `BBC micro:bit [${options.name}]`
182
+ namePrefix: this.nameFilter
183
+ ? `BBC micro:bit [${this.nameFilter}]`
168
184
  : "BBC micro:bit",
169
185
  },
170
186
  ],
@@ -209,39 +225,7 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
209
225
  }
210
226
  async setAccelerometerPeriod(value) {
211
227
  const accelerometerService = await this.connection?.getAccelerometerService();
212
- accelerometerService?.setPeriod(value);
213
- }
214
- async startAccelerometerNotifications() {
215
- const accelerometerService = await this.connection?.getAccelerometerService();
216
- accelerometerService?.startNotifications();
217
- if (this.connection) {
218
- this.connection.serviceListeners.accelerometerdatachanged.notifying =
219
- true;
220
- }
221
- }
222
- async stopAccelerometerNotifications() {
223
- const accelerometerService = await this.connection?.getAccelerometerService();
224
- if (this.connection) {
225
- this.connection.serviceListeners.accelerometerdatachanged.notifying =
226
- false;
227
- }
228
- accelerometerService?.stopNotifications();
229
- }
230
- async startNotifications(type) {
231
- switch (type) {
232
- case "accelerometerdatachanged": {
233
- this.startAccelerometerNotifications();
234
- break;
235
- }
236
- }
237
- }
238
- async stopNotifications(type) {
239
- switch (type) {
240
- case "accelerometerdatachanged": {
241
- this.stopAccelerometerNotifications();
242
- break;
243
- }
244
- }
228
+ return accelerometerService?.setPeriod(value);
245
229
  }
246
230
  }
247
231
  //# sourceMappingURL=bluetooth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../lib/bluetooth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../lib/bluetooth.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { BoardVersion } from "./device";
6
+ import { BoardVersion } from "./device.js";
7
7
  /**
8
8
  * Validates micro:bit board IDs.
9
9
  */
@@ -32,4 +32,5 @@ export declare class BoardId {
32
32
  * @throws if the ID isn't known.
33
33
  */
34
34
  static parse(value: string): BoardId;
35
+ static forVersion(boardVersion: BoardVersion): BoardId;
35
36
  }
package/build/board-id.js CHANGED
@@ -53,6 +53,14 @@ export class BoardId {
53
53
  static parse(value) {
54
54
  return new BoardId(parseInt(value, 16));
55
55
  }
56
+ static forVersion(boardVersion) {
57
+ switch (boardVersion) {
58
+ case "V1":
59
+ return this.v1Normalized;
60
+ case "V2":
61
+ return this.v2Normalized;
62
+ }
63
+ }
56
64
  }
57
65
  Object.defineProperty(BoardId, "v1Normalized", {
58
66
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"board-id.js","sourceRoot":"","sources":["../lib/board-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;;AAlDc;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
1
+ {"version":3,"file":"board-id.js","sourceRoot":"","sources":["../lib/board-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA0B;QAC1C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;;AA3Dc;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { BoardId } from "./board-id";
6
+ import { BoardId } from "./board-id.js";
7
7
  export declare class BoardSerialInfo {
8
8
  id: BoardId;
9
9
  familyId: string;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { BoardId } from "./board-id";
6
+ import { BoardId } from "./board-id.js";
7
7
  export class BoardSerialInfo {
8
8
  constructor(id, familyId, hic) {
9
9
  Object.defineProperty(this, "id", {
@@ -1 +1 @@
1
- {"version":3,"file":"board-serial-info.js","sourceRoot":"","sources":["../lib/board-serial-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,OAAO,eAAe;IAC1B,YACS,EAAW,EACX,QAAgB,EAChB,GAAW;QAFlB;;;;mBAAO,EAAE;WAAS;QAClB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,GAAG;WAAQ;IACjB,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,GAA0B;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAsB;QACvB,OAAO,CACL,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACpB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAChC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CACvB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"board-serial-info.js","sourceRoot":"","sources":["../lib/board-serial-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,eAAe;IAC1B,YACS,EAAW,EACX,QAAgB,EAChB,GAAW;QAFlB;;;;mBAAO,EAAE;WAAS;QAClB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,GAAG;WAAQ;IACjB,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,GAA0B;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAsB;QACvB,OAAO,CACL,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACpB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAChC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CACvB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { GattOperation, Service } from "./bluetooth-device-wrapper.js";
2
+ import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
3
+ export declare class ButtonService implements Service {
4
+ private buttonACharacteristic;
5
+ private buttonBCharacteristic;
6
+ private dispatchTypedEvent;
7
+ constructor(buttonACharacteristic: BluetoothRemoteGATTCharacteristic, buttonBCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher);
8
+ static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: (gattOperation: GattOperation) => void, listenerInit: boolean): Promise<ButtonService | undefined>;
9
+ private dataViewToButtonState;
10
+ startNotifications(type: TypedServiceEvent): Promise<void>;
11
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
12
+ private characteristicForEvent;
13
+ }
@@ -0,0 +1,76 @@
1
+ import { profile } from "./bluetooth-profile.js";
2
+ import { ButtonEvent } from "./buttons.js";
3
+ import { BackgroundErrorEvent, DeviceError } from "./device.js";
4
+ export class ButtonService {
5
+ constructor(buttonACharacteristic, buttonBCharacteristic, dispatchTypedEvent) {
6
+ Object.defineProperty(this, "buttonACharacteristic", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: buttonACharacteristic
11
+ });
12
+ Object.defineProperty(this, "buttonBCharacteristic", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: buttonBCharacteristic
17
+ });
18
+ Object.defineProperty(this, "dispatchTypedEvent", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: dispatchTypedEvent
23
+ });
24
+ for (const type of ["buttonachanged", "buttonbchanged"]) {
25
+ this.characteristicForEvent(type)?.addEventListener("characteristicvaluechanged", (event) => {
26
+ const target = event.target;
27
+ const data = this.dataViewToButtonState(target.value);
28
+ this.dispatchTypedEvent(type, new ButtonEvent(type, data));
29
+ });
30
+ }
31
+ }
32
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
33
+ let buttonService;
34
+ try {
35
+ buttonService = await gattServer.getPrimaryService(profile.button.id);
36
+ }
37
+ catch (err) {
38
+ if (listenerInit) {
39
+ dispatcher("backgrounderror", new BackgroundErrorEvent(err));
40
+ return;
41
+ }
42
+ else {
43
+ throw new DeviceError({
44
+ code: "service-missing",
45
+ message: err,
46
+ });
47
+ }
48
+ }
49
+ const buttonACharacteristic = await buttonService.getCharacteristic(profile.button.characteristics.a.id);
50
+ const buttonBCharacteristic = await buttonService.getCharacteristic(profile.button.characteristics.b.id);
51
+ return new ButtonService(buttonACharacteristic, buttonBCharacteristic, dispatcher);
52
+ }
53
+ dataViewToButtonState(dataView) {
54
+ return dataView.getUint8(0);
55
+ }
56
+ async startNotifications(type) {
57
+ await this.characteristicForEvent(type)?.startNotifications();
58
+ }
59
+ async stopNotifications(type) {
60
+ await this.characteristicForEvent(type)?.stopNotifications();
61
+ }
62
+ characteristicForEvent(type) {
63
+ switch (type) {
64
+ case "buttonachanged": {
65
+ return this.buttonACharacteristic;
66
+ }
67
+ case "buttonbchanged": {
68
+ return this.buttonBCharacteristic;
69
+ }
70
+ default: {
71
+ return undefined;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=button-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-service.js","sourceRoot":"","sources":["../lib/button-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare enum ButtonState {
2
+ NotPressed = 0,
3
+ ShortPress = 1,
4
+ LongPress = 2
5
+ }
6
+ export type ButtonEventType = "buttonachanged" | "buttonbchanged";
7
+ export declare class ButtonEvent extends Event {
8
+ readonly state: ButtonState;
9
+ constructor(type: ButtonEventType, state: ButtonState);
10
+ }
@@ -0,0 +1,18 @@
1
+ export var ButtonState;
2
+ (function (ButtonState) {
3
+ ButtonState[ButtonState["NotPressed"] = 0] = "NotPressed";
4
+ ButtonState[ButtonState["ShortPress"] = 1] = "ShortPress";
5
+ ButtonState[ButtonState["LongPress"] = 2] = "LongPress";
6
+ })(ButtonState || (ButtonState = {}));
7
+ export class ButtonEvent extends Event {
8
+ constructor(type, state) {
9
+ super(type);
10
+ Object.defineProperty(this, "state", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: state
15
+ });
16
+ }
17
+ }
18
+ //# sourceMappingURL=buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../lib/buttons.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,uDAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAID,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YACE,IAAqB,EACL,KAAkB;QAElC,KAAK,CAAC,IAAI,CAAC,CAAC;QAFZ;;;;mBAAgB,KAAK;WAAa;IAGpC,CAAC;CACF"}
@@ -6,6 +6,7 @@
6
6
  export declare const FICR: {
7
7
  CODEPAGESIZE: number;
8
8
  CODESIZE: number;
9
+ DEVICE_ID_1: number;
9
10
  };
10
11
  export declare const DapCmd: {
11
12
  DAP_INFO: number;
@@ -12,6 +12,7 @@
12
12
  export const FICR = {
13
13
  CODEPAGESIZE: 0x10000000 | 0x10,
14
14
  CODESIZE: 0x10000000 | 0x14,
15
+ DEVICE_ID_1: 0x10000000 | 0x64,
15
16
  };
16
17
  export const DapCmd = {
17
18
  DAP_INFO: 0x00,
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACjB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;IAC3B,aAAa;CACd,CAAC;AACF,GAAG,CAAC,SAAS;IACX,GAAG,CAAC,YAAY;QAChB,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,SAAS;QACb,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,YAAY,CAAC;AAEnB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,IAAI,CAAC;IACb,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,UAAU;IACjB,gDAAgD;IAChD,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAE1B,iBAAiB;IACjB,KAAK,EAAE,UAAU;IAEjB,4CAA4C;IAC5C,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAC/B,sBAAsB,EAAE,CAAC,IAAI,CAAC;IAE9B,aAAa;CACd,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACjB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;IAE3B,WAAW,EAAE,UAAU,GAAG,IAAI;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;IAC3B,aAAa;CACd,CAAC;AACF,GAAG,CAAC,SAAS;IACX,GAAG,CAAC,YAAY;QAChB,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,SAAS;QACb,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,YAAY,CAAC;AAEnB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,IAAI,CAAC;IACb,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,UAAU;IACjB,gDAAgD;IAChD,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAE1B,iBAAiB;IACjB,KAAK,EAAE,UAAU;IAEjB,4CAA4C;IAC5C,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAC/B,sBAAsB,EAAE,CAAC,IAAI,CAAC;IAE9B,aAAa;CACd,CAAC"}
package/build/device.d.ts CHANGED
@@ -3,8 +3,7 @@
3
3
  *
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- import { TypedEventTarget } from "./events";
7
- import { BoardId } from "./board-id";
6
+ import { TypedEventTarget } from "./events.js";
8
7
  /**
9
8
  * Specific identified error types.
10
9
  *
@@ -34,7 +33,15 @@ export type DeviceErrorCode =
34
33
  /**
35
34
  * This is the fallback error case suggesting that the user reconnects their device.
36
35
  */
37
- | "reconnect-microbit";
36
+ | "reconnect-microbit"
37
+ /**
38
+ * Error occured during serial or bluetooth communication.
39
+ */
40
+ | "background-comms-error"
41
+ /**
42
+ * Bluetooth service is missing on device.
43
+ */
44
+ | "service-missing";
38
45
  /**
39
46
  * Error type used for all interactions with this module.
40
47
  *
@@ -59,7 +66,7 @@ export declare enum ConnectionStatus {
59
66
  * Determining whether the connection type is supported requires
60
67
  * initialize() to complete.
61
68
  */
62
- SUPPORT_NOT_KNOWN = 0,
69
+ SUPPORT_NOT_KNOWN = "SUPPORT_NOT_KNOWN",
63
70
  /**
64
71
  * Not supported.
65
72
  */
@@ -70,7 +77,7 @@ export declare enum ConnectionStatus {
70
77
  * This will be the case even when a device is physically connected
71
78
  * but has not been connected via the browser security UI.
72
79
  */
73
- NO_AUTHORIZED_DEVICE = "NO_DEVICE",
80
+ NO_AUTHORIZED_DEVICE = "NO_AUTHORIZED_DEVICE",
74
81
  /**
75
82
  * Authorized device available but we haven't connected to it.
76
83
  */
@@ -82,29 +89,7 @@ export declare enum ConnectionStatus {
82
89
  }
83
90
  export declare class FlashDataError extends Error {
84
91
  }
85
- export interface FlashDataSource {
86
- /**
87
- * For now we only support partially flashing contiguous data.
88
- * This can be generated from microbit-fs directly (via getIntelHexBytes())
89
- * or from an existing Intel Hex via slicePad.
90
- *
91
- * This interface is quite confusing and worth revisiting.
92
- *
93
- * @param boardId the id of the board.
94
- * @throws FlashDataError if we cannot generate hex data.
95
- */
96
- partialFlashData(boardId: BoardId): Promise<Uint8Array>;
97
- /**
98
- * @param boardId the id of the board.
99
- * @returns A board-specific (non-universal) Intel Hex file for the given board id.
100
- * @throws FlashDataError if we cannot generate hex data.
101
- */
102
- fullFlashData(boardId: BoardId): Promise<string>;
103
- }
104
- export interface ConnectOptions {
105
- serial?: boolean;
106
- name?: string;
107
- }
92
+ export type FlashDataSource = (boardVersion: BoardVersion) => Promise<string | Uint8Array>;
108
93
  export type BoardVersion = "V1" | "V2";
109
94
  export declare class ConnectionStatusEvent extends Event {
110
95
  readonly status: ConnectionStatus;
@@ -130,6 +115,10 @@ export declare class BeforeRequestDevice extends Event {
130
115
  export declare class AfterRequestDevice extends Event {
131
116
  constructor();
132
117
  }
118
+ export declare class BackgroundErrorEvent extends Event {
119
+ readonly errorMessage: string;
120
+ constructor(errorMessage: string);
121
+ }
133
122
  export declare class DeviceConnectionEventMap {
134
123
  "status": ConnectionStatusEvent;
135
124
  "serialdata": SerialDataEvent;
@@ -138,6 +127,7 @@ export declare class DeviceConnectionEventMap {
138
127
  "flash": Event;
139
128
  "beforerequestdevice": Event;
140
129
  "afterrequestdevice": Event;
130
+ "backgrounderror": BackgroundErrorEvent;
141
131
  }
142
132
  export interface DeviceConnection extends TypedEventTarget<DeviceConnectionEventMap> {
143
133
  status: ConnectionStatus;
@@ -155,7 +145,7 @@ export interface DeviceConnection extends TypedEventTarget<DeviceConnectionEvent
155
145
  *
156
146
  * @returns the final connection status.
157
147
  */
158
- connect(options?: ConnectOptions): Promise<ConnectionStatus>;
148
+ connect(): Promise<ConnectionStatus>;
159
149
  /**
160
150
  * Get the board version.
161
151
  *
package/build/device.js CHANGED
@@ -28,7 +28,7 @@ export var ConnectionStatus;
28
28
  * Determining whether the connection type is supported requires
29
29
  * initialize() to complete.
30
30
  */
31
- ConnectionStatus[ConnectionStatus["SUPPORT_NOT_KNOWN"] = 0] = "SUPPORT_NOT_KNOWN";
31
+ ConnectionStatus["SUPPORT_NOT_KNOWN"] = "SUPPORT_NOT_KNOWN";
32
32
  /**
33
33
  * Not supported.
34
34
  */
@@ -39,7 +39,7 @@ export var ConnectionStatus;
39
39
  * This will be the case even when a device is physically connected
40
40
  * but has not been connected via the browser security UI.
41
41
  */
42
- ConnectionStatus["NO_AUTHORIZED_DEVICE"] = "NO_DEVICE";
42
+ ConnectionStatus["NO_AUTHORIZED_DEVICE"] = "NO_AUTHORIZED_DEVICE";
43
43
  /**
44
44
  * Authorized device available but we haven't connected to it.
45
45
  */
@@ -104,6 +104,17 @@ export class AfterRequestDevice extends Event {
104
104
  super("afterrequestdevice");
105
105
  }
106
106
  }
107
+ export class BackgroundErrorEvent extends Event {
108
+ constructor(errorMessage) {
109
+ super("backgrounderror");
110
+ Object.defineProperty(this, "errorMessage", {
111
+ enumerable: true,
112
+ configurable: true,
113
+ writable: true,
114
+ value: errorMessage
115
+ });
116
+ }
117
+ }
107
118
  export class DeviceConnectionEventMap {
108
119
  constructor() {
109
120
  Object.defineProperty(this, "status", {
@@ -148,6 +159,12 @@ export class DeviceConnectionEventMap {
148
159
  writable: true,
149
160
  value: void 0
150
161
  });
162
+ Object.defineProperty(this, "backgrounderror", {
163
+ enumerable: true,
164
+ configurable: true,
165
+ writable: true,
166
+ value: void 0
167
+ });
151
168
  }
152
169
  }
153
170
  //# sourceMappingURL=device.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../lib/device.ts"],"names":[],"mappings":"AAuCA;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAEpC,YAAY,EAAE,IAAI,EAAE,OAAO,EAA+C;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFjB;;;;;WAAsB;QAGpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAyBX;AAzBD,WAAY,gBAAgB;IAC1B;;;OAGG;IACH,iFAAiB,CAAA;IACjB;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;;;;OAKG;IACH,sDAAkC,CAAA;IAClC;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;OAEG;IACH,2CAAuB,CAAA;AACzB,CAAC,EAzBW,gBAAgB,KAAhB,gBAAgB,QAyB3B;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AA+B5C,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,MAAwB;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QADN;;;;mBAAgB,MAAM;WAAkB;IAEpD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAA4B,IAAY;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;QADV;;;;mBAAgB,IAAI;WAAQ;IAExC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAA4B,KAAc;QACxC,KAAK,CAAC,aAAa,CAAC,CAAC;QADX;;;;mBAAgB,KAAK;WAAS;IAE1C,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IAArC;QACE,4BAAA,QAAQ;;;;;WAAwB;QAChC,4BAAA,YAAY;;;;;WAAkB;QAC9B,4BAAA,aAAa;;;;;WAAQ;QACrB,4BAAA,aAAa;;;;;WAAQ;QACrB,4BAAA,OAAO;;;;;WAAQ;QACf,4BAAA,qBAAqB;;;;;WAAQ;QAC7B,4BAAA,oBAAoB;;;;;WAAQ;IAC9B,CAAC;CAAA"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../lib/device.ts"],"names":[],"mappings":"AA8CA;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAEpC,YAAY,EAAE,IAAI,EAAE,OAAO,EAA+C;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFjB;;;;;WAAsB;QAGpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAyBX;AAzBD,WAAY,gBAAgB;IAC1B;;;OAGG;IACH,2DAAuC,CAAA;IACvC;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;;;;OAKG;IACH,iEAA6C,CAAA;IAC7C;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;OAEG;IACH,2CAAuB,CAAA;AACzB,CAAC,EAzBW,gBAAgB,KAAhB,gBAAgB,QAyB3B;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAQ5C,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,MAAwB;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QADN;;;;mBAAgB,MAAM;WAAkB;IAEpD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAA4B,IAAY;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;QADV;;;;mBAAgB,IAAI;WAAQ;IAExC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAA4B,KAAc;QACxC,KAAK,CAAC,aAAa,CAAC,CAAC;QADX;;;;mBAAgB,KAAK;WAAS;IAE1C,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAA4B,YAAoB;QAC9C,KAAK,CAAC,iBAAiB,CAAC,CAAC;QADf;;;;mBAAgB,YAAY;WAAQ;IAEhD,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IAArC;QACE,4BAAA,QAAQ;;;;;WAAwB;QAChC,4BAAA,YAAY;;;;;WAAkB;QAC9B,4BAAA,aAAa;;;;;WAAQ;QACrB,4BAAA,aAAa;;;;;WAAQ;QACrB,4BAAA,OAAO;;;;;WAAQ;QACf,4BAAA,qBAAqB;;;;;WAAQ;QAC7B,4BAAA,oBAAoB;;;;;WAAQ;QAC5B,4BAAA,iBAAiB;;;;;WAAuB;IAC1C,CAAC;CAAA"}
@@ -1,9 +1,7 @@
1
- import { BoardId } from "./board-id";
2
- import { FlashDataSource } from "./device";
3
- export declare class HexFlashDataSource implements FlashDataSource {
4
- private hex;
5
- constructor(hex: string);
6
- partialFlashData(boardId: BoardId): Promise<Uint8Array>;
7
- fullFlashData(boardId: BoardId): Promise<string>;
8
- private matchingPart;
9
- }
1
+ import { FlashDataSource } from "./device.js";
2
+ /**
3
+ * A flash data source that converts universal hex files as needed.
4
+ *
5
+ * @param universalHex A hex file, potentially universal.
6
+ */
7
+ export declare const createUniversalHexFlashDataSource: (universalHex: string) => FlashDataSource;