@microbit/microbit-connection 0.0.0-tab.change.177 → 0.9.0-apps.alpha.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 (292) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +94 -5
  3. package/build/cjs/accelerometer-service.d.ts +18 -0
  4. package/build/cjs/accelerometer-service.js +105 -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/{async-util.d.ts → cjs/async-util.d.ts} +9 -0
  9. package/build/cjs/async-util.js +47 -0
  10. package/build/cjs/async-util.js.map +1 -0
  11. package/build/cjs/bluetooth-device-wrapper.d.ts +97 -0
  12. package/build/cjs/bluetooth-device-wrapper.js +486 -0
  13. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  14. package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +43 -35
  15. package/build/cjs/bluetooth-profile.js +92 -0
  16. package/build/cjs/bluetooth-profile.js.map +1 -0
  17. package/build/cjs/bluetooth.d.ts +112 -0
  18. package/build/cjs/bluetooth.js +458 -0
  19. package/build/cjs/bluetooth.js.map +1 -0
  20. package/build/cjs/board-id.js +81 -0
  21. package/build/cjs/board-id.js.map +1 -0
  22. package/build/cjs/board-serial-info.js +51 -0
  23. package/build/cjs/board-serial-info.js.map +1 -0
  24. package/build/cjs/button-service.d.ts +13 -0
  25. package/build/cjs/button-service.js +66 -0
  26. package/build/cjs/button-service.js.map +1 -0
  27. package/build/cjs/buttons.js +22 -0
  28. package/build/cjs/buttons.js.map +1 -0
  29. package/build/cjs/constants.js +73 -0
  30. package/build/cjs/constants.js.map +1 -0
  31. package/build/cjs/device-information-service.d.ts +6 -0
  32. package/build/cjs/device-information-service.js +34 -0
  33. package/build/cjs/device-information-service.js.map +1 -0
  34. package/build/{device.d.ts → cjs/device.d.ts} +71 -39
  35. package/build/cjs/device.js +147 -0
  36. package/build/cjs/device.js.map +1 -0
  37. package/build/cjs/dfu-service.d.ts +9 -0
  38. package/build/cjs/dfu-service.js +26 -0
  39. package/build/cjs/dfu-service.js.map +1 -0
  40. package/build/{events.d.ts → cjs/events.d.ts} +1 -2
  41. package/build/cjs/events.js +109 -0
  42. package/build/cjs/events.js.map +1 -0
  43. package/build/cjs/flashing/flashing-full.d.ts +14 -0
  44. package/build/cjs/flashing/flashing-full.js +87 -0
  45. package/build/cjs/flashing/flashing-full.js.map +1 -0
  46. package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
  47. package/build/cjs/flashing/flashing-makecode.js +48 -0
  48. package/build/cjs/flashing/flashing-makecode.js.map +1 -0
  49. package/build/cjs/flashing/flashing-partial.d.ts +9 -0
  50. package/build/cjs/flashing/flashing-partial.js +98 -0
  51. package/build/cjs/flashing/flashing-partial.js.map +1 -0
  52. package/build/cjs/flashing/flashing-v1.d.ts +11 -0
  53. package/build/cjs/flashing/flashing-v1.js +24 -0
  54. package/build/cjs/flashing/flashing-v1.js.map +1 -0
  55. package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
  56. package/build/cjs/flashing/nordic-dfu.js +214 -0
  57. package/build/cjs/flashing/nordic-dfu.js.map +1 -0
  58. package/build/cjs/flashing/zip.d.ts +12 -0
  59. package/build/cjs/flashing/zip.js +177 -0
  60. package/build/cjs/flashing/zip.js.map +1 -0
  61. package/build/cjs/hex-flash-data-source.js +26 -0
  62. package/build/cjs/hex-flash-data-source.js.map +1 -0
  63. package/build/cjs/index.d.ts +17 -0
  64. package/build/cjs/index.js +37 -0
  65. package/build/cjs/index.js.map +1 -0
  66. package/build/cjs/led-service.d.ts +18 -0
  67. package/build/cjs/led-service.js +89 -0
  68. package/build/cjs/led-service.js.map +1 -0
  69. package/build/cjs/led.js +3 -0
  70. package/build/cjs/led.js.map +1 -0
  71. package/build/{logging.d.ts → cjs/logging.d.ts} +4 -4
  72. package/build/cjs/logging.js +16 -0
  73. package/build/cjs/logging.js.map +1 -0
  74. package/build/cjs/magnetometer-service.d.ts +18 -0
  75. package/build/cjs/magnetometer-service.js +94 -0
  76. package/build/cjs/magnetometer-service.js.map +1 -0
  77. package/build/cjs/magnetometer.d.ts +9 -0
  78. package/build/cjs/magnetometer.js +16 -0
  79. package/build/cjs/magnetometer.js.map +1 -0
  80. package/build/cjs/package.json +1 -0
  81. package/build/cjs/partial-flashing-service.d.ts +45 -0
  82. package/build/cjs/partial-flashing-service.js +110 -0
  83. package/build/cjs/partial-flashing-service.js.map +1 -0
  84. package/build/cjs/promise-queue.js +78 -0
  85. package/build/cjs/promise-queue.js.map +1 -0
  86. package/build/cjs/serial-events.d.ts +20 -0
  87. package/build/cjs/serial-events.js +69 -0
  88. package/build/cjs/serial-events.js.map +1 -0
  89. package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
  90. package/build/cjs/service-events.js +39 -0
  91. package/build/cjs/service-events.js.map +1 -0
  92. package/build/cjs/setupTests.js.map +1 -0
  93. package/build/cjs/uart-service.d.ts +12 -0
  94. package/build/cjs/uart-service.js +55 -0
  95. package/build/cjs/uart-service.js.map +1 -0
  96. package/build/cjs/uart.d.ts +4 -0
  97. package/build/cjs/uart.js +16 -0
  98. package/build/cjs/uart.js.map +1 -0
  99. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
  100. package/build/cjs/usb-device-wrapper.js +437 -0
  101. package/build/cjs/usb-device-wrapper.js.map +1 -0
  102. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  103. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  104. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -5
  105. package/build/cjs/usb-partial-flashing.js +342 -0
  106. package/build/cjs/usb-partial-flashing.js.map +1 -0
  107. package/build/cjs/usb-radio-bridge.d.ts +24 -0
  108. package/build/cjs/usb-radio-bridge.js +515 -0
  109. package/build/cjs/usb-radio-bridge.js.map +1 -0
  110. package/build/cjs/usb-serial-protocol.js +183 -0
  111. package/build/cjs/usb-serial-protocol.js.map +1 -0
  112. package/build/cjs/usb.d.ts +66 -0
  113. package/build/cjs/usb.js +662 -0
  114. package/build/cjs/usb.js.map +1 -0
  115. package/build/esm/accelerometer-service.d.ts +18 -0
  116. package/build/esm/accelerometer-service.js +101 -0
  117. package/build/esm/accelerometer-service.js.map +1 -0
  118. package/build/esm/accelerometer.d.ts +9 -0
  119. package/build/esm/accelerometer.js.map +1 -0
  120. package/build/esm/async-util.d.ts +22 -0
  121. package/build/esm/async-util.js +38 -0
  122. package/build/esm/async-util.js.map +1 -0
  123. package/build/esm/bluetooth-device-wrapper.d.ts +97 -0
  124. package/build/esm/bluetooth-device-wrapper.js +481 -0
  125. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  126. package/build/esm/bluetooth-profile.d.ts +147 -0
  127. package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +35 -29
  128. package/build/esm/bluetooth-profile.js.map +1 -0
  129. package/build/esm/bluetooth.d.ts +112 -0
  130. package/build/esm/bluetooth.js +428 -0
  131. package/build/esm/bluetooth.js.map +1 -0
  132. package/build/esm/board-id.d.ts +36 -0
  133. package/build/esm/board-id.js.map +1 -0
  134. package/build/esm/board-serial-info.d.ts +14 -0
  135. package/build/esm/board-serial-info.js.map +1 -0
  136. package/build/esm/button-service.d.ts +13 -0
  137. package/build/esm/button-service.js +62 -0
  138. package/build/esm/button-service.js.map +1 -0
  139. package/build/esm/buttons.d.ts +10 -0
  140. package/build/esm/buttons.js.map +1 -0
  141. package/build/esm/constants.d.ts +48 -0
  142. package/build/esm/constants.js.map +1 -0
  143. package/build/esm/device-information-service.d.ts +6 -0
  144. package/build/esm/device-information-service.js +30 -0
  145. package/build/esm/device-information-service.js.map +1 -0
  146. package/build/esm/device.d.ts +238 -0
  147. package/build/{device.js → esm/device.js} +16 -58
  148. package/build/esm/device.js.map +1 -0
  149. package/build/esm/dfu-service.d.ts +9 -0
  150. package/build/esm/dfu-service.js +22 -0
  151. package/build/esm/dfu-service.js.map +1 -0
  152. package/build/esm/events.d.ts +110 -0
  153. package/build/esm/events.js.map +1 -0
  154. package/build/esm/flashing/flashing-full.d.ts +14 -0
  155. package/build/esm/flashing/flashing-full.js +84 -0
  156. package/build/esm/flashing/flashing-full.js.map +1 -0
  157. package/build/esm/flashing/flashing-makecode.d.ts +6 -0
  158. package/build/esm/flashing/flashing-makecode.js +44 -0
  159. package/build/esm/flashing/flashing-makecode.js.map +1 -0
  160. package/build/esm/flashing/flashing-partial.d.ts +9 -0
  161. package/build/esm/flashing/flashing-partial.js +95 -0
  162. package/build/esm/flashing/flashing-partial.js.map +1 -0
  163. package/build/esm/flashing/flashing-v1.d.ts +11 -0
  164. package/build/esm/flashing/flashing-v1.js +20 -0
  165. package/build/esm/flashing/flashing-v1.js.map +1 -0
  166. package/build/esm/flashing/nordic-dfu.d.ts +3 -0
  167. package/build/esm/flashing/nordic-dfu.js +211 -0
  168. package/build/esm/flashing/nordic-dfu.js.map +1 -0
  169. package/build/esm/flashing/zip.d.ts +12 -0
  170. package/build/esm/flashing/zip.js +174 -0
  171. package/build/esm/flashing/zip.js.map +1 -0
  172. package/build/esm/hex-flash-data-source.d.ts +7 -0
  173. package/build/esm/hex-flash-data-source.js.map +1 -0
  174. package/build/esm/index.d.ts +17 -0
  175. package/build/esm/index.js +12 -0
  176. package/build/esm/index.js.map +1 -0
  177. package/build/esm/led-service.d.ts +18 -0
  178. package/build/esm/led-service.js +85 -0
  179. package/build/esm/led-service.js.map +1 -0
  180. package/build/esm/led.d.ts +6 -0
  181. package/build/esm/led.js.map +1 -0
  182. package/build/esm/logging.d.ts +21 -0
  183. package/build/{logging.js → esm/logging.js} +1 -1
  184. package/build/esm/logging.js.map +1 -0
  185. package/build/esm/magnetometer-service.d.ts +18 -0
  186. package/build/esm/magnetometer-service.js +90 -0
  187. package/build/esm/magnetometer-service.js.map +1 -0
  188. package/build/esm/magnetometer.d.ts +9 -0
  189. package/build/esm/magnetometer.js +12 -0
  190. package/build/esm/magnetometer.js.map +1 -0
  191. package/build/esm/package.json +1 -0
  192. package/build/esm/partial-flashing-service.d.ts +45 -0
  193. package/build/esm/partial-flashing-service.js +106 -0
  194. package/build/esm/partial-flashing-service.js.map +1 -0
  195. package/build/esm/promise-queue.d.ts +27 -0
  196. package/build/esm/promise-queue.js.map +1 -0
  197. package/build/esm/serial-events.d.ts +20 -0
  198. package/build/esm/serial-events.js +61 -0
  199. package/build/esm/serial-events.js.map +1 -0
  200. package/build/esm/service-events.d.ts +17 -0
  201. package/build/{service-events.js → esm/service-events.js} +12 -0
  202. package/build/esm/service-events.js.map +1 -0
  203. package/build/esm/setupTests.d.ts +6 -0
  204. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  205. package/build/esm/uart-service.d.ts +12 -0
  206. package/build/esm/uart-service.js +51 -0
  207. package/build/esm/uart-service.js.map +1 -0
  208. package/build/esm/uart.d.ts +4 -0
  209. package/build/esm/uart.js +12 -0
  210. package/build/esm/uart.js.map +1 -0
  211. package/build/esm/usb-device-wrapper.d.ts +47 -0
  212. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +43 -17
  213. package/build/esm/usb-device-wrapper.js.map +1 -0
  214. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  215. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  216. package/build/esm/usb-partial-flashing.d.ts +67 -0
  217. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +12 -13
  218. package/build/esm/usb-partial-flashing.js.map +1 -0
  219. package/build/esm/usb-radio-bridge.d.ts +24 -0
  220. package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +13 -7
  221. package/build/esm/usb-radio-bridge.js.map +1 -0
  222. package/build/esm/usb-serial-protocol.d.ts +66 -0
  223. package/build/esm/usb-serial-protocol.js.map +1 -0
  224. package/build/esm/usb.d.ts +66 -0
  225. package/build/{usb.js → esm/usb.js} +257 -49
  226. package/build/esm/usb.js.map +1 -0
  227. package/package.json +25 -8
  228. package/typedoc.json +14 -0
  229. package/build/accelerometer-service.d.ts +0 -18
  230. package/build/accelerometer-service.js +0 -102
  231. package/build/accelerometer-service.js.map +0 -1
  232. package/build/accelerometer.js.map +0 -1
  233. package/build/async-util.js +0 -22
  234. package/build/async-util.js.map +0 -1
  235. package/build/bluetooth-device-wrapper.d.ts +0 -57
  236. package/build/bluetooth-device-wrapper.js +0 -433
  237. package/build/bluetooth-device-wrapper.js.map +0 -1
  238. package/build/bluetooth-profile.js.map +0 -1
  239. package/build/bluetooth.d.ts +0 -54
  240. package/build/bluetooth.js +0 -243
  241. package/build/bluetooth.js.map +0 -1
  242. package/build/board-id.js.map +0 -1
  243. package/build/board-serial-info.js.map +0 -1
  244. package/build/button-service.d.ts +0 -13
  245. package/build/button-service.js +0 -76
  246. package/build/button-service.js.map +0 -1
  247. package/build/buttons.js.map +0 -1
  248. package/build/constants.js.map +0 -1
  249. package/build/device.js.map +0 -1
  250. package/build/events.js.map +0 -1
  251. package/build/hex-flash-data-source.js.map +0 -1
  252. package/build/index.d.ts +0 -10
  253. package/build/index.js +0 -8
  254. package/build/index.js.map +0 -1
  255. package/build/led-service.d.ts +0 -20
  256. package/build/led-service.js +0 -116
  257. package/build/led-service.js.map +0 -1
  258. package/build/led.js.map +0 -1
  259. package/build/logging.js.map +0 -1
  260. package/build/promise-queue.js.map +0 -1
  261. package/build/service-events.js.map +0 -1
  262. package/build/usb-device-wrapper.js.map +0 -1
  263. package/build/usb-partial-flashing-utils.js.map +0 -1
  264. package/build/usb-partial-flashing.js.map +0 -1
  265. package/build/usb-radio-bridge.d.ts +0 -41
  266. package/build/usb-radio-bridge.js.map +0 -1
  267. package/build/usb-serial-protocol.js.map +0 -1
  268. package/build/usb.d.ts +0 -54
  269. package/build/usb.js.map +0 -1
  270. package/vite.config.ts +0 -34
  271. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  272. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  273. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  274. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  275. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  276. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  277. /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
  278. /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
  279. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  280. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  281. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  282. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  283. /package/build/{board-id.js → esm/board-id.js} +0 -0
  284. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  285. /package/build/{buttons.js → esm/buttons.js} +0 -0
  286. /package/build/{constants.js → esm/constants.js} +0 -0
  287. /package/build/{events.js → esm/events.js} +0 -0
  288. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  289. /package/build/{led.js → esm/led.js} +0 -0
  290. /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
  291. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  292. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
@@ -0,0 +1,481 @@
1
+ /**
2
+ * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors
3
+ *
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { BleClient, } from "@capacitor-community/bluetooth-le";
7
+ import { Capacitor } from "@capacitor/core";
8
+ import { AccelerometerService } from "./accelerometer-service.js";
9
+ import { delay, DisconnectError, disconnectErrorCallback, TimeoutError, timeoutErrorAfter, } from "./async-util.js";
10
+ import { ButtonService } from "./button-service.js";
11
+ import { DeviceInformationService } from "./device-information-service.js";
12
+ import { DeviceError } from "./device.js";
13
+ import { LedService } from "./led-service.js";
14
+ import { ConsoleLogging } from "./logging.js";
15
+ import { MagnetometerService } from "./magnetometer-service.js";
16
+ import { MicroBitMode, PartialFlashingService, } from "./partial-flashing-service.js";
17
+ import { UARTService } from "./uart-service.js";
18
+ export const bondingTimeoutInMs = 40_000;
19
+ export const connectTimeoutInMs = 10_000;
20
+ export const scanningTimeoutInMs = 10_000;
21
+ export const isAndroid = () => Capacitor.getPlatform() === "android";
22
+ // TODO: We've removed the support for these behaviours as we need to
23
+ // re-evaluate how best to support then via capacitor-ble (or reinstate
24
+ // the direct Web Bluetooth connection code.
25
+ //
26
+ // On ChromeOS and Mac there's no timeout and no clear way to abort
27
+ // device.gatt.connect(), so we accept that sometimes we'll still
28
+ // be trying to connect when we'd rather not be. If it succeeds when
29
+ // we no longer intend to be connected then we disconnect at that
30
+ // point. If we try to connect when a previous connection attempt is
31
+ // still around then we wait for it for our timeout period.
32
+ //
33
+ // On Windows it times out after 7s.
34
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=684073
35
+ //
36
+ // Additionally we've remove the delay before trying to connect again
37
+ // on Windows.
38
+ //
39
+ // We also used to have a timeout around requestDevice that reloaded the page.
40
+ //
41
+ // > In some situations the Chrome device prompt simply doesn't appear so we time
42
+ // > this out after 30 seconds and reload the page
43
+ export class BluetoothDeviceWrapper {
44
+ constructor(device, logging = new ConsoleLogging(), dispatchTypedEvent, currentEvents, callbacks) {
45
+ Object.defineProperty(this, "device", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: device
50
+ });
51
+ Object.defineProperty(this, "logging", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: logging
56
+ });
57
+ Object.defineProperty(this, "currentEvents", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: currentEvents
62
+ });
63
+ Object.defineProperty(this, "callbacks", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: callbacks
68
+ });
69
+ // Used to avoid automatic reconnection during user triggered connect/disconnect
70
+ // or reconnection itself.
71
+ Object.defineProperty(this, "duringExplicitConnectDisconnect", {
72
+ enumerable: true,
73
+ configurable: true,
74
+ writable: true,
75
+ value: 0
76
+ });
77
+ Object.defineProperty(this, "connected", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: false
82
+ });
83
+ Object.defineProperty(this, "isReconnect", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: false
88
+ });
89
+ // Only updated after the full connection flow completes not during bond handling.
90
+ Object.defineProperty(this, "serviceIds", {
91
+ enumerable: true,
92
+ configurable: true,
93
+ writable: true,
94
+ value: new Set()
95
+ });
96
+ Object.defineProperty(this, "accelerometer", {
97
+ enumerable: true,
98
+ configurable: true,
99
+ writable: true,
100
+ value: void 0
101
+ });
102
+ Object.defineProperty(this, "buttons", {
103
+ enumerable: true,
104
+ configurable: true,
105
+ writable: true,
106
+ value: void 0
107
+ });
108
+ Object.defineProperty(this, "deviceInformation", {
109
+ enumerable: true,
110
+ configurable: true,
111
+ writable: true,
112
+ value: void 0
113
+ });
114
+ Object.defineProperty(this, "led", {
115
+ enumerable: true,
116
+ configurable: true,
117
+ writable: true,
118
+ value: void 0
119
+ });
120
+ Object.defineProperty(this, "magnetometer", {
121
+ enumerable: true,
122
+ configurable: true,
123
+ writable: true,
124
+ value: void 0
125
+ });
126
+ Object.defineProperty(this, "uart", {
127
+ enumerable: true,
128
+ configurable: true,
129
+ writable: true,
130
+ value: void 0
131
+ });
132
+ /**
133
+ * Only defined after connection.
134
+ */
135
+ Object.defineProperty(this, "boardVersion", {
136
+ enumerable: true,
137
+ configurable: true,
138
+ writable: true,
139
+ value: void 0
140
+ });
141
+ Object.defineProperty(this, "services", {
142
+ enumerable: true,
143
+ configurable: true,
144
+ writable: true,
145
+ value: void 0
146
+ });
147
+ Object.defineProperty(this, "waitingForDisconnectEventCallbacks", {
148
+ enumerable: true,
149
+ configurable: true,
150
+ writable: true,
151
+ value: []
152
+ });
153
+ Object.defineProperty(this, "internalNotificationListeners", {
154
+ enumerable: true,
155
+ configurable: true,
156
+ writable: true,
157
+ value: new Map()
158
+ });
159
+ Object.defineProperty(this, "handleDisconnectEvent", {
160
+ enumerable: true,
161
+ configurable: true,
162
+ writable: true,
163
+ value: async () => {
164
+ this.waitingForDisconnectEventCallbacks.forEach((cb) => cb());
165
+ this.waitingForDisconnectEventCallbacks.length = 0;
166
+ this.connected = false;
167
+ try {
168
+ if (!this.duringExplicitConnectDisconnect) {
169
+ this.logging.log("Bluetooth disconnected... automatically trying reconnect");
170
+ await this.reconnect();
171
+ }
172
+ else {
173
+ this.logging.log("Bluetooth disconnect ignored during explicit disconnect");
174
+ }
175
+ }
176
+ catch (e) {
177
+ this.logging.error("Bluetooth connect triggered by disconnect listener failed", e);
178
+ }
179
+ }
180
+ });
181
+ this.accelerometer = new AccelerometerService(device.deviceId, dispatchTypedEvent);
182
+ this.buttons = new ButtonService(device.deviceId, dispatchTypedEvent);
183
+ this.deviceInformation = new DeviceInformationService(device.deviceId);
184
+ this.led = new LedService(device.deviceId);
185
+ this.magnetometer = new MagnetometerService(device.deviceId, dispatchTypedEvent);
186
+ this.uart = new UARTService(device.deviceId, dispatchTypedEvent);
187
+ this.services = [
188
+ this.accelerometer,
189
+ this.buttons,
190
+ this.led,
191
+ this.magnetometer,
192
+ this.uart,
193
+ ];
194
+ }
195
+ async connect() {
196
+ this.logging.event({
197
+ type: this.isReconnect ? "Reconnect" : "Connect",
198
+ message: "Bluetooth connect start",
199
+ });
200
+ if (this.isReconnect) {
201
+ this.callbacks.onReconnecting();
202
+ }
203
+ else {
204
+ this.callbacks.onConnecting();
205
+ }
206
+ this.duringExplicitConnectDisconnect++;
207
+ try {
208
+ if (Capacitor.isNativePlatform()) {
209
+ await this.connectHandlingBond();
210
+ }
211
+ else {
212
+ await this.connectInternal();
213
+ }
214
+ await this.getBoardVersion();
215
+ const events = this.currentEvents();
216
+ const services = await BleClient.getServices(this.device.deviceId);
217
+ this.serviceIds = new Set(services.map((s) => s.uuid));
218
+ this.logging.log(`Starting notifications for current events ${events}`);
219
+ events.forEach((e) => this.startNotifications(e));
220
+ this.logging.event({
221
+ type: this.isReconnect ? "Reconnect" : "Connect",
222
+ message: "Bluetooth connect success",
223
+ });
224
+ this.callbacks.onSuccess();
225
+ }
226
+ catch (e) {
227
+ this.logging.error("Bluetooth connect error", e);
228
+ this.logging.event({
229
+ type: this.isReconnect ? "Reconnect" : "Connect",
230
+ message: "Bluetooth connect failed",
231
+ });
232
+ await this.disconnectInternal(false);
233
+ this.callbacks.onFail();
234
+ if (e instanceof DeviceError) {
235
+ throw e;
236
+ }
237
+ if (e instanceof TimeoutError) {
238
+ throw new DeviceError({
239
+ code: "timeout-error",
240
+ message: e instanceof Error ? e.message : String(e),
241
+ });
242
+ }
243
+ throw new DeviceError({
244
+ code: "bluetooth-connection-failed",
245
+ message: e instanceof Error ? e.message : String(e),
246
+ });
247
+ }
248
+ finally {
249
+ this.duringExplicitConnectDisconnect--;
250
+ // Reset isReconnect for next time
251
+ this.isReconnect = false;
252
+ }
253
+ }
254
+ async connectInternal() {
255
+ this.waitingForDisconnectEventCallbacks.length = 0;
256
+ await BleClient.connect(this.device.deviceId, this.handleDisconnectEvent, {
257
+ timeout: connectTimeoutInMs,
258
+ });
259
+ this.connected = true;
260
+ }
261
+ async disconnect() {
262
+ return this.disconnectInternal(true);
263
+ }
264
+ async disconnectInternal(userTriggered) {
265
+ this.logging.log(`Bluetooth disconnect ${userTriggered ? "(user triggered)" : "(programmatic)"}`);
266
+ this.duringExplicitConnectDisconnect++;
267
+ try {
268
+ if (this.connected) {
269
+ await BleClient.disconnect(this.device.deviceId);
270
+ }
271
+ }
272
+ catch (e) {
273
+ this.logging.error("Bluetooth GATT disconnect error (ignored)", e);
274
+ // We might have already lost the connection.
275
+ }
276
+ finally {
277
+ this.duringExplicitConnectDisconnect--;
278
+ }
279
+ }
280
+ async reconnect() {
281
+ this.logging.log("Bluetooth reconnect");
282
+ this.isReconnect = true;
283
+ await this.connect();
284
+ }
285
+ async getBoardVersion() {
286
+ // We read this when we connect and it won't change.
287
+ if (this.boardVersion) {
288
+ return this.boardVersion;
289
+ }
290
+ this.boardVersion = await this.deviceInformation.getBoardVersion();
291
+ return this.boardVersion;
292
+ }
293
+ async startNotifications(type) {
294
+ await this.getServicesForEvent(type)?.startNotifications(type);
295
+ }
296
+ async stopNotifications(type) {
297
+ await this.getServicesForEvent(type)?.stopNotifications(type);
298
+ }
299
+ getServicesForEvent(type) {
300
+ return this.services.find((s) => this.serviceIds.has(s.uuid) && s.getRelevantEvents().includes(type));
301
+ }
302
+ async startInternalNotifications(serviceId, characteristicId, options) {
303
+ const key = this.getNotificationKey(serviceId, characteristicId);
304
+ await this.raceDisconnectAndTimeout(BleClient.startNotifications(this.device.deviceId, serviceId, characteristicId, (value) => {
305
+ const bytes = new Uint8Array(value.buffer);
306
+ // Notify all registered callbacks.
307
+ this.internalNotificationListeners
308
+ .get(key)
309
+ ?.forEach((cb) => cb(bytes));
310
+ }, options), { actionName: "start notifications" });
311
+ }
312
+ subscribe(serviceId, characteristicId, callback) {
313
+ const key = this.getNotificationKey(serviceId, characteristicId);
314
+ if (!this.internalNotificationListeners.has(key)) {
315
+ this.internalNotificationListeners.set(key, new Set());
316
+ }
317
+ this.internalNotificationListeners.get(key).add(callback);
318
+ }
319
+ unsubscribe(serviceId, characteristicId, callback) {
320
+ const key = this.getNotificationKey(serviceId, characteristicId);
321
+ this.internalNotificationListeners.get(key)?.delete(callback);
322
+ }
323
+ async stopInternalNotifications(serviceId, characteristicId) {
324
+ await BleClient.stopNotifications(this.device.deviceId, serviceId, characteristicId);
325
+ const key = this.getNotificationKey(serviceId, characteristicId);
326
+ this.internalNotificationListeners.delete(key);
327
+ }
328
+ /**
329
+ * Write to characteristic and wait for a notification response.
330
+ *
331
+ * It is the responsibility of the caller to have started notifications
332
+ * for the characteristic.
333
+ */
334
+ async writeForNotification(serviceId, characteristicId, value, notificationId, isFinalNotification = () => true) {
335
+ let notificationListener;
336
+ const notificationPromise = new Promise((resolve) => {
337
+ notificationListener = (bytes) => {
338
+ if (bytes[0] === notificationId && isFinalNotification(bytes)) {
339
+ resolve(bytes);
340
+ }
341
+ };
342
+ this.subscribe(serviceId, characteristicId, notificationListener);
343
+ });
344
+ try {
345
+ await BleClient.writeWithoutResponse(this.device.deviceId, serviceId, characteristicId, value);
346
+ return await this.raceDisconnectAndTimeout(notificationPromise, {
347
+ timeout: 3_000,
348
+ actionName: "flash notification wait",
349
+ });
350
+ }
351
+ finally {
352
+ if (notificationListener) {
353
+ this.unsubscribe(serviceId, characteristicId, notificationListener);
354
+ }
355
+ }
356
+ }
357
+ async waitForDisconnect(timeout) {
358
+ if (!this.connected) {
359
+ this.log("Waiting for disconnect but not connected");
360
+ return;
361
+ }
362
+ this.log(`Waiting for disconnect (timeout ${timeout})`);
363
+ try {
364
+ await Promise.race([
365
+ this.disconnectErrorPromise("wait"),
366
+ timeoutErrorAfter(timeout),
367
+ ]);
368
+ }
369
+ catch (e) {
370
+ if (e instanceof TimeoutError) {
371
+ this.error("Timeout waiting for disconnect");
372
+ }
373
+ if (!(e instanceof DisconnectError)) {
374
+ throw e;
375
+ }
376
+ }
377
+ }
378
+ /**
379
+ * Suitable for running a series of BLE interactions with an overall timeout
380
+ * and general disconnection
381
+ */
382
+ async raceDisconnectAndTimeout(promise, options = {}) {
383
+ if (!this.connected) {
384
+ throw new DisconnectError();
385
+ }
386
+ const actionName = options.actionName ?? "action";
387
+ const errorOnDisconnectPromise = this.disconnectErrorPromise(actionName);
388
+ return await Promise.race([
389
+ promise,
390
+ errorOnDisconnectPromise,
391
+ ...(options.timeout ? [timeoutErrorAfter(options.timeout)] : []),
392
+ ]);
393
+ }
394
+ disconnectErrorPromise(actionName) {
395
+ const { promise, callback } = disconnectErrorCallback(`Disconnected during ${actionName}`);
396
+ this.waitingForDisconnectEventCallbacks.push(callback);
397
+ return promise;
398
+ }
399
+ event(event) {
400
+ this.logging.event(event);
401
+ }
402
+ log(message) {
403
+ this.logging.log(message);
404
+ }
405
+ error(message, e) {
406
+ this.logging.error(message, e);
407
+ }
408
+ getNotificationKey(serviceId, characteristicId) {
409
+ return `${serviceId}:${characteristicId}`;
410
+ }
411
+ /**
412
+ * Bonds with device and handles the post-bond device state only returning
413
+ * when we can reattempt a connection with the device.
414
+ */
415
+ async connectHandlingBond() {
416
+ const startTime = Date.now();
417
+ const maybeJustBonded = await this.bondConnectDeviceInternal();
418
+ if (maybeJustBonded) {
419
+ // If we did just bond then the device disconnects after 2_000 and then
420
+ // resets after a further 13_000 In future we'd like a firmware change
421
+ // that means it doesn't reset when partial flashing is in progress.
422
+ this.log(isAndroid() ? "New bond" : "Potential new bond");
423
+ // On Android with micro:bit V1 we don't see this disconnect (just the 15s
424
+ // reboot) so we hit the timeout and then continue to reset into pairing
425
+ // mode.
426
+ // TODO: document what happens with iOS micro:bit V1 in the new bond case.
427
+ try {
428
+ await this.waitForDisconnect(3000);
429
+ }
430
+ catch (e) {
431
+ if (e instanceof TimeoutError) {
432
+ this.log("No disconnect after bond, assuming connection is stable");
433
+ if (!isAndroid()) {
434
+ // We never knew for sure whether this was a new bond. Assume we
435
+ // were already bonded on the basis we didn't get disconnected.
436
+ return;
437
+ }
438
+ }
439
+ else {
440
+ throw e;
441
+ }
442
+ }
443
+ await this.connectInternal();
444
+ // TODO: check this is needed, potentially inline into connect if always needed
445
+ await delay(500);
446
+ this.log("Resetting to pairing mode");
447
+ const pf = new PartialFlashingService(this);
448
+ await pf.resetToMode(MicroBitMode.Pairing);
449
+ await this.waitForDisconnect(10_000);
450
+ await this.connectInternal();
451
+ this.log(`Connection ready; took ${Date.now() - startTime}`);
452
+ }
453
+ }
454
+ async bondConnectDeviceInternal() {
455
+ const { deviceId } = this.device;
456
+ if (isAndroid()) {
457
+ let justBonded = false;
458
+ // This gets us a nicer pairing dialog than just going straight for the characteristic.
459
+ if (!(await BleClient.isBonded(deviceId))) {
460
+ await BleClient.createBond(deviceId, { timeout: bondingTimeoutInMs });
461
+ justBonded = true;
462
+ }
463
+ await this.connectInternal();
464
+ return justBonded;
465
+ }
466
+ else {
467
+ // Long timeout as this is the point that the pairing dialog will show.
468
+ // If this responds very quickly maybe we could assume there was a bond?
469
+ // At the moment we always do the disconnect dance so subsequent code will
470
+ // need to call startNotifications again. We need to be connected to
471
+ // startNotifications.
472
+ await this.connectInternal();
473
+ const pf = new PartialFlashingService(this);
474
+ await pf.startNotifications({ timeout: bondingTimeoutInMs });
475
+ // We just did it now to trigger pairing at a well defined point.
476
+ await pf.stopNotifications();
477
+ return true;
478
+ }
479
+ }
480
+ }
481
+ //# sourceMappingURL=bluetooth-device-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bluetooth-device-wrapper.js","sourceRoot":"","sources":["../../lib/bluetooth-device-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ export declare const profile: {
2
+ accelerometer: {
3
+ id: string;
4
+ characteristics: {
5
+ data: {
6
+ id: string;
7
+ };
8
+ period: {
9
+ id: string;
10
+ };
11
+ };
12
+ };
13
+ button: {
14
+ id: string;
15
+ characteristics: {
16
+ a: {
17
+ id: string;
18
+ };
19
+ b: {
20
+ id: string;
21
+ };
22
+ };
23
+ };
24
+ deviceInformation: {
25
+ id: string;
26
+ characteristics: {
27
+ firmwareRevision: {
28
+ id: string;
29
+ };
30
+ hardwareRevision: {
31
+ id: string;
32
+ };
33
+ manufacturer: {
34
+ id: string;
35
+ };
36
+ modelNumber: {
37
+ id: string;
38
+ };
39
+ serialNumber: {
40
+ id: string;
41
+ };
42
+ };
43
+ };
44
+ dfuControl: {
45
+ id: string;
46
+ characteristics: {
47
+ control: {
48
+ id: string;
49
+ };
50
+ };
51
+ };
52
+ event: {
53
+ id: string;
54
+ characteristics: {
55
+ clientEvent: {
56
+ id: string;
57
+ };
58
+ clientRequirements: {
59
+ id: string;
60
+ };
61
+ microBitEvent: {
62
+ id: string;
63
+ };
64
+ microBitRequirements: {
65
+ id: string;
66
+ };
67
+ };
68
+ };
69
+ ioPin: {
70
+ id: string;
71
+ characteristics: {
72
+ pinAdConfiguration: {
73
+ id: string;
74
+ };
75
+ pinData: {
76
+ id: string;
77
+ };
78
+ pinIoConfiguration: {
79
+ id: string;
80
+ };
81
+ pwmControl: {
82
+ id: string;
83
+ };
84
+ };
85
+ };
86
+ led: {
87
+ id: string;
88
+ characteristics: {
89
+ matrixState: {
90
+ id: string;
91
+ };
92
+ scrollingDelay: {
93
+ id: string;
94
+ };
95
+ text: {
96
+ id: string;
97
+ };
98
+ };
99
+ };
100
+ magnetometer: {
101
+ id: string;
102
+ characteristics: {
103
+ data: {
104
+ id: string;
105
+ };
106
+ period: {
107
+ id: string;
108
+ };
109
+ bearing: {
110
+ id: string;
111
+ };
112
+ calibration: {
113
+ id: string;
114
+ };
115
+ };
116
+ };
117
+ partialFlashing: {
118
+ id: string;
119
+ characteristics: {
120
+ partialFlash: {
121
+ id: string;
122
+ };
123
+ };
124
+ };
125
+ temperature: {
126
+ id: string;
127
+ characteristics: {
128
+ data: {
129
+ id: string;
130
+ };
131
+ period: {
132
+ id: string;
133
+ };
134
+ };
135
+ };
136
+ uart: {
137
+ id: string;
138
+ characteristics: {
139
+ rx: {
140
+ id: string;
141
+ };
142
+ tx: {
143
+ id: string;
144
+ };
145
+ };
146
+ };
147
+ };