@microbit/microbit-connection 0.9.0-apps.alpha.2 → 0.9.0-apps.alpha.20

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 (504) hide show
  1. package/build/cjs/async-util.d.ts +3 -1
  2. package/build/cjs/async-util.js +5 -1
  3. package/build/cjs/async-util.js.map +1 -1
  4. package/build/cjs/async-util.test.d.ts +1 -0
  5. package/build/cjs/async-util.test.js +20 -0
  6. package/build/cjs/async-util.test.js.map +1 -0
  7. package/build/cjs/availability.d.ts +14 -0
  8. package/build/cjs/availability.js +44 -0
  9. package/build/cjs/availability.js.map +1 -0
  10. package/build/cjs/bluetooth/ble-error.d.ts +10 -0
  11. package/build/cjs/bluetooth/ble-error.js +47 -0
  12. package/build/cjs/bluetooth/ble-error.js.map +1 -0
  13. package/build/cjs/bluetooth/connection.d.ts +378 -0
  14. package/build/cjs/bluetooth/connection.js +623 -0
  15. package/build/cjs/bluetooth/connection.js.map +1 -0
  16. package/build/cjs/bluetooth/connection.test.d.ts +1 -0
  17. package/build/cjs/bluetooth/connection.test.js +88 -0
  18. package/build/cjs/bluetooth/connection.test.js.map +1 -0
  19. package/build/cjs/bluetooth/device-bond-state.d.ts +14 -0
  20. package/build/cjs/bluetooth/device-bond-state.js +26 -0
  21. package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
  22. package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  23. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +169 -101
  24. package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
  25. package/build/{esm → cjs/bluetooth}/flashing/flashing-full.d.ts +2 -2
  26. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  27. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  28. package/build/cjs/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  29. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  30. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  31. package/build/cjs/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  32. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js +253 -0
  33. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  34. package/build/cjs/bluetooth/flashing/flashing-partial.d.ts +10 -0
  35. package/build/cjs/bluetooth/flashing/flashing-partial.js +145 -0
  36. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  37. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  38. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  39. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  40. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  41. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  42. package/build/cjs/bluetooth/flashing/zip.test.d.ts +1 -0
  43. package/build/cjs/bluetooth/flashing/zip.test.js +96 -0
  44. package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
  45. package/build/cjs/bluetooth/index.d.ts +5 -0
  46. package/build/cjs/bluetooth/index.js +9 -0
  47. package/build/cjs/bluetooth/index.js.map +1 -0
  48. package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  49. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  50. package/build/cjs/bluetooth/profile.js.map +1 -0
  51. package/build/{esm → cjs/bluetooth/services}/accelerometer-service.d.ts +2 -3
  52. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
  53. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  54. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  55. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
  56. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  57. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  58. package/build/cjs/bluetooth/services/device-information-service.js +29 -0
  59. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  60. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  61. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  62. package/build/cjs/bluetooth/services/event-service.d.ts +48 -0
  63. package/build/cjs/bluetooth/services/event-service.js +273 -0
  64. package/build/cjs/bluetooth/services/event-service.js.map +1 -0
  65. package/build/cjs/bluetooth/services/event-service.test.d.ts +1 -0
  66. package/build/cjs/bluetooth/services/event-service.test.js +252 -0
  67. package/build/cjs/bluetooth/services/event-service.test.js.map +1 -0
  68. package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
  69. package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
  70. package/build/cjs/bluetooth/services/io-pin-service.js.map +1 -0
  71. package/build/cjs/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  72. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
  73. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  74. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  75. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
  76. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  77. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  78. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  79. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  80. package/build/cjs/bluetooth/services/temperature-service.d.ts +14 -0
  81. package/build/cjs/bluetooth/services/temperature-service.js +80 -0
  82. package/build/cjs/bluetooth/services/temperature-service.js.map +1 -0
  83. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  84. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
  85. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  86. package/build/cjs/board-id.d.ts +1 -1
  87. package/build/cjs/board-id.js.map +1 -1
  88. package/build/cjs/device.d.ts +214 -97
  89. package/build/cjs/device.js +57 -114
  90. package/build/cjs/device.js.map +1 -1
  91. package/build/cjs/events.d.ts +8 -108
  92. package/build/cjs/events.js +27 -88
  93. package/build/cjs/events.js.map +1 -1
  94. package/build/cjs/events.test.d.ts +1 -0
  95. package/build/cjs/events.test.js +115 -0
  96. package/build/cjs/events.test.js.map +1 -0
  97. package/build/cjs/hex-util.d.ts +1 -0
  98. package/build/cjs/hex-util.js +15 -0
  99. package/build/cjs/hex-util.js.map +1 -0
  100. package/build/cjs/index.d.ts +8 -16
  101. package/build/cjs/index.js +9 -28
  102. package/build/cjs/index.js.map +1 -1
  103. package/build/cjs/logging.js.map +1 -1
  104. package/build/cjs/microbit-events.d.ts +67 -0
  105. package/build/cjs/microbit-events.js +55 -0
  106. package/build/cjs/microbit-events.js.map +1 -0
  107. package/build/cjs/radio-bridge/connection.d.ts +52 -0
  108. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  109. package/build/cjs/radio-bridge/connection.js.map +1 -0
  110. package/build/cjs/radio-bridge/index.d.ts +4 -0
  111. package/build/cjs/radio-bridge/index.js +9 -0
  112. package/build/cjs/radio-bridge/index.js.map +1 -0
  113. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  114. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  115. package/build/cjs/service-events.d.ts +92 -15
  116. package/build/cjs/service-events.js +6 -36
  117. package/build/cjs/service-events.js.map +1 -1
  118. package/build/cjs/setupTests.js +8 -0
  119. package/build/cjs/setupTests.js.map +1 -1
  120. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -1
  121. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  122. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  123. package/build/cjs/universal-hex/index.d.ts +4 -0
  124. package/build/cjs/universal-hex/index.js +9 -0
  125. package/build/cjs/universal-hex/index.js.map +1 -0
  126. package/build/cjs/usb/arm-debug.d.ts +137 -0
  127. package/build/cjs/usb/arm-debug.js +414 -0
  128. package/build/cjs/usb/arm-debug.js.map +1 -0
  129. package/build/cjs/usb/arm-debug.test.d.ts +1 -0
  130. package/build/cjs/usb/arm-debug.test.js +333 -0
  131. package/build/cjs/usb/arm-debug.test.js.map +1 -0
  132. package/build/{esm → cjs/usb}/board-serial-info.d.ts +2 -1
  133. package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  134. package/build/cjs/usb/board-serial-info.js.map +1 -0
  135. package/build/cjs/usb/board-serial-info.test.d.ts +1 -0
  136. package/build/cjs/usb/board-serial-info.test.js +46 -0
  137. package/build/cjs/usb/board-serial-info.test.js.map +1 -0
  138. package/build/cjs/usb/cdc-saturation.d.ts +36 -0
  139. package/build/cjs/usb/cdc-saturation.js +151 -0
  140. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  141. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  142. package/build/cjs/usb/cmsis-dap.js +349 -0
  143. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  144. package/build/cjs/usb/cmsis-dap.test.d.ts +1 -0
  145. package/build/cjs/usb/cmsis-dap.test.js +350 -0
  146. package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
  147. package/build/cjs/usb/connection.d.ts +96 -0
  148. package/build/cjs/{usb.js → usb/connection.js} +274 -193
  149. package/build/cjs/usb/connection.js.map +1 -0
  150. package/build/cjs/usb/connection.test.d.ts +1 -0
  151. package/build/cjs/usb/connection.test.js +266 -0
  152. package/build/cjs/usb/connection.test.js.map +1 -0
  153. package/build/cjs/usb/cortex-m.d.ts +72 -0
  154. package/build/cjs/usb/cortex-m.js +165 -0
  155. package/build/cjs/usb/cortex-m.js.map +1 -0
  156. package/build/cjs/usb/cortex-m.test.d.ts +1 -0
  157. package/build/cjs/usb/cortex-m.test.js +217 -0
  158. package/build/cjs/usb/cortex-m.test.js.map +1 -0
  159. package/build/cjs/usb/daplink.d.ts +69 -0
  160. package/build/cjs/usb/daplink.js +238 -0
  161. package/build/cjs/usb/daplink.js.map +1 -0
  162. package/build/cjs/usb/daplink.test.d.ts +1 -0
  163. package/build/cjs/usb/daplink.test.js +290 -0
  164. package/build/cjs/usb/daplink.test.js.map +1 -0
  165. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  166. package/build/cjs/usb/device-wrapper.js +102 -0
  167. package/build/cjs/usb/device-wrapper.js.map +1 -0
  168. package/build/cjs/usb/index.d.ts +5 -0
  169. package/build/cjs/usb/index.js +10 -0
  170. package/build/cjs/usb/index.js.map +1 -0
  171. package/build/cjs/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  172. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  173. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  174. package/build/cjs/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  175. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -134
  176. package/build/cjs/usb/partial-flashing.js.map +1 -0
  177. package/build/cjs/usb/promise-queue.js.map +1 -0
  178. package/build/cjs/usb/promise-queue.test.d.ts +1 -0
  179. package/build/cjs/usb/promise-queue.test.js +68 -0
  180. package/build/cjs/usb/promise-queue.test.js.map +1 -0
  181. package/build/cjs/usb/serial-events.d.ts +16 -0
  182. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  183. package/build/cjs/usb/serial-events.js.map +1 -0
  184. package/build/cjs/usb/transport.d.ts +42 -0
  185. package/build/cjs/usb/transport.js +155 -0
  186. package/build/cjs/usb/transport.js.map +1 -0
  187. package/build/esm/async-util.d.ts +3 -1
  188. package/build/esm/async-util.js +5 -1
  189. package/build/esm/async-util.js.map +1 -1
  190. package/build/esm/async-util.test.d.ts +1 -0
  191. package/build/esm/async-util.test.js +18 -0
  192. package/build/esm/async-util.test.js.map +1 -0
  193. package/build/esm/availability.d.ts +14 -0
  194. package/build/esm/availability.js +40 -0
  195. package/build/esm/availability.js.map +1 -0
  196. package/build/esm/bluetooth/ble-error.d.ts +10 -0
  197. package/build/esm/bluetooth/ble-error.js +42 -0
  198. package/build/esm/bluetooth/ble-error.js.map +1 -0
  199. package/build/esm/bluetooth/connection.d.ts +378 -0
  200. package/build/esm/bluetooth/connection.js +593 -0
  201. package/build/esm/bluetooth/connection.js.map +1 -0
  202. package/build/esm/bluetooth/connection.test.d.ts +1 -0
  203. package/build/esm/bluetooth/connection.test.js +86 -0
  204. package/build/esm/bluetooth/connection.test.js.map +1 -0
  205. package/build/esm/bluetooth/device-bond-state.d.ts +14 -0
  206. package/build/esm/bluetooth/device-bond-state.js +22 -0
  207. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  208. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  209. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +167 -100
  210. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  211. package/build/{cjs → esm/bluetooth}/flashing/flashing-full.d.ts +2 -2
  212. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  213. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  214. package/build/esm/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  215. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  216. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  217. package/build/esm/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  218. package/build/esm/bluetooth/flashing/flashing-makecode.test.js +248 -0
  219. package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  220. package/build/esm/bluetooth/flashing/flashing-partial.d.ts +10 -0
  221. package/build/esm/bluetooth/flashing/flashing-partial.js +142 -0
  222. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  223. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  224. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  225. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  226. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  227. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  228. package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
  229. package/build/esm/bluetooth/flashing/zip.test.js +94 -0
  230. package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
  231. package/build/esm/bluetooth/index.d.ts +5 -0
  232. package/build/esm/bluetooth/index.js +5 -0
  233. package/build/esm/bluetooth/index.js.map +1 -0
  234. package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  235. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  236. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  237. package/build/{cjs → esm/bluetooth/services}/accelerometer-service.d.ts +2 -3
  238. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
  239. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  240. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  241. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
  242. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  243. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  244. package/build/esm/bluetooth/services/device-information-service.js +25 -0
  245. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  246. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  247. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  248. package/build/esm/bluetooth/services/event-service.d.ts +48 -0
  249. package/build/esm/bluetooth/services/event-service.js +269 -0
  250. package/build/esm/bluetooth/services/event-service.js.map +1 -0
  251. package/build/esm/bluetooth/services/event-service.test.d.ts +1 -0
  252. package/build/esm/bluetooth/services/event-service.test.js +250 -0
  253. package/build/esm/bluetooth/services/event-service.test.js.map +1 -0
  254. package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
  255. package/build/esm/bluetooth/services/io-pin-service.js +169 -0
  256. package/build/esm/bluetooth/services/io-pin-service.js.map +1 -0
  257. package/build/esm/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  258. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
  259. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  260. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  261. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
  262. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  263. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  264. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  265. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  266. package/build/esm/bluetooth/services/temperature-service.d.ts +14 -0
  267. package/build/esm/bluetooth/services/temperature-service.js +76 -0
  268. package/build/esm/bluetooth/services/temperature-service.js.map +1 -0
  269. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  270. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
  271. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  272. package/build/esm/board-id.d.ts +1 -1
  273. package/build/esm/board-id.js.map +1 -1
  274. package/build/esm/device.d.ts +214 -97
  275. package/build/esm/device.js +55 -108
  276. package/build/esm/device.js.map +1 -1
  277. package/build/esm/events.d.ts +8 -108
  278. package/build/esm/events.js +26 -86
  279. package/build/esm/events.js.map +1 -1
  280. package/build/esm/events.test.d.ts +1 -0
  281. package/build/esm/events.test.js +113 -0
  282. package/build/esm/events.test.js.map +1 -0
  283. package/build/esm/hex-util.d.ts +1 -0
  284. package/build/esm/hex-util.js +11 -0
  285. package/build/esm/hex-util.js.map +1 -0
  286. package/build/esm/index.d.ts +8 -16
  287. package/build/esm/index.js +7 -11
  288. package/build/esm/index.js.map +1 -1
  289. package/build/esm/logging.js.map +1 -1
  290. package/build/esm/microbit-events.d.ts +67 -0
  291. package/build/esm/microbit-events.js +52 -0
  292. package/build/esm/microbit-events.js.map +1 -0
  293. package/build/esm/radio-bridge/connection.d.ts +52 -0
  294. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  295. package/build/esm/radio-bridge/connection.js.map +1 -0
  296. package/build/esm/radio-bridge/index.d.ts +4 -0
  297. package/build/esm/radio-bridge/index.js +5 -0
  298. package/build/esm/radio-bridge/index.js.map +1 -0
  299. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  300. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  301. package/build/esm/service-events.d.ts +92 -15
  302. package/build/esm/service-events.js +5 -34
  303. package/build/esm/service-events.js.map +1 -1
  304. package/build/esm/setupTests.js +7 -0
  305. package/build/esm/setupTests.js.map +1 -1
  306. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -1
  307. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  308. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  309. package/build/esm/universal-hex/index.d.ts +4 -0
  310. package/build/esm/universal-hex/index.js +5 -0
  311. package/build/esm/universal-hex/index.js.map +1 -0
  312. package/build/esm/usb/arm-debug.d.ts +137 -0
  313. package/build/esm/usb/arm-debug.js +409 -0
  314. package/build/esm/usb/arm-debug.js.map +1 -0
  315. package/build/esm/usb/arm-debug.test.d.ts +1 -0
  316. package/build/esm/usb/arm-debug.test.js +331 -0
  317. package/build/esm/usb/arm-debug.test.js.map +1 -0
  318. package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
  319. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  320. package/build/esm/usb/board-serial-info.js.map +1 -0
  321. package/build/esm/usb/board-serial-info.test.d.ts +1 -0
  322. package/build/esm/usb/board-serial-info.test.js +44 -0
  323. package/build/esm/usb/board-serial-info.test.js.map +1 -0
  324. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  325. package/build/esm/usb/cdc-saturation.js +148 -0
  326. package/build/esm/usb/cdc-saturation.js.map +1 -0
  327. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  328. package/build/esm/usb/cmsis-dap.js +342 -0
  329. package/build/esm/usb/cmsis-dap.js.map +1 -0
  330. package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
  331. package/build/esm/usb/cmsis-dap.test.js +348 -0
  332. package/build/esm/usb/cmsis-dap.test.js.map +1 -0
  333. package/build/esm/usb/connection.d.ts +96 -0
  334. package/build/esm/{usb.js → usb/connection.js} +270 -188
  335. package/build/esm/usb/connection.js.map +1 -0
  336. package/build/esm/usb/connection.test.d.ts +1 -0
  337. package/build/esm/usb/connection.test.js +264 -0
  338. package/build/esm/usb/connection.test.js.map +1 -0
  339. package/build/esm/usb/cortex-m.d.ts +72 -0
  340. package/build/esm/usb/cortex-m.js +161 -0
  341. package/build/esm/usb/cortex-m.js.map +1 -0
  342. package/build/esm/usb/cortex-m.test.d.ts +1 -0
  343. package/build/esm/usb/cortex-m.test.js +215 -0
  344. package/build/esm/usb/cortex-m.test.js.map +1 -0
  345. package/build/esm/usb/daplink.d.ts +69 -0
  346. package/build/esm/usb/daplink.js +231 -0
  347. package/build/esm/usb/daplink.js.map +1 -0
  348. package/build/esm/usb/daplink.test.d.ts +1 -0
  349. package/build/esm/usb/daplink.test.js +288 -0
  350. package/build/esm/usb/daplink.test.js.map +1 -0
  351. package/build/esm/usb/device-wrapper.d.ts +34 -0
  352. package/build/esm/usb/device-wrapper.js +98 -0
  353. package/build/esm/usb/device-wrapper.js.map +1 -0
  354. package/build/esm/usb/index.d.ts +5 -0
  355. package/build/esm/usb/index.js +5 -0
  356. package/build/esm/usb/index.js.map +1 -0
  357. package/build/esm/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  358. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  359. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  360. package/build/esm/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  361. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -110
  362. package/build/esm/usb/partial-flashing.js.map +1 -0
  363. package/build/esm/usb/promise-queue.js.map +1 -0
  364. package/build/esm/usb/promise-queue.test.d.ts +1 -0
  365. package/build/esm/usb/promise-queue.test.js +66 -0
  366. package/build/esm/usb/promise-queue.test.js.map +1 -0
  367. package/build/esm/usb/serial-events.d.ts +16 -0
  368. package/build/esm/usb/serial-events.js +2 -0
  369. package/build/esm/usb/serial-events.js.map +1 -0
  370. package/build/esm/usb/transport.d.ts +42 -0
  371. package/build/esm/usb/transport.js +151 -0
  372. package/build/esm/usb/transport.js.map +1 -0
  373. package/package.json +55 -15
  374. package/LICENSE.md +0 -21
  375. package/README.md +0 -125
  376. package/build/cjs/accelerometer-service.js.map +0 -1
  377. package/build/cjs/accelerometer.d.ts +0 -9
  378. package/build/cjs/accelerometer.js +0 -16
  379. package/build/cjs/accelerometer.js.map +0 -1
  380. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  381. package/build/cjs/bluetooth.d.ts +0 -112
  382. package/build/cjs/bluetooth.js +0 -458
  383. package/build/cjs/bluetooth.js.map +0 -1
  384. package/build/cjs/board-serial-info.js.map +0 -1
  385. package/build/cjs/button-service.js.map +0 -1
  386. package/build/cjs/buttons.d.ts +0 -10
  387. package/build/cjs/buttons.js +0 -22
  388. package/build/cjs/buttons.js.map +0 -1
  389. package/build/cjs/constants.d.ts +0 -48
  390. package/build/cjs/constants.js +0 -73
  391. package/build/cjs/constants.js.map +0 -1
  392. package/build/cjs/device-information-service.js +0 -34
  393. package/build/cjs/device-information-service.js.map +0 -1
  394. package/build/cjs/dfu-service.js.map +0 -1
  395. package/build/cjs/flashing/flashing-full.js.map +0 -1
  396. package/build/cjs/flashing/flashing-makecode.d.ts +0 -6
  397. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  398. package/build/cjs/flashing/flashing-partial.d.ts +0 -9
  399. package/build/cjs/flashing/flashing-partial.js +0 -98
  400. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  401. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  402. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  403. package/build/cjs/flashing/zip.js.map +0 -1
  404. package/build/cjs/hex-flash-data-source.js.map +0 -1
  405. package/build/cjs/led-service.js.map +0 -1
  406. package/build/cjs/led.d.ts +0 -6
  407. package/build/cjs/led.js.map +0 -1
  408. package/build/cjs/magnetometer-service.js.map +0 -1
  409. package/build/cjs/magnetometer.d.ts +0 -9
  410. package/build/cjs/magnetometer.js +0 -16
  411. package/build/cjs/magnetometer.js.map +0 -1
  412. package/build/cjs/partial-flashing-service.js.map +0 -1
  413. package/build/cjs/promise-queue.js.map +0 -1
  414. package/build/cjs/serial-events.d.ts +0 -20
  415. package/build/cjs/serial-events.js +0 -69
  416. package/build/cjs/serial-events.js.map +0 -1
  417. package/build/cjs/uart-service.js.map +0 -1
  418. package/build/cjs/uart.d.ts +0 -4
  419. package/build/cjs/uart.js +0 -16
  420. package/build/cjs/uart.js.map +0 -1
  421. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  422. package/build/cjs/usb-device-wrapper.js +0 -437
  423. package/build/cjs/usb-device-wrapper.js.map +0 -1
  424. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  425. package/build/cjs/usb-partial-flashing.js.map +0 -1
  426. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  427. package/build/cjs/usb-radio-bridge.js.map +0 -1
  428. package/build/cjs/usb-serial-protocol.js.map +0 -1
  429. package/build/cjs/usb.d.ts +0 -66
  430. package/build/cjs/usb.js.map +0 -1
  431. package/build/esm/accelerometer-service.js.map +0 -1
  432. package/build/esm/accelerometer.d.ts +0 -9
  433. package/build/esm/accelerometer.js +0 -12
  434. package/build/esm/accelerometer.js.map +0 -1
  435. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  436. package/build/esm/bluetooth-profile.js.map +0 -1
  437. package/build/esm/bluetooth.d.ts +0 -112
  438. package/build/esm/bluetooth.js +0 -428
  439. package/build/esm/bluetooth.js.map +0 -1
  440. package/build/esm/board-serial-info.js.map +0 -1
  441. package/build/esm/button-service.js.map +0 -1
  442. package/build/esm/buttons.d.ts +0 -10
  443. package/build/esm/buttons.js +0 -18
  444. package/build/esm/buttons.js.map +0 -1
  445. package/build/esm/constants.d.ts +0 -48
  446. package/build/esm/constants.js +0 -70
  447. package/build/esm/constants.js.map +0 -1
  448. package/build/esm/device-information-service.js +0 -30
  449. package/build/esm/device-information-service.js.map +0 -1
  450. package/build/esm/dfu-service.js.map +0 -1
  451. package/build/esm/flashing/flashing-full.js.map +0 -1
  452. package/build/esm/flashing/flashing-makecode.d.ts +0 -6
  453. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  454. package/build/esm/flashing/flashing-partial.d.ts +0 -9
  455. package/build/esm/flashing/flashing-partial.js +0 -95
  456. package/build/esm/flashing/flashing-partial.js.map +0 -1
  457. package/build/esm/flashing/flashing-v1.js.map +0 -1
  458. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  459. package/build/esm/flashing/zip.js.map +0 -1
  460. package/build/esm/hex-flash-data-source.js.map +0 -1
  461. package/build/esm/led-service.js.map +0 -1
  462. package/build/esm/led.d.ts +0 -6
  463. package/build/esm/led.js +0 -2
  464. package/build/esm/led.js.map +0 -1
  465. package/build/esm/magnetometer-service.js.map +0 -1
  466. package/build/esm/magnetometer.d.ts +0 -9
  467. package/build/esm/magnetometer.js +0 -12
  468. package/build/esm/magnetometer.js.map +0 -1
  469. package/build/esm/partial-flashing-service.js.map +0 -1
  470. package/build/esm/promise-queue.js.map +0 -1
  471. package/build/esm/serial-events.d.ts +0 -20
  472. package/build/esm/serial-events.js +0 -61
  473. package/build/esm/serial-events.js.map +0 -1
  474. package/build/esm/uart-service.js.map +0 -1
  475. package/build/esm/uart.d.ts +0 -4
  476. package/build/esm/uart.js +0 -12
  477. package/build/esm/uart.js.map +0 -1
  478. package/build/esm/usb-device-wrapper.d.ts +0 -47
  479. package/build/esm/usb-device-wrapper.js +0 -410
  480. package/build/esm/usb-device-wrapper.js.map +0 -1
  481. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  482. package/build/esm/usb-partial-flashing.js.map +0 -1
  483. package/build/esm/usb-radio-bridge.d.ts +0 -24
  484. package/build/esm/usb-radio-bridge.js.map +0 -1
  485. package/build/esm/usb-serial-protocol.js.map +0 -1
  486. package/build/esm/usb.d.ts +0 -66
  487. package/build/esm/usb.js.map +0 -1
  488. package/typedoc.json +0 -14
  489. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  490. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  491. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  492. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  493. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  494. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  495. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  496. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  497. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  498. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  499. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  500. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  501. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  502. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  503. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  504. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
@@ -5,16 +5,26 @@
5
5
  */
6
6
  import { BleClient, } from "@capacitor-community/bluetooth-le";
7
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";
8
+ import { AccelerometerService } from "./services/accelerometer-service.js";
9
+ import { DisconnectError, disconnectErrorCallback, TimeoutError, timeoutErrorAfter, } from "../async-util.js";
10
+ import { ButtonService } from "./services/button-service.js";
11
+ import { DeviceInformationService } from "./services/device-information-service.js";
12
+ import { DeviceError, ProgressStage, } from "../device.js";
13
+ import { LedService } from "./services/led-service.js";
14
+ import { ConsoleLogging } from "../logging.js";
15
+ import { MagnetometerService } from "./services/magnetometer-service.js";
16
+ import { MicroBitMode, PartialFlashingService, } from "./services/partial-flashing-service.js";
17
+ import { EventService } from "./services/event-service.js";
18
+ import { TemperatureService } from "./services/temperature-service.js";
19
+ import { IoPinService } from "./services/io-pin-service.js";
20
+ import { UARTService } from "./services/uart-service.js";
21
+ import { DefaultDeviceBondState, } from "./device-bond-state.js";
22
+ import { profile } from "./profile.js";
23
+ /**
24
+ * The @capacitor-community/bluetooth-le plugin throws this message when
25
+ * a characteristic UUID is not found in the device's GATT table.
26
+ */
27
+ export const isCharacteristicNotFoundError = (e) => e instanceof Error && e.message === "Characteristic not found.";
18
28
  export const bondingTimeoutInMs = 40_000;
19
29
  export const connectTimeoutInMs = 10_000;
20
30
  export const scanningTimeoutInMs = 10_000;
@@ -41,12 +51,12 @@ export const isAndroid = () => Capacitor.getPlatform() === "android";
41
51
  // > In some situations the Chrome device prompt simply doesn't appear so we time
42
52
  // > this out after 30 seconds and reload the page
43
53
  export class BluetoothDeviceWrapper {
44
- constructor(device, logging = new ConsoleLogging(), dispatchTypedEvent, currentEvents, callbacks) {
45
- Object.defineProperty(this, "device", {
54
+ constructor(bleDevice, logging = new ConsoleLogging(), deviceBondState = new DefaultDeviceBondState(), dispatchTypedEvent, currentEvents, callbacks) {
55
+ Object.defineProperty(this, "bleDevice", {
46
56
  enumerable: true,
47
57
  configurable: true,
48
58
  writable: true,
49
- value: device
59
+ value: bleDevice
50
60
  });
51
61
  Object.defineProperty(this, "logging", {
52
62
  enumerable: true,
@@ -54,25 +64,23 @@ export class BluetoothDeviceWrapper {
54
64
  writable: true,
55
65
  value: logging
56
66
  });
57
- Object.defineProperty(this, "currentEvents", {
67
+ Object.defineProperty(this, "deviceBondState", {
58
68
  enumerable: true,
59
69
  configurable: true,
60
70
  writable: true,
61
- value: currentEvents
71
+ value: deviceBondState
62
72
  });
63
- Object.defineProperty(this, "callbacks", {
73
+ Object.defineProperty(this, "currentEvents", {
64
74
  enumerable: true,
65
75
  configurable: true,
66
76
  writable: true,
67
- value: callbacks
77
+ value: currentEvents
68
78
  });
69
- // Used to avoid automatic reconnection during user triggered connect/disconnect
70
- // or reconnection itself.
71
- Object.defineProperty(this, "duringExplicitConnectDisconnect", {
79
+ Object.defineProperty(this, "callbacks", {
72
80
  enumerable: true,
73
81
  configurable: true,
74
82
  writable: true,
75
- value: 0
83
+ value: callbacks
76
84
  });
77
85
  Object.defineProperty(this, "connected", {
78
86
  enumerable: true,
@@ -80,12 +88,6 @@ export class BluetoothDeviceWrapper {
80
88
  writable: true,
81
89
  value: false
82
90
  });
83
- Object.defineProperty(this, "isReconnect", {
84
- enumerable: true,
85
- configurable: true,
86
- writable: true,
87
- value: false
88
- });
89
91
  // Only updated after the full connection flow completes not during bond handling.
90
92
  Object.defineProperty(this, "serviceIds", {
91
93
  enumerable: true,
@@ -111,6 +113,18 @@ export class BluetoothDeviceWrapper {
111
113
  writable: true,
112
114
  value: void 0
113
115
  });
116
+ Object.defineProperty(this, "events", {
117
+ enumerable: true,
118
+ configurable: true,
119
+ writable: true,
120
+ value: void 0
121
+ });
122
+ Object.defineProperty(this, "ioPin", {
123
+ enumerable: true,
124
+ configurable: true,
125
+ writable: true,
126
+ value: void 0
127
+ });
114
128
  Object.defineProperty(this, "led", {
115
129
  enumerable: true,
116
130
  configurable: true,
@@ -123,6 +137,12 @@ export class BluetoothDeviceWrapper {
123
137
  writable: true,
124
138
  value: void 0
125
139
  });
140
+ Object.defineProperty(this, "temperature", {
141
+ enumerable: true,
142
+ configurable: true,
143
+ writable: true,
144
+ value: void 0
145
+ });
126
146
  Object.defineProperty(this, "uart", {
127
147
  enumerable: true,
128
148
  configurable: true,
@@ -160,65 +180,64 @@ export class BluetoothDeviceWrapper {
160
180
  enumerable: true,
161
181
  configurable: true,
162
182
  writable: true,
163
- value: async () => {
183
+ value: () => {
164
184
  this.waitingForDisconnectEventCallbacks.forEach((cb) => cb());
165
185
  this.waitingForDisconnectEventCallbacks.length = 0;
166
186
  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
- }
187
+ this.callbacks.onDisconnect();
179
188
  }
180
189
  });
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);
190
+ this.accelerometer = new AccelerometerService(bleDevice.deviceId, dispatchTypedEvent);
191
+ this.buttons = new ButtonService(bleDevice.deviceId, dispatchTypedEvent);
192
+ this.deviceInformation = new DeviceInformationService(bleDevice.deviceId);
193
+ this.events = new EventService(bleDevice.deviceId, dispatchTypedEvent, () => this.boardVersion);
194
+ this.ioPin = new IoPinService(bleDevice.deviceId, dispatchTypedEvent);
195
+ this.led = new LedService(bleDevice.deviceId);
196
+ this.magnetometer = new MagnetometerService(bleDevice.deviceId, dispatchTypedEvent);
197
+ this.temperature = new TemperatureService(bleDevice.deviceId, dispatchTypedEvent);
198
+ this.uart = new UARTService(bleDevice.deviceId, dispatchTypedEvent);
187
199
  this.services = [
188
200
  this.accelerometer,
189
201
  this.buttons,
202
+ this.events,
203
+ this.ioPin,
190
204
  this.led,
191
205
  this.magnetometer,
206
+ this.temperature,
192
207
  this.uart,
193
208
  ];
194
209
  }
195
- async connect() {
210
+ setBonded(isBonded) {
211
+ this.deviceBondState.setBonded(this.bleDevice.deviceId, isBonded);
212
+ }
213
+ async connect(options) {
214
+ const progress = options?.progress ?? (() => { });
196
215
  this.logging.event({
197
- type: this.isReconnect ? "Reconnect" : "Connect",
216
+ type: "Connect",
198
217
  message: "Bluetooth connect start",
199
218
  });
200
- if (this.isReconnect) {
201
- this.callbacks.onReconnecting();
202
- }
203
- else {
204
- this.callbacks.onConnecting();
205
- }
206
- this.duringExplicitConnectDisconnect++;
219
+ this.callbacks.onConnecting();
220
+ const bondMode = options?.bondMode ?? "pairing";
207
221
  try {
208
- if (Capacitor.isNativePlatform()) {
209
- await this.connectHandlingBond();
222
+ if (Capacitor.isNativePlatform() && bondMode !== "none") {
223
+ const isBonded = this.deviceBondState.isBonded(this.bleDevice.deviceId);
224
+ await this.connectHandlingBond(progress, isBonded ?? false, bondMode);
225
+ this.setBonded(true);
226
+ // We need this on Android for reconnecting after DFU.
227
+ await BleClient.discoverServices(this.bleDevice.deviceId);
210
228
  }
211
229
  else {
230
+ progress(ProgressStage.Connecting);
212
231
  await this.connectInternal();
213
232
  }
214
233
  await this.getBoardVersion();
215
234
  const events = this.currentEvents();
216
- const services = await BleClient.getServices(this.device.deviceId);
235
+ const services = await BleClient.getServices(this.bleDevice.deviceId);
217
236
  this.serviceIds = new Set(services.map((s) => s.uuid));
218
237
  this.logging.log(`Starting notifications for current events ${events}`);
219
238
  events.forEach((e) => this.startNotifications(e));
220
239
  this.logging.event({
221
- type: this.isReconnect ? "Reconnect" : "Connect",
240
+ type: "Connect",
222
241
  message: "Bluetooth connect success",
223
242
  });
224
243
  this.callbacks.onSuccess();
@@ -226,34 +245,35 @@ export class BluetoothDeviceWrapper {
226
245
  catch (e) {
227
246
  this.logging.error("Bluetooth connect error", e);
228
247
  this.logging.event({
229
- type: this.isReconnect ? "Reconnect" : "Connect",
248
+ type: "Connect",
230
249
  message: "Bluetooth connect failed",
231
250
  });
232
251
  await this.disconnectInternal(false);
233
- this.callbacks.onFail();
252
+ this.callbacks.onDisconnect();
234
253
  if (e instanceof DeviceError) {
235
254
  throw e;
236
255
  }
237
- if (e instanceof TimeoutError) {
256
+ this.setBonded(false);
257
+ if (
258
+ // Error thrown in iOS only.
259
+ e instanceof Error &&
260
+ e.message === "Peer removed pairing information") {
238
261
  throw new DeviceError({
239
- code: "timeout-error",
240
- message: e instanceof Error ? e.message : String(e),
262
+ code: "pairing-information-lost",
263
+ message: e.message,
264
+ cause: e,
241
265
  });
242
266
  }
243
267
  throw new DeviceError({
244
- code: "bluetooth-connection-failed",
268
+ code: "connection-error",
245
269
  message: e instanceof Error ? e.message : String(e),
270
+ cause: e,
246
271
  });
247
272
  }
248
- finally {
249
- this.duringExplicitConnectDisconnect--;
250
- // Reset isReconnect for next time
251
- this.isReconnect = false;
252
- }
253
273
  }
254
274
  async connectInternal() {
255
275
  this.waitingForDisconnectEventCallbacks.length = 0;
256
- await BleClient.connect(this.device.deviceId, this.handleDisconnectEvent, {
276
+ await BleClient.connect(this.bleDevice.deviceId, this.handleDisconnectEvent, {
257
277
  timeout: connectTimeoutInMs,
258
278
  });
259
279
  this.connected = true;
@@ -263,24 +283,15 @@ export class BluetoothDeviceWrapper {
263
283
  }
264
284
  async disconnectInternal(userTriggered) {
265
285
  this.logging.log(`Bluetooth disconnect ${userTriggered ? "(user triggered)" : "(programmatic)"}`);
266
- this.duringExplicitConnectDisconnect++;
267
286
  try {
268
287
  if (this.connected) {
269
- await BleClient.disconnect(this.device.deviceId);
288
+ await BleClient.disconnect(this.bleDevice.deviceId);
270
289
  }
271
290
  }
272
291
  catch (e) {
273
292
  this.logging.error("Bluetooth GATT disconnect error (ignored)", e);
274
293
  // We might have already lost the connection.
275
294
  }
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
295
  }
285
296
  async getBoardVersion() {
286
297
  // We read this when we connect and it won't change.
@@ -301,7 +312,7 @@ export class BluetoothDeviceWrapper {
301
312
  }
302
313
  async startInternalNotifications(serviceId, characteristicId, options) {
303
314
  const key = this.getNotificationKey(serviceId, characteristicId);
304
- await this.raceDisconnectAndTimeout(BleClient.startNotifications(this.device.deviceId, serviceId, characteristicId, (value) => {
315
+ await this.raceDisconnectAndTimeout(BleClient.startNotifications(this.bleDevice.deviceId, serviceId, characteristicId, (value) => {
305
316
  const bytes = new Uint8Array(value.buffer);
306
317
  // Notify all registered callbacks.
307
318
  this.internalNotificationListeners
@@ -321,7 +332,7 @@ export class BluetoothDeviceWrapper {
321
332
  this.internalNotificationListeners.get(key)?.delete(callback);
322
333
  }
323
334
  async stopInternalNotifications(serviceId, characteristicId) {
324
- await BleClient.stopNotifications(this.device.deviceId, serviceId, characteristicId);
335
+ await BleClient.stopNotifications(this.bleDevice.deviceId, serviceId, characteristicId);
325
336
  const key = this.getNotificationKey(serviceId, characteristicId);
326
337
  this.internalNotificationListeners.delete(key);
327
338
  }
@@ -342,7 +353,7 @@ export class BluetoothDeviceWrapper {
342
353
  this.subscribe(serviceId, characteristicId, notificationListener);
343
354
  });
344
355
  try {
345
- await BleClient.writeWithoutResponse(this.device.deviceId, serviceId, characteristicId, value);
356
+ await BleClient.writeWithoutResponse(this.bleDevice.deviceId, serviceId, characteristicId, value);
346
357
  return await this.raceDisconnectAndTimeout(notificationPromise, {
347
358
  timeout: 3_000,
348
359
  actionName: "flash notification wait",
@@ -412,9 +423,10 @@ export class BluetoothDeviceWrapper {
412
423
  * Bonds with device and handles the post-bond device state only returning
413
424
  * when we can reattempt a connection with the device.
414
425
  */
415
- async connectHandlingBond() {
426
+ async connectHandlingBond(progress, isAlreadyIosBonded, bondMode) {
427
+ progress(ProgressStage.CheckingBond);
416
428
  const startTime = Date.now();
417
- const maybeJustBonded = await this.bondConnectDeviceInternal();
429
+ const maybeJustBonded = await this.bondConnectDeviceInternal(isAlreadyIosBonded);
418
430
  if (maybeJustBonded) {
419
431
  // If we did just bond then the device disconnects after 2_000 and then
420
432
  // resets after a further 13_000 In future we'd like a firmware change
@@ -441,18 +453,31 @@ export class BluetoothDeviceWrapper {
441
453
  }
442
454
  }
443
455
  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}`);
456
+ try {
457
+ const targetMode = bondMode === "pairing"
458
+ ? MicroBitMode.Pairing
459
+ : MicroBitMode.Application;
460
+ progress(ProgressStage.ResettingDevice);
461
+ this.log(`Resetting to ${bondMode} mode`);
462
+ const pf = new PartialFlashingService(this);
463
+ await pf.resetToMode(targetMode);
464
+ await this.waitForDisconnect(10_000);
465
+ progress(ProgressStage.Connecting);
466
+ await this.connectInternal();
467
+ }
468
+ catch (e) {
469
+ if (isCharacteristicNotFoundError(e)) {
470
+ this.log("Partial flashing characteristic not found, skipping reset.");
471
+ }
472
+ else {
473
+ throw e;
474
+ }
475
+ }
452
476
  }
477
+ this.log(`Connection ready; took ${Date.now() - startTime}`);
453
478
  }
454
- async bondConnectDeviceInternal() {
455
- const { deviceId } = this.device;
479
+ async bondConnectDeviceInternal(isAlreadyIosBonded) {
480
+ const { deviceId } = this.bleDevice;
456
481
  if (isAndroid()) {
457
482
  let justBonded = false;
458
483
  // This gets us a nicer pairing dialog than just going straight for the characteristic.
@@ -470,12 +495,54 @@ export class BluetoothDeviceWrapper {
470
495
  // need to call startNotifications again. We need to be connected to
471
496
  // startNotifications.
472
497
  await this.connectInternal();
498
+ if (!isAlreadyIosBonded) {
499
+ await this.triggerIosPairing({ timeout: bondingTimeoutInMs });
500
+ }
501
+ return !isAlreadyIosBonded;
502
+ }
503
+ }
504
+ /**
505
+ * On iOS, accessing an encrypted characteristic triggers the pairing dialog.
506
+ * Try each candidate characteristic in turn until one succeeds. The error is
507
+ * fast (local GATT cache lookup) so there's no meaningful delay from retries.
508
+ */
509
+ async triggerIosPairing(options) {
510
+ const { deviceId } = this.bleDevice;
511
+ // 1. Partial flashing notifications (most common case)
512
+ try {
473
513
  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.
514
+ await pf.startNotifications(options);
476
515
  await pf.stopNotifications();
477
- return true;
516
+ return;
517
+ }
518
+ catch (e) {
519
+ if (!isCharacteristicNotFoundError(e)) {
520
+ throw e;
521
+ }
522
+ this.log("PF characteristic not found for pairing trigger, trying Secure DFU");
523
+ }
524
+ // 2. Nordic Secure DFU buttonless notifications (V2 without PF)
525
+ try {
526
+ await BleClient.startNotifications(deviceId, profile.nordicSecureDfu.id, profile.nordicSecureDfu.characteristics.buttonless.id, () => { }, options);
527
+ await BleClient.stopNotifications(deviceId, profile.nordicSecureDfu.id, profile.nordicSecureDfu.characteristics.buttonless.id);
528
+ return;
529
+ }
530
+ catch (e) {
531
+ if (!isCharacteristicNotFoundError(e)) {
532
+ throw e;
533
+ }
534
+ this.log("Secure DFU characteristic not found for pairing trigger, trying DFU control");
535
+ }
536
+ // 3. micro:bit DFU control read (V1 without PF)
537
+ try {
538
+ await BleClient.read(deviceId, profile.dfuControl.id, profile.dfuControl.characteristics.control.id, options);
539
+ }
540
+ catch (e) {
541
+ if (!isCharacteristicNotFoundError(e)) {
542
+ throw e;
543
+ }
544
+ this.log("No suitable characteristic found to trigger pairing");
478
545
  }
479
546
  }
480
547
  }
481
- //# sourceMappingURL=bluetooth-device-wrapper.js.map
548
+ //# sourceMappingURL=device-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-wrapper.js","sourceRoot":"","sources":["../../../src/bluetooth/device-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import MemoryMap from "nrf-intel-hex";
2
- import { BoardVersion, ProgressCallback } from "../device.js";
3
- import { BluetoothDeviceWrapper } from "../bluetooth-device-wrapper.js";
2
+ import { BoardVersion, ProgressCallback } from "../../device.js";
3
+ import { BluetoothDeviceWrapper } from "../device-wrapper.js";
4
4
  /**
5
5
  * Perform a full flash via Nordic's DFU service.
6
6
  *
@@ -1,8 +1,8 @@
1
- import { DeviceError, FlashDataError, ProgressStage, } from "../device.js";
2
- import { DfuService, NORDIC_DFU_SERVICE } from "../dfu-service.js";
1
+ import { DeviceError, FlashDataError, ProgressStage, } from "../../device.js";
2
+ import { DfuService, NORDIC_DFU_SERVICE } from "../services/dfu-service.js";
3
3
  import { refreshServicesForV1IfDesiredServiceMissing } from "./flashing-v1.js";
4
4
  import { flashDfu } from "./nordic-dfu.js";
5
- import { delay } from "../async-util.js";
5
+ import { delay } from "../../async-util.js";
6
6
  /**
7
7
  * Perform a full flash via Nordic's DFU service.
8
8
  *
@@ -16,7 +16,7 @@ import { delay } from "../async-util.js";
16
16
  export async function fullFlash(connection, boardVersion, memoryMap, progress) {
17
17
  connection.log("Full flash");
18
18
  progress(ProgressStage.FullFlashing);
19
- const { deviceId } = connection.device;
19
+ const { deviceId } = connection.bleDevice;
20
20
  try {
21
21
  if (boardVersion === "V1") {
22
22
  connection.log("Rebooting V1 to bootloader");
@@ -27,8 +27,9 @@ export async function fullFlash(connection, boardVersion, memoryMap, progress) {
27
27
  catch (e) {
28
28
  connection.error("Failed to request reboot to bootloader", e);
29
29
  throw new DeviceError({
30
- code: "flash-full-failed",
30
+ code: "connection-error",
31
31
  message: e instanceof Error ? e.message : "Failed to reboot to bootloader",
32
+ cause: e,
32
33
  });
33
34
  }
34
35
  // Wait for device to automatically disconnect as it reboots into bootloader
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-full.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/flashing-full.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import MemoryMap from "nrf-intel-hex";
2
+ import { RegionInfo } from "../services/partial-flashing-service.js";
3
+ export interface MakeCodeRegionInfo extends RegionInfo {
4
+ /** SHA-256 (truncated to 8 bytes) of the compiled program binary. */
5
+ appHash: string;
6
+ }
7
+ /**
8
+ * Find the MakeCode code region in a MemoryMap (typically from a hex file).
9
+ */
10
+ export declare const findMakeCodeRegionInMemoryMap: (memoryMap: MemoryMap, deviceCodeRegion: RegionInfo) => MakeCodeRegionInfo | null;
@@ -1,4 +1,5 @@
1
1
  const PXT_MAGIC_HEX = "708E3B92C615A841C49866C975EE5197";
2
+ const PXT_MAGIC_BYTES = PXT_MAGIC_HEX.length / 2; // 16
2
3
  /**
3
4
  * Find the MakeCode code region in a MemoryMap (typically from a hex file).
4
5
  */
@@ -7,9 +8,11 @@ export const findMakeCodeRegionInMemoryMap = (memoryMap, deviceCodeRegion) => {
7
8
  const offset = findByteSequence(block, PXT_MAGIC_HEX);
8
9
  if (offset >= 0) {
9
10
  const start = blockAddr + offset;
10
- const hashOffset = start + PXT_MAGIC_HEX.length / 2;
11
+ const hashOffset = start + PXT_MAGIC_BYTES;
11
12
  const hashBytes = memoryMap.slicePad(hashOffset, 8);
12
13
  const hash = bytesToHex(hashBytes);
14
+ const appHashBytes = memoryMap.slicePad(hashOffset + 8, 8);
15
+ const appHash = bytesToHex(appHashBytes);
13
16
  // Find the highest address with data in the memory map within the code region
14
17
  let end = start;
15
18
  for (const [blockAddr, block] of memoryMap) {
@@ -20,7 +23,7 @@ export const findMakeCodeRegionInMemoryMap = (memoryMap, deviceCodeRegion) => {
20
23
  }
21
24
  // Round up to next 64-byte boundary
22
25
  end = Math.ceil(end / 64) * 64;
23
- return { start, end, hash };
26
+ return { start, end, hash, appHash };
24
27
  }
25
28
  }
26
29
  return null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-makecode.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/flashing-makecode.ts"],"names":[],"mappings":"AAGA,MAAM,aAAa,GAAG,kCAAkC,CAAC;AACzD,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;AAOvD;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAAoB,EACpB,gBAA4B,EACD,EAAE;IAC7B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,GAAG,eAAe,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzC,8EAA8E;YAC9E,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC1C,IAAI,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC;oBACzD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAE/B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAAgB,EAAE,SAAiB;IAC3D,MAAM,MAAM,GAAG,IAAI,UAAU,CAC3B,SAAS,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAC9D,CAAC;IAEF,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;gBAAE,SAAS,KAAK,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}