@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,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LedService = void 0;
4
+ const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
5
+ const device_js_1 = require("./device.js");
6
+ const createLedMatrix = () => {
7
+ return [
8
+ [false, false, false, false, false],
9
+ [false, false, false, false, false],
10
+ [false, false, false, false, false],
11
+ [false, false, false, false, false],
12
+ [false, false, false, false, false],
13
+ ];
14
+ };
15
+ class LedService {
16
+ constructor(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharactertistic, queueGattOperation) {
17
+ Object.defineProperty(this, "matrixStateCharacteristic", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: matrixStateCharacteristic
22
+ });
23
+ Object.defineProperty(this, "scrollingDelayCharacteristic", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: scrollingDelayCharacteristic
28
+ });
29
+ Object.defineProperty(this, "textCharactertistic", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: textCharactertistic
34
+ });
35
+ Object.defineProperty(this, "queueGattOperation", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: queueGattOperation
40
+ });
41
+ }
42
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
43
+ let ledService;
44
+ try {
45
+ ledService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.led.id);
46
+ }
47
+ catch (err) {
48
+ if (listenerInit) {
49
+ dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
50
+ return;
51
+ }
52
+ else {
53
+ throw new device_js_1.DeviceError({
54
+ code: "service-missing",
55
+ message: err,
56
+ });
57
+ }
58
+ }
59
+ const matrixStateCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.matrixState.id);
60
+ const scrollingDelayCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.scrollingDelay.id);
61
+ const textCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.text.id);
62
+ return new LedService(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharacteristic, queueGattOperation);
63
+ }
64
+ async getLedMatrix() {
65
+ const dataView = await this.queueGattOperation(() => this.matrixStateCharacteristic.readValue());
66
+ return this.dataViewToLedMatrix(dataView);
67
+ }
68
+ async setLedMatrix(value) {
69
+ const dataView = this.ledMatrixToDataView(value);
70
+ return this.queueGattOperation(() => this.matrixStateCharacteristic.writeValue(dataView));
71
+ }
72
+ dataViewToLedMatrix(dataView) {
73
+ if (dataView.byteLength !== 5) {
74
+ throw new Error("Unexpected LED matrix byte length");
75
+ }
76
+ const matrix = createLedMatrix();
77
+ for (let row = 0; row < 5; ++row) {
78
+ const rowByte = dataView.getUint8(row);
79
+ for (let column = 0; column < 5; ++column) {
80
+ const columnMask = 0x1 << (4 - column);
81
+ matrix[row][column] = (rowByte & columnMask) != 0;
82
+ }
83
+ }
84
+ return matrix;
85
+ }
86
+ ledMatrixToDataView(matrix) {
87
+ const dataView = new DataView(new ArrayBuffer(5));
88
+ for (let row = 0; row < 5; ++row) {
89
+ let rowByte = 0;
90
+ for (let column = 0; column < 5; ++column) {
91
+ const columnMask = 0x1 << (4 - column);
92
+ if (matrix[row][column]) {
93
+ rowByte |= columnMask;
94
+ }
95
+ }
96
+ dataView.setUint8(row, rowByte);
97
+ }
98
+ return dataView;
99
+ }
100
+ async setText(text) {
101
+ const bytes = new TextEncoder().encode(text);
102
+ if (bytes.length > 20) {
103
+ throw new Error("Text must be <= 20 bytes when encoded as UTF-8");
104
+ }
105
+ return this.queueGattOperation(() => this.textCharactertistic.writeValue(bytes));
106
+ }
107
+ async setScrollingDelay(value) {
108
+ const dataView = new DataView(new ArrayBuffer(2));
109
+ dataView.setUint16(0, value, true);
110
+ return this.queueGattOperation(() => this.scrollingDelayCharacteristic.writeValue(dataView));
111
+ }
112
+ async getScrollingDelay() {
113
+ const dataView = await this.queueGattOperation(() => this.scrollingDelayCharacteristic.readValue());
114
+ return dataView.getUint16(0, true);
115
+ }
116
+ async startNotifications(type) { }
117
+ async stopNotifications(type) { }
118
+ }
119
+ exports.LedService = LedService;
120
+ //# sourceMappingURL=led-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type FixedArray<T, L extends number> = T[] & {
2
+ length: L;
3
+ };
4
+ type LedRow = FixedArray<boolean, 5>;
5
+ export type LedMatrix = FixedArray<LedRow, 5>;
6
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=led.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"led.js","sourceRoot":"","sources":["../../lib/led.ts"],"names":[],"mappings":""}
@@ -3,19 +3,19 @@
3
3
  *
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
- export interface Event {
6
+ export interface LoggingEvent {
7
7
  type: string;
8
8
  message?: string;
9
9
  value?: number;
10
10
  detail?: any;
11
11
  }
12
12
  export interface Logging {
13
- event(event: Event): void;
13
+ event(event: LoggingEvent): void;
14
14
  error(message: string, e: unknown): void;
15
15
  log(e: any): void;
16
16
  }
17
17
  export declare class NullLogging implements Logging {
18
- event(_event: Event): void;
18
+ event(_event: LoggingEvent): void;
19
19
  error(_m: string, _e: unknown): void;
20
20
  log(_e: any): void;
21
21
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NullLogging = void 0;
4
+ class NullLogging {
5
+ event(_event) {
6
+ console.log(_event);
7
+ }
8
+ error(_m, _e) {
9
+ console.error(_m, _e);
10
+ }
11
+ log(_e) {
12
+ console.log(_e);
13
+ }
14
+ }
15
+ exports.NullLogging = NullLogging;
16
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../lib/logging.ts"],"names":[],"mappings":";;;AAkBA,MAAa,WAAW;IACtB,KAAK,CAAC,MAAoB;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,EAAW;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,EAAO;QACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF;AAVD,kCAUC"}
@@ -0,0 +1,22 @@
1
+ import { MagnetometerData } from "./magnetometer.js";
2
+ import { Service } from "./bluetooth-device-wrapper.js";
3
+ import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
4
+ export declare class MagnetometerService implements Service {
5
+ private magnetometerDataCharacteristic;
6
+ private magnetometerPeriodCharacteristic;
7
+ private magnetometerBearingCharacteristic;
8
+ private magnetometerCalibrationCharacteristic;
9
+ private dispatchTypedEvent;
10
+ private queueGattOperation;
11
+ constructor(magnetometerDataCharacteristic: BluetoothRemoteGATTCharacteristic, magnetometerPeriodCharacteristic: BluetoothRemoteGATTCharacteristic, magnetometerBearingCharacteristic: BluetoothRemoteGATTCharacteristic, magnetometerCalibrationCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>);
12
+ static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<MagnetometerService | undefined>;
13
+ private dataViewToData;
14
+ getData(): Promise<MagnetometerData>;
15
+ getPeriod(): Promise<number>;
16
+ setPeriod(value: number): Promise<void>;
17
+ getBearing(): Promise<number>;
18
+ triggerCalibration(): Promise<void>;
19
+ startNotifications(type: TypedServiceEvent): Promise<void>;
20
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
21
+ private characteristicForEvent;
22
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MagnetometerService = void 0;
4
+ const magnetometer_js_1 = require("./magnetometer.js");
5
+ const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
6
+ const device_js_1 = require("./device.js");
7
+ class MagnetometerService {
8
+ constructor(magnetometerDataCharacteristic, magnetometerPeriodCharacteristic, magnetometerBearingCharacteristic, magnetometerCalibrationCharacteristic, dispatchTypedEvent, queueGattOperation) {
9
+ Object.defineProperty(this, "magnetometerDataCharacteristic", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: magnetometerDataCharacteristic
14
+ });
15
+ Object.defineProperty(this, "magnetometerPeriodCharacteristic", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: magnetometerPeriodCharacteristic
20
+ });
21
+ Object.defineProperty(this, "magnetometerBearingCharacteristic", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: magnetometerBearingCharacteristic
26
+ });
27
+ Object.defineProperty(this, "magnetometerCalibrationCharacteristic", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: magnetometerCalibrationCharacteristic
32
+ });
33
+ Object.defineProperty(this, "dispatchTypedEvent", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: dispatchTypedEvent
38
+ });
39
+ Object.defineProperty(this, "queueGattOperation", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: queueGattOperation
44
+ });
45
+ this.magnetometerDataCharacteristic.addEventListener("characteristicvaluechanged", (event) => {
46
+ const target = event.target;
47
+ const data = this.dataViewToData(target.value);
48
+ this.dispatchTypedEvent("magnetometerdatachanged", new magnetometer_js_1.MagnetometerDataEvent(data));
49
+ });
50
+ }
51
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
52
+ let magnetometerService;
53
+ try {
54
+ magnetometerService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.magnetometer.id);
55
+ }
56
+ catch (err) {
57
+ if (listenerInit) {
58
+ dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
59
+ return;
60
+ }
61
+ else {
62
+ throw new device_js_1.DeviceError({
63
+ code: "service-missing",
64
+ message: err,
65
+ });
66
+ }
67
+ }
68
+ const magnetometerDataCharacteristic = await magnetometerService.getCharacteristic(bluetooth_profile_js_1.profile.magnetometer.characteristics.data.id);
69
+ const magnetometerPeriodCharacteristic = await magnetometerService.getCharacteristic(bluetooth_profile_js_1.profile.magnetometer.characteristics.period.id);
70
+ const magnetometerBearingCharacteristic = await magnetometerService.getCharacteristic(bluetooth_profile_js_1.profile.magnetometer.characteristics.bearing.id);
71
+ const magnetometerCalibrationCharacteristic = await magnetometerService.getCharacteristic(bluetooth_profile_js_1.profile.magnetometer.characteristics.calibration.id);
72
+ return new MagnetometerService(magnetometerDataCharacteristic, magnetometerPeriodCharacteristic, magnetometerBearingCharacteristic, magnetometerCalibrationCharacteristic, dispatcher, queueGattOperation);
73
+ }
74
+ dataViewToData(dataView) {
75
+ return {
76
+ x: dataView.getInt16(0, true),
77
+ y: dataView.getInt16(2, true),
78
+ z: dataView.getInt16(4, true),
79
+ };
80
+ }
81
+ async getData() {
82
+ const dataView = await this.queueGattOperation(() => this.magnetometerDataCharacteristic.readValue());
83
+ return this.dataViewToData(dataView);
84
+ }
85
+ async getPeriod() {
86
+ const dataView = await this.queueGattOperation(() => this.magnetometerPeriodCharacteristic.readValue());
87
+ return dataView.getUint16(0, true);
88
+ }
89
+ async setPeriod(value) {
90
+ if (value === 0) {
91
+ // Writing 0 causes the device to crash.
92
+ return;
93
+ }
94
+ // Allowed values: 10, 20, 50, 100
95
+ // Values passed are rounded up to the allowed values on device.
96
+ // Documentation for allowed values looks wrong.
97
+ // https://lancaster-university.github.io/microbit-docs/ble/profile/#about-the-magnetometer-service
98
+ const dataView = new DataView(new ArrayBuffer(2));
99
+ dataView.setUint16(0, value, true);
100
+ return this.queueGattOperation(() => this.magnetometerPeriodCharacteristic.writeValue(dataView));
101
+ }
102
+ async getBearing() {
103
+ const dataView = await this.queueGattOperation(() => this.magnetometerBearingCharacteristic.readValue());
104
+ return dataView.getUint16(0, true);
105
+ }
106
+ async triggerCalibration() {
107
+ const dataView = new DataView(new ArrayBuffer(1));
108
+ dataView.setUint8(0, 1);
109
+ return this.queueGattOperation(() => this.magnetometerCalibrationCharacteristic.writeValue(dataView));
110
+ }
111
+ async startNotifications(type) {
112
+ await this.characteristicForEvent(type)?.startNotifications();
113
+ }
114
+ async stopNotifications(type) {
115
+ await this.characteristicForEvent(type)?.stopNotifications();
116
+ }
117
+ characteristicForEvent(type) {
118
+ switch (type) {
119
+ case "magnetometerdatachanged": {
120
+ return this.magnetometerDataCharacteristic;
121
+ }
122
+ default: {
123
+ return undefined;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ exports.MagnetometerService = MagnetometerService;
129
+ //# 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,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MagnetometerDataEvent = void 0;
4
+ class MagnetometerDataEvent extends Event {
5
+ constructor(data) {
6
+ super("magnetometerdatachanged");
7
+ Object.defineProperty(this, "data", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: data
12
+ });
13
+ }
14
+ }
15
+ exports.MagnetometerDataEvent = MagnetometerDataEvent;
16
+ //# sourceMappingURL=magnetometer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnetometer.js","sourceRoot":"","sources":["../../lib/magnetometer.ts"],"names":[],"mappings":";;;AAMA,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,IAAsB;QAChD,KAAK,CAAC,yBAAyB,CAAC,CAAC;QADvB;;;;mBAAgB,IAAI;WAAkB;IAElD,CAAC;CACF;AAJD,sDAIC"}
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -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,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromiseQueue = void 0;
4
+ class PromiseQueue {
5
+ constructor(options = {}) {
6
+ Object.defineProperty(this, "busy", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: false
11
+ });
12
+ Object.defineProperty(this, "entries", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: []
17
+ });
18
+ Object.defineProperty(this, "abortCheck", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: void 0
23
+ });
24
+ this.abortCheck = options.abortCheck ?? (() => undefined);
25
+ }
26
+ /**
27
+ * Queue an action.
28
+ *
29
+ * @param action Async action to perform.
30
+ * @returns A promise that resolves when all prior added actions and this action have been performed.
31
+ */
32
+ add(action) {
33
+ return new Promise((resolve, reject) => {
34
+ const entry = {
35
+ resolve,
36
+ reject,
37
+ action,
38
+ };
39
+ this.entries.push(entry);
40
+ if (!this.busy) {
41
+ void this.processQueue();
42
+ }
43
+ });
44
+ }
45
+ async processQueue() {
46
+ const rejection = this.abortCheck();
47
+ if (rejection) {
48
+ this.clear(rejection);
49
+ return;
50
+ }
51
+ const entry = this.entries.shift();
52
+ if (!entry) {
53
+ return;
54
+ }
55
+ this.busy = true;
56
+ try {
57
+ entry.resolve(await entry.action());
58
+ }
59
+ catch (e) {
60
+ entry.reject(e);
61
+ }
62
+ this.busy = false;
63
+ return this.processQueue();
64
+ }
65
+ /**
66
+ * Skips any queued actions that aren't in progress and rejects their
67
+ * promises with errors created with the supplied function.
68
+ */
69
+ clear(rejection) {
70
+ const entries = this.entries;
71
+ this.entries = [];
72
+ entries.forEach((e) => {
73
+ e.reject(rejection());
74
+ });
75
+ }
76
+ }
77
+ exports.PromiseQueue = PromiseQueue;
78
+ //# sourceMappingURL=promise-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-queue.js","sourceRoot":"","sources":["../../lib/promise-queue.ts"],"names":[],"mappings":";;;AAcA,MAAa,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;AA5DD,oCA4DC"}
@@ -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,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerialConnectionEventMap = exports.FlashEvent = exports.SerialErrorEvent = exports.SerialResetEvent = exports.SerialDataEvent = void 0;
4
+ class SerialDataEvent extends Event {
5
+ constructor(data) {
6
+ super("serialdata");
7
+ Object.defineProperty(this, "data", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: data
12
+ });
13
+ }
14
+ }
15
+ exports.SerialDataEvent = SerialDataEvent;
16
+ class SerialResetEvent extends Event {
17
+ constructor() {
18
+ super("serialreset");
19
+ }
20
+ }
21
+ exports.SerialResetEvent = SerialResetEvent;
22
+ class SerialErrorEvent extends Event {
23
+ constructor(error) {
24
+ super("serialerror");
25
+ Object.defineProperty(this, "error", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: error
30
+ });
31
+ }
32
+ }
33
+ exports.SerialErrorEvent = SerialErrorEvent;
34
+ class FlashEvent extends Event {
35
+ constructor() {
36
+ super("flash");
37
+ }
38
+ }
39
+ exports.FlashEvent = FlashEvent;
40
+ class SerialConnectionEventMap {
41
+ constructor() {
42
+ Object.defineProperty(this, "serialdata", {
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true,
46
+ value: void 0
47
+ });
48
+ Object.defineProperty(this, "serialreset", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: void 0
53
+ });
54
+ Object.defineProperty(this, "serialerror", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: void 0
59
+ });
60
+ Object.defineProperty(this, "flash", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: void 0
65
+ });
66
+ }
67
+ }
68
+ exports.SerialConnectionEventMap = SerialConnectionEventMap;
69
+ //# sourceMappingURL=serial-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serial-events.js","sourceRoot":"","sources":["../../lib/serial-events.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAA4B,IAAY;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;QADV;;;;mBAAgB,IAAI;WAAQ;IAExC,CAAC;CACF;AAJD,0CAIC;AAED,MAAa,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,gBAAiB,SAAQ,KAAK;IACzC,YAA4B,KAAc;QACxC,KAAK,CAAC,aAAa,CAAC,CAAC;QADX;;;;mBAAgB,KAAK;WAAS;IAE1C,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,UAAW,SAAQ,KAAK;IACnC;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,gCAIC;AAED,MAAa,wBAAwB;IAArC;QACE,4BAAA,YAAY;;;;;WAAkB;QAC9B,4BAAA,aAAa;;;;;WAAmB;QAChC,4BAAA,aAAa;;;;;WAAmB;QAChC,4BAAA,OAAO;;;;;WAAa;IACtB,CAAC;CAAA;AALD,4DAKC"}
@@ -1,10 +1,14 @@
1
1
  import { AccelerometerDataEvent } from "./accelerometer.js";
2
2
  import { ButtonEvent } from "./buttons.js";
3
3
  import { DeviceConnectionEventMap } from "./device.js";
4
+ import { MagnetometerDataEvent } from "./magnetometer.js";
5
+ import { UARTDataEvent } from "./uart.js";
4
6
  export declare class ServiceConnectionEventMap {
5
7
  "accelerometerdatachanged": AccelerometerDataEvent;
6
8
  "buttonachanged": ButtonEvent;
7
9
  "buttonbchanged": ButtonEvent;
10
+ "magnetometerdatachanged": MagnetometerDataEvent;
11
+ "uartdata": UARTDataEvent;
8
12
  }
9
13
  export type CharacteristicDataTarget = EventTarget & {
10
14
  value: DataView;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceConnectionEventMap = void 0;
4
+ class ServiceConnectionEventMap {
5
+ constructor() {
6
+ Object.defineProperty(this, "accelerometerdatachanged", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: void 0
11
+ });
12
+ Object.defineProperty(this, "buttonachanged", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: void 0
17
+ });
18
+ Object.defineProperty(this, "buttonbchanged", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: void 0
23
+ });
24
+ Object.defineProperty(this, "magnetometerdatachanged", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: void 0
29
+ });
30
+ Object.defineProperty(this, "uartdata", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: void 0
35
+ });
36
+ }
37
+ }
38
+ exports.ServiceConnectionEventMap = ServiceConnectionEventMap;
39
+ //# sourceMappingURL=service-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-events.js","sourceRoot":"","sources":["../../lib/service-events.ts"],"names":[],"mappings":";;;AAMA,MAAa,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;AAND,8DAMC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../lib/setupTests.ts"],"names":[],"mappings":";;AAAA;;;;GAIG"}