@microbit/microbit-connection 0.0.0-alpha.9 → 0.1.0

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 (229) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +94 -5
  3. package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +3 -3
  4. package/build/cjs/accelerometer-service.js +106 -0
  5. package/build/cjs/accelerometer-service.js.map +1 -0
  6. package/build/cjs/accelerometer.js +16 -0
  7. package/build/cjs/accelerometer.js.map +1 -0
  8. package/build/cjs/async-util.js +27 -0
  9. package/build/cjs/async-util.js.map +1 -0
  10. package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +23 -15
  11. package/build/cjs/bluetooth-device-wrapper.js +467 -0
  12. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  13. package/build/cjs/bluetooth-profile.js +86 -0
  14. package/build/cjs/bluetooth-profile.js.map +1 -0
  15. package/build/cjs/bluetooth.d.ts +108 -0
  16. package/build/cjs/bluetooth.js +272 -0
  17. package/build/cjs/bluetooth.js.map +1 -0
  18. package/build/cjs/board-id.js +81 -0
  19. package/build/cjs/board-id.js.map +1 -0
  20. package/build/cjs/board-serial-info.js +51 -0
  21. package/build/cjs/board-serial-info.js.map +1 -0
  22. package/build/{button-service.d.ts → cjs/button-service.d.ts} +2 -2
  23. package/build/cjs/button-service.js +80 -0
  24. package/build/cjs/button-service.js.map +1 -0
  25. package/build/cjs/buttons.js +22 -0
  26. package/build/cjs/buttons.js.map +1 -0
  27. package/build/cjs/constants.js +73 -0
  28. package/build/cjs/constants.js.map +1 -0
  29. package/build/{device.d.ts → cjs/device.d.ts} +35 -46
  30. package/build/cjs/device.js +133 -0
  31. package/build/cjs/device.js.map +1 -0
  32. package/build/{events.d.ts → cjs/events.d.ts} +12 -3
  33. package/build/cjs/events.js +109 -0
  34. package/build/cjs/events.js.map +1 -0
  35. package/build/cjs/hex-flash-data-source.js +26 -0
  36. package/build/cjs/hex-flash-data-source.js.map +1 -0
  37. package/build/cjs/index.d.ts +17 -0
  38. package/build/cjs/index.js +36 -0
  39. package/build/cjs/index.js.map +1 -0
  40. package/build/cjs/led-service.d.ts +20 -0
  41. package/build/cjs/led-service.js +120 -0
  42. package/build/cjs/led-service.js.map +1 -0
  43. package/build/cjs/led.d.ts +6 -0
  44. package/build/cjs/led.js +3 -0
  45. package/build/cjs/led.js.map +1 -0
  46. package/build/{logging.d.ts → cjs/logging.d.ts} +3 -3
  47. package/build/cjs/logging.js +16 -0
  48. package/build/cjs/logging.js.map +1 -0
  49. package/build/cjs/magnetometer-service.d.ts +22 -0
  50. package/build/cjs/magnetometer-service.js +129 -0
  51. package/build/cjs/magnetometer-service.js.map +1 -0
  52. package/build/cjs/magnetometer.d.ts +9 -0
  53. package/build/cjs/magnetometer.js +16 -0
  54. package/build/cjs/magnetometer.js.map +1 -0
  55. package/build/cjs/package.json +1 -0
  56. package/build/cjs/promise-queue.d.ts +27 -0
  57. package/build/cjs/promise-queue.js +78 -0
  58. package/build/cjs/promise-queue.js.map +1 -0
  59. package/build/cjs/serial-events.d.ts +20 -0
  60. package/build/cjs/serial-events.js +69 -0
  61. package/build/cjs/serial-events.js.map +1 -0
  62. package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
  63. package/build/cjs/service-events.js +39 -0
  64. package/build/cjs/service-events.js.map +1 -0
  65. package/build/cjs/setupTests.js.map +1 -0
  66. package/build/cjs/uart-service.d.ts +13 -0
  67. package/build/cjs/uart-service.js +76 -0
  68. package/build/cjs/uart-service.js.map +1 -0
  69. package/build/cjs/uart.d.ts +4 -0
  70. package/build/cjs/uart.js +16 -0
  71. package/build/cjs/uart.js.map +1 -0
  72. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +2 -6
  73. package/build/cjs/usb-device-wrapper.js +412 -0
  74. package/build/cjs/usb-device-wrapper.js.map +1 -0
  75. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  76. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  77. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -3
  78. package/build/cjs/usb-partial-flashing.js +341 -0
  79. package/build/cjs/usb-partial-flashing.js.map +1 -0
  80. package/build/cjs/usb-radio-bridge.d.ts +24 -0
  81. package/build/cjs/usb-radio-bridge.js +516 -0
  82. package/build/cjs/usb-radio-bridge.js.map +1 -0
  83. package/build/cjs/usb-serial-protocol.js +183 -0
  84. package/build/cjs/usb-serial-protocol.js.map +1 -0
  85. package/build/cjs/usb.d.ts +64 -0
  86. package/build/cjs/usb.js +647 -0
  87. package/build/cjs/usb.js.map +1 -0
  88. package/build/esm/accelerometer-service.d.ts +18 -0
  89. package/build/{accelerometer-service.js → esm/accelerometer-service.js} +4 -20
  90. package/build/esm/accelerometer-service.js.map +1 -0
  91. package/build/esm/accelerometer.d.ts +9 -0
  92. package/build/esm/accelerometer.js.map +1 -0
  93. package/build/esm/async-util.d.ts +13 -0
  94. package/build/esm/async-util.js.map +1 -0
  95. package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
  96. package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +105 -75
  97. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  98. package/build/esm/bluetooth-profile.d.ts +139 -0
  99. package/build/esm/bluetooth-profile.js.map +1 -0
  100. package/build/esm/bluetooth.d.ts +108 -0
  101. package/build/{bluetooth.js → esm/bluetooth.js} +73 -36
  102. package/build/esm/bluetooth.js.map +1 -0
  103. package/build/esm/board-id.d.ts +36 -0
  104. package/build/esm/board-id.js.map +1 -0
  105. package/build/esm/board-serial-info.d.ts +14 -0
  106. package/build/esm/board-serial-info.js.map +1 -0
  107. package/build/esm/button-service.d.ts +13 -0
  108. package/build/esm/button-service.js.map +1 -0
  109. package/build/esm/buttons.d.ts +10 -0
  110. package/build/esm/buttons.js.map +1 -0
  111. package/build/esm/constants.d.ts +48 -0
  112. package/build/esm/constants.js.map +1 -0
  113. package/build/esm/device.d.ts +181 -0
  114. package/build/{device.js → esm/device.js} +11 -58
  115. package/build/esm/device.js.map +1 -0
  116. package/build/esm/events.d.ts +110 -0
  117. package/build/esm/events.js +104 -0
  118. package/build/esm/events.js.map +1 -0
  119. package/build/esm/hex-flash-data-source.d.ts +7 -0
  120. package/build/esm/hex-flash-data-source.js.map +1 -0
  121. package/build/esm/index.d.ts +17 -0
  122. package/build/esm/index.js +12 -0
  123. package/build/esm/index.js.map +1 -0
  124. package/build/esm/led-service.d.ts +20 -0
  125. package/build/esm/led-service.js +116 -0
  126. package/build/esm/led-service.js.map +1 -0
  127. package/build/esm/led.d.ts +6 -0
  128. package/build/esm/led.js +2 -0
  129. package/build/esm/led.js.map +1 -0
  130. package/build/esm/logging.d.ts +21 -0
  131. package/build/esm/logging.js.map +1 -0
  132. package/build/esm/magnetometer-service.d.ts +22 -0
  133. package/build/esm/magnetometer-service.js +125 -0
  134. package/build/esm/magnetometer-service.js.map +1 -0
  135. package/build/esm/magnetometer.d.ts +9 -0
  136. package/build/esm/magnetometer.js +12 -0
  137. package/build/esm/magnetometer.js.map +1 -0
  138. package/build/esm/package.json +1 -0
  139. package/build/esm/promise-queue.d.ts +27 -0
  140. package/build/esm/promise-queue.js +74 -0
  141. package/build/esm/promise-queue.js.map +1 -0
  142. package/build/esm/serial-events.d.ts +20 -0
  143. package/build/esm/serial-events.js +61 -0
  144. package/build/esm/serial-events.js.map +1 -0
  145. package/build/esm/service-events.d.ts +17 -0
  146. package/build/{service-events.js → esm/service-events.js} +12 -0
  147. package/build/esm/service-events.js.map +1 -0
  148. package/build/esm/setupTests.d.ts +6 -0
  149. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  150. package/build/esm/uart-service.d.ts +13 -0
  151. package/build/esm/uart-service.js +72 -0
  152. package/build/esm/uart-service.js.map +1 -0
  153. package/build/esm/uart.d.ts +4 -0
  154. package/build/esm/uart.js +12 -0
  155. package/build/esm/uart.js.map +1 -0
  156. package/build/esm/usb-device-wrapper.d.ts +47 -0
  157. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +36 -12
  158. package/build/esm/usb-device-wrapper.js.map +1 -0
  159. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  160. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  161. package/build/esm/usb-partial-flashing.d.ts +69 -0
  162. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
  163. package/build/esm/usb-partial-flashing.js.map +1 -0
  164. package/build/esm/usb-radio-bridge.d.ts +24 -0
  165. package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +133 -47
  166. package/build/esm/usb-radio-bridge.js.map +1 -0
  167. package/build/esm/usb-serial-protocol.d.ts +66 -0
  168. package/build/esm/usb-serial-protocol.js.map +1 -0
  169. package/build/esm/usb.d.ts +64 -0
  170. package/build/{usb.js → esm/usb.js} +188 -67
  171. package/build/esm/usb.js.map +1 -0
  172. package/package.json +23 -9
  173. package/typedoc.json +14 -0
  174. package/build/accelerometer-service.js.map +0 -1
  175. package/build/accelerometer.js.map +0 -1
  176. package/build/async-util.js.map +0 -1
  177. package/build/bluetooth-device-wrapper.js.map +0 -1
  178. package/build/bluetooth-profile.js.map +0 -1
  179. package/build/bluetooth-utils.d.ts +0 -5
  180. package/build/bluetooth-utils.js +0 -14
  181. package/build/bluetooth-utils.js.map +0 -1
  182. package/build/bluetooth.d.ts +0 -49
  183. package/build/bluetooth.js.map +0 -1
  184. package/build/board-id.js.map +0 -1
  185. package/build/board-serial-info.js.map +0 -1
  186. package/build/button-service.js.map +0 -1
  187. package/build/buttons.js.map +0 -1
  188. package/build/constants.js.map +0 -1
  189. package/build/device.js.map +0 -1
  190. package/build/events.js +0 -19
  191. package/build/events.js.map +0 -1
  192. package/build/hex-flash-data-source.js.map +0 -1
  193. package/build/index.d.ts +0 -10
  194. package/build/index.js +0 -8
  195. package/build/index.js.map +0 -1
  196. package/build/logging.js.map +0 -1
  197. package/build/service-events.js.map +0 -1
  198. package/build/usb-device-wrapper.js.map +0 -1
  199. package/build/usb-partial-flashing-utils.js.map +0 -1
  200. package/build/usb-partial-flashing.js.map +0 -1
  201. package/build/usb-radio-bridge.d.ts +0 -37
  202. package/build/usb-radio-bridge.js.map +0 -1
  203. package/build/usb-serial-protocol.js.map +0 -1
  204. package/build/usb.d.ts +0 -60
  205. package/build/usb.js.map +0 -1
  206. package/vite.config.ts +0 -32
  207. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  208. /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
  209. /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +0 -0
  210. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  211. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  212. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  213. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  214. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  215. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  216. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  217. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  218. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  219. /package/build/{async-util.js → esm/async-util.js} +0 -0
  220. /package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +0 -0
  221. /package/build/{board-id.js → esm/board-id.js} +0 -0
  222. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  223. /package/build/{button-service.js → esm/button-service.js} +0 -0
  224. /package/build/{buttons.js → esm/buttons.js} +0 -0
  225. /package/build/{constants.js → esm/constants.js} +0 -0
  226. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  227. /package/build/{logging.js → esm/logging.js} +0 -0
  228. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  229. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
@@ -0,0 +1,125 @@
1
+ import { MagnetometerDataEvent } from "./magnetometer.js";
2
+ import { profile } from "./bluetooth-profile.js";
3
+ import { BackgroundErrorEvent, DeviceError } from "./device.js";
4
+ export class MagnetometerService {
5
+ constructor(magnetometerDataCharacteristic, magnetometerPeriodCharacteristic, magnetometerBearingCharacteristic, magnetometerCalibrationCharacteristic, dispatchTypedEvent, queueGattOperation) {
6
+ Object.defineProperty(this, "magnetometerDataCharacteristic", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: magnetometerDataCharacteristic
11
+ });
12
+ Object.defineProperty(this, "magnetometerPeriodCharacteristic", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: magnetometerPeriodCharacteristic
17
+ });
18
+ Object.defineProperty(this, "magnetometerBearingCharacteristic", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: magnetometerBearingCharacteristic
23
+ });
24
+ Object.defineProperty(this, "magnetometerCalibrationCharacteristic", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: magnetometerCalibrationCharacteristic
29
+ });
30
+ Object.defineProperty(this, "dispatchTypedEvent", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: dispatchTypedEvent
35
+ });
36
+ Object.defineProperty(this, "queueGattOperation", {
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true,
40
+ value: queueGattOperation
41
+ });
42
+ this.magnetometerDataCharacteristic.addEventListener("characteristicvaluechanged", (event) => {
43
+ const target = event.target;
44
+ const data = this.dataViewToData(target.value);
45
+ this.dispatchTypedEvent("magnetometerdatachanged", new MagnetometerDataEvent(data));
46
+ });
47
+ }
48
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
49
+ let magnetometerService;
50
+ try {
51
+ magnetometerService = await gattServer.getPrimaryService(profile.magnetometer.id);
52
+ }
53
+ catch (err) {
54
+ if (listenerInit) {
55
+ dispatcher("backgrounderror", new BackgroundErrorEvent(err));
56
+ return;
57
+ }
58
+ else {
59
+ throw new DeviceError({
60
+ code: "service-missing",
61
+ message: err,
62
+ });
63
+ }
64
+ }
65
+ const magnetometerDataCharacteristic = await magnetometerService.getCharacteristic(profile.magnetometer.characteristics.data.id);
66
+ const magnetometerPeriodCharacteristic = await magnetometerService.getCharacteristic(profile.magnetometer.characteristics.period.id);
67
+ const magnetometerBearingCharacteristic = await magnetometerService.getCharacteristic(profile.magnetometer.characteristics.bearing.id);
68
+ const magnetometerCalibrationCharacteristic = await magnetometerService.getCharacteristic(profile.magnetometer.characteristics.calibration.id);
69
+ return new MagnetometerService(magnetometerDataCharacteristic, magnetometerPeriodCharacteristic, magnetometerBearingCharacteristic, magnetometerCalibrationCharacteristic, dispatcher, queueGattOperation);
70
+ }
71
+ dataViewToData(dataView) {
72
+ return {
73
+ x: dataView.getInt16(0, true),
74
+ y: dataView.getInt16(2, true),
75
+ z: dataView.getInt16(4, true),
76
+ };
77
+ }
78
+ async getData() {
79
+ const dataView = await this.queueGattOperation(() => this.magnetometerDataCharacteristic.readValue());
80
+ return this.dataViewToData(dataView);
81
+ }
82
+ async getPeriod() {
83
+ const dataView = await this.queueGattOperation(() => this.magnetometerPeriodCharacteristic.readValue());
84
+ return dataView.getUint16(0, true);
85
+ }
86
+ async setPeriod(value) {
87
+ if (value === 0) {
88
+ // Writing 0 causes the device to crash.
89
+ return;
90
+ }
91
+ // Allowed values: 10, 20, 50, 100
92
+ // Values passed are rounded up to the allowed values on device.
93
+ // Documentation for allowed values looks wrong.
94
+ // https://lancaster-university.github.io/microbit-docs/ble/profile/#about-the-magnetometer-service
95
+ const dataView = new DataView(new ArrayBuffer(2));
96
+ dataView.setUint16(0, value, true);
97
+ return this.queueGattOperation(() => this.magnetometerPeriodCharacteristic.writeValue(dataView));
98
+ }
99
+ async getBearing() {
100
+ const dataView = await this.queueGattOperation(() => this.magnetometerBearingCharacteristic.readValue());
101
+ return dataView.getUint16(0, true);
102
+ }
103
+ async triggerCalibration() {
104
+ const dataView = new DataView(new ArrayBuffer(1));
105
+ dataView.setUint8(0, 1);
106
+ return this.queueGattOperation(() => this.magnetometerCalibrationCharacteristic.writeValue(dataView));
107
+ }
108
+ async startNotifications(type) {
109
+ await this.characteristicForEvent(type)?.startNotifications();
110
+ }
111
+ async stopNotifications(type) {
112
+ await this.characteristicForEvent(type)?.stopNotifications();
113
+ }
114
+ characteristicForEvent(type) {
115
+ switch (type) {
116
+ case "magnetometerdatachanged": {
117
+ return this.magnetometerDataCharacteristic;
118
+ }
119
+ default: {
120
+ return undefined;
121
+ }
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=magnetometer-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnetometer-service.js","sourceRoot":"","sources":["../../lib/magnetometer-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface MagnetometerData {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ }
6
+ export declare class MagnetometerDataEvent extends Event {
7
+ readonly data: MagnetometerData;
8
+ constructor(data: MagnetometerData);
9
+ }
@@ -0,0 +1,12 @@
1
+ export class MagnetometerDataEvent extends Event {
2
+ constructor(data) {
3
+ super("magnetometerdatachanged");
4
+ Object.defineProperty(this, "data", {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value: data
9
+ });
10
+ }
11
+ }
12
+ //# sourceMappingURL=magnetometer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnetometer.js","sourceRoot":"","sources":["../../lib/magnetometer.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,IAAsB;QAChD,KAAK,CAAC,yBAAyB,CAAC,CAAC;QADvB;;;;mBAAgB,IAAI;WAAkB;IAElD,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -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"}
@@ -0,0 +1,20 @@
1
+ export declare class SerialDataEvent extends Event {
2
+ readonly data: string;
3
+ constructor(data: string);
4
+ }
5
+ export declare class SerialResetEvent extends Event {
6
+ constructor();
7
+ }
8
+ export declare class SerialErrorEvent extends Event {
9
+ readonly error: unknown;
10
+ constructor(error: unknown);
11
+ }
12
+ export declare class FlashEvent extends Event {
13
+ constructor();
14
+ }
15
+ export declare class SerialConnectionEventMap {
16
+ "serialdata": SerialDataEvent;
17
+ "serialreset": SerialResetEvent;
18
+ "serialerror": SerialErrorEvent;
19
+ "flash": FlashEvent;
20
+ }
@@ -0,0 +1,61 @@
1
+ export class SerialDataEvent extends Event {
2
+ constructor(data) {
3
+ super("serialdata");
4
+ Object.defineProperty(this, "data", {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value: data
9
+ });
10
+ }
11
+ }
12
+ export class SerialResetEvent extends Event {
13
+ constructor() {
14
+ super("serialreset");
15
+ }
16
+ }
17
+ export class SerialErrorEvent extends Event {
18
+ constructor(error) {
19
+ super("serialerror");
20
+ Object.defineProperty(this, "error", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: error
25
+ });
26
+ }
27
+ }
28
+ export class FlashEvent extends Event {
29
+ constructor() {
30
+ super("flash");
31
+ }
32
+ }
33
+ export class SerialConnectionEventMap {
34
+ constructor() {
35
+ Object.defineProperty(this, "serialdata", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: void 0
40
+ });
41
+ Object.defineProperty(this, "serialreset", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: void 0
46
+ });
47
+ Object.defineProperty(this, "serialerror", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: void 0
52
+ });
53
+ Object.defineProperty(this, "flash", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: void 0
58
+ });
59
+ }
60
+ }
61
+ //# sourceMappingURL=serial-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serial-events.js","sourceRoot":"","sources":["../../lib/serial-events.ts"],"names":[],"mappings":"AAAA,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,wBAAwB;IAArC;QACE,4BAAA,YAAY;;;;;WAAkB;QAC9B,4BAAA,aAAa;;;;;WAAmB;QAChC,4BAAA,aAAa;;;;;WAAmB;QAChC,4BAAA,OAAO;;;;;WAAa;IACtB,CAAC;CAAA"}
@@ -0,0 +1,17 @@
1
+ import { AccelerometerDataEvent } from "./accelerometer.js";
2
+ import { ButtonEvent } from "./buttons.js";
3
+ import { DeviceConnectionEventMap } from "./device.js";
4
+ import { MagnetometerDataEvent } from "./magnetometer.js";
5
+ import { UARTDataEvent } from "./uart.js";
6
+ export declare class ServiceConnectionEventMap {
7
+ "accelerometerdatachanged": AccelerometerDataEvent;
8
+ "buttonachanged": ButtonEvent;
9
+ "buttonbchanged": ButtonEvent;
10
+ "magnetometerdatachanged": MagnetometerDataEvent;
11
+ "uartdata": UARTDataEvent;
12
+ }
13
+ export type CharacteristicDataTarget = EventTarget & {
14
+ value: DataView;
15
+ };
16
+ export type TypedServiceEvent = keyof (ServiceConnectionEventMap & DeviceConnectionEventMap);
17
+ export type TypedServiceEventDispatcher = (_type: TypedServiceEvent, event: (ServiceConnectionEventMap & DeviceConnectionEventMap)[TypedServiceEvent]) => boolean;
@@ -18,6 +18,18 @@ export class ServiceConnectionEventMap {
18
18
  writable: true,
19
19
  value: void 0
20
20
  });
21
+ Object.defineProperty(this, "magnetometerdatachanged", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "uartdata", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
21
33
  }
22
34
  }
23
35
  //# sourceMappingURL=service-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-events.js","sourceRoot":"","sources":["../../lib/service-events.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,yBAAyB;IAAtC;QACE,4BAAA,0BAA0B;;;;;WAAyB;QACnD,4BAAA,gBAAgB;;;;;WAAc;QAC9B,4BAAA,gBAAgB;;;;;WAAc;QAC9B,4BAAA,yBAAyB;;;;;WAAwB;QACjD,4BAAA,UAAU;;;;;WAAgB;IAC5B,CAAC;CAAA"}
@@ -0,0 +1,6 @@
1
+ export {};
2
+ /**
3
+ * (c) 2024, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ */
@@ -1 +1 @@
1
- {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../lib/setupTests.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
1
+ {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../lib/setupTests.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,13 @@
1
+ import { Service } from "./bluetooth-device-wrapper.js";
2
+ import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
3
+ export declare class UARTService implements Service {
4
+ private txCharacteristic;
5
+ private rxCharacteristic;
6
+ private dispatchTypedEvent;
7
+ private queueGattOperation;
8
+ constructor(txCharacteristic: BluetoothRemoteGATTCharacteristic, rxCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>);
9
+ static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<UARTService | undefined>;
10
+ startNotifications(type: TypedServiceEvent): Promise<void>;
11
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
12
+ writeData(value: Uint8Array): Promise<void>;
13
+ }
@@ -0,0 +1,72 @@
1
+ import { profile } from "./bluetooth-profile.js";
2
+ import { BackgroundErrorEvent, DeviceError } from "./device.js";
3
+ import { UARTDataEvent } from "./uart.js";
4
+ export class UARTService {
5
+ constructor(txCharacteristic, rxCharacteristic, dispatchTypedEvent, queueGattOperation) {
6
+ Object.defineProperty(this, "txCharacteristic", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: txCharacteristic
11
+ });
12
+ Object.defineProperty(this, "rxCharacteristic", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: rxCharacteristic
17
+ });
18
+ Object.defineProperty(this, "dispatchTypedEvent", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: dispatchTypedEvent
23
+ });
24
+ Object.defineProperty(this, "queueGattOperation", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: queueGattOperation
29
+ });
30
+ this.txCharacteristic.addEventListener("characteristicvaluechanged", (event) => {
31
+ const target = event.target;
32
+ const value = new Uint8Array(target.value.buffer);
33
+ this.dispatchTypedEvent("uartdata", new UARTDataEvent(value));
34
+ });
35
+ }
36
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
37
+ let uartService;
38
+ try {
39
+ uartService = await gattServer.getPrimaryService(profile.uart.id);
40
+ }
41
+ catch (err) {
42
+ if (listenerInit) {
43
+ dispatcher("backgrounderror", new BackgroundErrorEvent(err));
44
+ return;
45
+ }
46
+ else {
47
+ throw new DeviceError({
48
+ code: "service-missing",
49
+ message: err,
50
+ });
51
+ }
52
+ }
53
+ const rxCharacteristic = await uartService.getCharacteristic(profile.uart.characteristics.rx.id);
54
+ const txCharacteristic = await uartService.getCharacteristic(profile.uart.characteristics.tx.id);
55
+ return new UARTService(txCharacteristic, rxCharacteristic, dispatcher, queueGattOperation);
56
+ }
57
+ async startNotifications(type) {
58
+ if (type === "uartdata") {
59
+ await this.txCharacteristic.startNotifications();
60
+ }
61
+ }
62
+ async stopNotifications(type) {
63
+ if (type === "uartdata") {
64
+ await this.txCharacteristic.stopNotifications();
65
+ }
66
+ }
67
+ async writeData(value) {
68
+ const dataView = new DataView(value.buffer);
69
+ return this.queueGattOperation(() => this.rxCharacteristic.writeValueWithoutResponse(dataView));
70
+ }
71
+ }
72
+ //# sourceMappingURL=uart-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uart-service.js","sourceRoot":"","sources":["../../lib/uart-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAMhE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,WAAW;IACtB,YACU,gBAAmD,EACnD,gBAAmD,EACnD,kBAA+C,EAC/C,kBAA+D;QAHvE;;;;mBAAQ,gBAAgB;WAAmC;QAC3D;;;;mBAAQ,gBAAgB;WAAmC;QAC3D;;;;mBAAQ,kBAAkB;WAA6B;QACvD;;;;mBAAQ,kBAAkB;WAA6C;QAEvE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CACpC,4BAA4B,EAC5B,CAAC,KAAY,EAAE,EAAE;YACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAkC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,UAAqC,EACrC,UAAuC,EACvC,kBAA+D,EAC/D,YAAqB;QAErB,IAAI,WAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,iBAAiB,EAAE,IAAI,oBAAoB,CAAC,GAAa,CAAC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,WAAW,CAAC;oBACpB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,GAAa;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAC1D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CACnC,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAC1D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CACnC,CAAC;QACF,OAAO,IAAI,WAAW,CACpB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAiB;QAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAClC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAC1D,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare class UARTDataEvent extends Event {
2
+ readonly value: Uint8Array;
3
+ constructor(value: Uint8Array);
4
+ }
@@ -0,0 +1,12 @@
1
+ export class UARTDataEvent extends Event {
2
+ constructor(value) {
3
+ super("uartdata");
4
+ Object.defineProperty(this, "value", {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value: value
9
+ });
10
+ }
11
+ }
12
+ //# sourceMappingURL=uart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uart.js","sourceRoot":"","sources":["../../lib/uart.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAA4B,KAAiB;QAC3C,KAAK,CAAC,UAAU,CAAC,CAAC;QADR;;;;mBAAgB,KAAK;WAAY;IAE7C,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import type { CortexM, DAPLink, WebUSB } from "dapjs";
2
+ import { Logging } from "./logging.js";
3
+ import { BoardSerialInfo } from "./board-serial-info.js";
4
+ export declare class DAPWrapper {
5
+ device: USBDevice;
6
+ private logging;
7
+ transport: WebUSB;
8
+ daplink: DAPLink;
9
+ cortexM: CortexM;
10
+ _pageSize: number | undefined;
11
+ _numPages: number | undefined;
12
+ _deviceId: number | undefined;
13
+ private loggedBoardSerialInfo;
14
+ private initialConnectionComplete;
15
+ constructor(device: USBDevice, logging: Logging);
16
+ /**
17
+ * The page size. Throws if we've not connected.
18
+ */
19
+ get pageSize(): number;
20
+ /**
21
+ * The number of pages. Throws if we've not connected.
22
+ */
23
+ get numPages(): number;
24
+ /**
25
+ * The number of pages. Undefined if we've not connected.
26
+ */
27
+ get deviceId(): number | undefined;
28
+ get boardSerialInfo(): BoardSerialInfo;
29
+ reconnectAsync(): Promise<void>;
30
+ readMem32WaitOnError(register: number): Promise<number>;
31
+ startSerial(listener: (data: string) => void): Promise<void>;
32
+ stopSerial(listener: (data: string) => void): void;
33
+ disconnectAsync(): Promise<void>;
34
+ private send;
35
+ private cmdNums;
36
+ private readRegRepeat;
37
+ private writeRegRepeat;
38
+ private readBlockCore;
39
+ private writeBlockCore;
40
+ readBlockAsync(addr: number, words: number): Promise<Uint8Array>;
41
+ writeBlockAsync(address: number, data: Uint32Array): Promise<void>;
42
+ executeAsync(address: number, code: Uint32Array, sp: number, pc: number, lr: number, ...registers: number[]): Promise<void>;
43
+ private waitForHaltCore;
44
+ waitForHalt(timeToWait?: number): Promise<void>;
45
+ softwareReset(): Promise<void>;
46
+ reset(halt?: boolean): Promise<void>;
47
+ }