@microbit/microbit-connection 0.9.0-apps.alpha.15 → 0.9.0-apps.alpha.17

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 (452) hide show
  1. package/build/cjs/async-util.js.map +1 -1
  2. package/build/cjs/async-util.test.d.ts +1 -0
  3. package/build/cjs/async-util.test.js +20 -0
  4. package/build/cjs/async-util.test.js.map +1 -0
  5. package/build/cjs/availability.js.map +1 -1
  6. package/build/{esm/bluetooth.d.ts → cjs/bluetooth/connection.d.ts} +30 -26
  7. package/build/cjs/{bluetooth.js → bluetooth/connection.js} +183 -106
  8. package/build/cjs/bluetooth/connection.js.map +1 -0
  9. package/build/cjs/bluetooth/connection.test.d.ts +1 -0
  10. package/build/cjs/bluetooth/connection.test.js +88 -0
  11. package/build/cjs/bluetooth/connection.test.js.map +1 -0
  12. package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
  13. package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +22 -11
  14. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +99 -42
  15. package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
  16. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.d.ts +2 -2
  17. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +4 -4
  18. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  19. package/build/cjs/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  20. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  21. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  22. package/build/cjs/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  23. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js +253 -0
  24. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  25. package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.d.ts +3 -2
  26. package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.js +17 -3
  27. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  28. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  29. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  30. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +25 -11
  31. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  32. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  33. package/build/cjs/bluetooth/flashing/zip.test.d.ts +1 -0
  34. package/build/cjs/bluetooth/flashing/zip.test.js +96 -0
  35. package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
  36. package/build/cjs/bluetooth/index.d.ts +5 -0
  37. package/build/cjs/bluetooth/index.js +9 -0
  38. package/build/cjs/bluetooth/index.js.map +1 -0
  39. package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  40. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  41. package/build/cjs/bluetooth/profile.js.map +1 -0
  42. package/build/{esm → cjs/bluetooth/services}/accelerometer-service.d.ts +2 -3
  43. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +16 -12
  44. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  45. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  46. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +15 -14
  47. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  48. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  49. package/build/cjs/{device-information-service.js → bluetooth/services/device-information-service.js} +2 -2
  50. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  51. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  52. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  53. package/build/cjs/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  54. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +7 -7
  55. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  56. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  57. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +18 -14
  58. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  59. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  60. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  61. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  62. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  63. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +12 -9
  64. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  65. package/build/cjs/board-id.d.ts +1 -1
  66. package/build/cjs/board-id.js.map +1 -1
  67. package/build/cjs/device.d.ts +82 -75
  68. package/build/cjs/device.js +40 -126
  69. package/build/cjs/device.js.map +1 -1
  70. package/build/cjs/events.d.ts +9 -108
  71. package/build/cjs/events.js +27 -88
  72. package/build/cjs/events.js.map +1 -1
  73. package/build/cjs/events.test.d.ts +1 -0
  74. package/build/cjs/events.test.js +115 -0
  75. package/build/cjs/events.test.js.map +1 -0
  76. package/build/cjs/hex-util.d.ts +1 -0
  77. package/build/cjs/hex-util.js +15 -0
  78. package/build/cjs/hex-util.js.map +1 -0
  79. package/build/cjs/index.d.ts +7 -16
  80. package/build/cjs/index.js +6 -26
  81. package/build/cjs/index.js.map +1 -1
  82. package/build/cjs/logging.js.map +1 -1
  83. package/build/cjs/radio-bridge/connection.d.ts +39 -0
  84. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +39 -25
  85. package/build/cjs/radio-bridge/connection.js.map +1 -0
  86. package/build/cjs/radio-bridge/index.d.ts +4 -0
  87. package/build/cjs/radio-bridge/index.js +9 -0
  88. package/build/cjs/radio-bridge/index.js.map +1 -0
  89. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  90. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  91. package/build/cjs/service-events.d.ts +42 -14
  92. package/build/cjs/service-events.js +6 -36
  93. package/build/cjs/service-events.js.map +1 -1
  94. package/build/cjs/setupTests.js +8 -0
  95. package/build/cjs/setupTests.js.map +1 -1
  96. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -2
  97. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +7 -15
  98. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  99. package/build/cjs/universal-hex/index.d.ts +4 -0
  100. package/build/cjs/universal-hex/index.js +9 -0
  101. package/build/cjs/universal-hex/index.js.map +1 -0
  102. package/build/cjs/usb/arm-debug.d.ts +137 -0
  103. package/build/cjs/usb/arm-debug.js +414 -0
  104. package/build/cjs/usb/arm-debug.js.map +1 -0
  105. package/build/cjs/usb/arm-debug.test.d.ts +1 -0
  106. package/build/cjs/usb/arm-debug.test.js +333 -0
  107. package/build/cjs/usb/arm-debug.test.js.map +1 -0
  108. package/build/cjs/{board-serial-info.d.ts → usb/board-serial-info.d.ts} +2 -1
  109. package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  110. package/build/cjs/usb/board-serial-info.js.map +1 -0
  111. package/build/cjs/usb/board-serial-info.test.d.ts +1 -0
  112. package/build/cjs/usb/board-serial-info.test.js +46 -0
  113. package/build/cjs/usb/board-serial-info.test.js.map +1 -0
  114. package/build/cjs/usb/cdc-saturation.d.ts +36 -0
  115. package/build/cjs/usb/cdc-saturation.js +151 -0
  116. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  117. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  118. package/build/cjs/usb/cmsis-dap.js +349 -0
  119. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  120. package/build/cjs/usb/cmsis-dap.test.d.ts +1 -0
  121. package/build/cjs/usb/cmsis-dap.test.js +350 -0
  122. package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
  123. package/build/cjs/usb/connection.d.ts +81 -0
  124. package/build/cjs/{usb.js → usb/connection.js} +243 -166
  125. package/build/cjs/usb/connection.js.map +1 -0
  126. package/build/cjs/usb/connection.test.d.ts +1 -0
  127. package/build/cjs/usb/connection.test.js +266 -0
  128. package/build/cjs/usb/connection.test.js.map +1 -0
  129. package/build/cjs/usb/cortex-m.d.ts +72 -0
  130. package/build/cjs/usb/cortex-m.js +165 -0
  131. package/build/cjs/usb/cortex-m.js.map +1 -0
  132. package/build/cjs/usb/cortex-m.test.d.ts +1 -0
  133. package/build/cjs/usb/cortex-m.test.js +217 -0
  134. package/build/cjs/usb/cortex-m.test.js.map +1 -0
  135. package/build/cjs/usb/daplink.d.ts +69 -0
  136. package/build/cjs/usb/daplink.js +238 -0
  137. package/build/cjs/usb/daplink.js.map +1 -0
  138. package/build/cjs/usb/daplink.test.d.ts +1 -0
  139. package/build/cjs/usb/daplink.test.js +290 -0
  140. package/build/cjs/usb/daplink.test.js.map +1 -0
  141. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  142. package/build/cjs/usb/device-wrapper.js +102 -0
  143. package/build/cjs/usb/device-wrapper.js.map +1 -0
  144. package/build/cjs/usb/index.d.ts +5 -0
  145. package/build/cjs/usb/index.js +10 -0
  146. package/build/cjs/usb/index.js.map +1 -0
  147. package/build/{esm/usb-partial-flashing-utils.d.ts → cjs/usb/partial-flashing-utils.d.ts} +6 -9
  148. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  149. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  150. package/build/cjs/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +15 -7
  151. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +64 -119
  152. package/build/cjs/usb/partial-flashing.js.map +1 -0
  153. package/build/cjs/usb/promise-queue.js.map +1 -0
  154. package/build/cjs/usb/promise-queue.test.d.ts +1 -0
  155. package/build/cjs/usb/promise-queue.test.js +68 -0
  156. package/build/cjs/usb/promise-queue.test.js.map +1 -0
  157. package/build/cjs/usb/serial-events.d.ts +21 -0
  158. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  159. package/build/cjs/usb/serial-events.js.map +1 -0
  160. package/build/cjs/usb/transport.d.ts +42 -0
  161. package/build/cjs/usb/transport.js +155 -0
  162. package/build/cjs/usb/transport.js.map +1 -0
  163. package/build/esm/async-util.js.map +1 -1
  164. package/build/esm/async-util.test.d.ts +1 -0
  165. package/build/esm/async-util.test.js +18 -0
  166. package/build/esm/async-util.test.js.map +1 -0
  167. package/build/esm/availability.js.map +1 -1
  168. package/build/{cjs/bluetooth.d.ts → esm/bluetooth/connection.d.ts} +30 -26
  169. package/build/esm/{bluetooth.js → bluetooth/connection.js} +177 -100
  170. package/build/esm/bluetooth/connection.js.map +1 -0
  171. package/build/esm/bluetooth/connection.test.d.ts +1 -0
  172. package/build/esm/bluetooth/connection.test.js +86 -0
  173. package/build/esm/bluetooth/connection.test.js.map +1 -0
  174. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  175. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +22 -11
  176. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +97 -41
  177. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  178. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.d.ts +2 -2
  179. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +4 -4
  180. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  181. package/build/esm/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  182. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  183. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  184. package/build/esm/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  185. package/build/esm/bluetooth/flashing/flashing-makecode.test.js +248 -0
  186. package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  187. package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.d.ts +3 -2
  188. package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.js +17 -3
  189. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  190. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  191. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  192. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +25 -11
  193. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  194. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  195. package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
  196. package/build/esm/bluetooth/flashing/zip.test.js +94 -0
  197. package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
  198. package/build/esm/bluetooth/index.d.ts +5 -0
  199. package/build/esm/bluetooth/index.js +5 -0
  200. package/build/esm/bluetooth/index.js.map +1 -0
  201. package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  202. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  203. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  204. package/build/{cjs → esm/bluetooth/services}/accelerometer-service.d.ts +2 -3
  205. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +10 -6
  206. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  207. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  208. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +10 -9
  209. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  210. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  211. package/build/esm/{device-information-service.js → bluetooth/services/device-information-service.js} +1 -1
  212. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  213. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  214. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  215. package/build/esm/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  216. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +1 -1
  217. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  218. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  219. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +10 -6
  220. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  221. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  222. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  223. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  224. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  225. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +8 -5
  226. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  227. package/build/esm/board-id.d.ts +1 -1
  228. package/build/esm/board-id.js.map +1 -1
  229. package/build/esm/device.d.ts +82 -75
  230. package/build/esm/device.js +38 -120
  231. package/build/esm/device.js.map +1 -1
  232. package/build/esm/events.d.ts +9 -108
  233. package/build/esm/events.js +26 -86
  234. package/build/esm/events.js.map +1 -1
  235. package/build/esm/events.test.d.ts +1 -0
  236. package/build/esm/events.test.js +113 -0
  237. package/build/esm/events.test.js.map +1 -0
  238. package/build/esm/hex-util.d.ts +1 -0
  239. package/build/esm/hex-util.js +11 -0
  240. package/build/esm/hex-util.js.map +1 -0
  241. package/build/esm/index.d.ts +7 -16
  242. package/build/esm/index.js +6 -10
  243. package/build/esm/index.js.map +1 -1
  244. package/build/esm/logging.js.map +1 -1
  245. package/build/esm/radio-bridge/connection.d.ts +39 -0
  246. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +39 -25
  247. package/build/esm/radio-bridge/connection.js.map +1 -0
  248. package/build/esm/radio-bridge/index.d.ts +4 -0
  249. package/build/esm/radio-bridge/index.js +5 -0
  250. package/build/esm/radio-bridge/index.js.map +1 -0
  251. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  252. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  253. package/build/esm/service-events.d.ts +42 -14
  254. package/build/esm/service-events.js +5 -34
  255. package/build/esm/service-events.js.map +1 -1
  256. package/build/esm/setupTests.js +7 -0
  257. package/build/esm/setupTests.js.map +1 -1
  258. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -2
  259. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -13
  260. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  261. package/build/esm/universal-hex/index.d.ts +4 -0
  262. package/build/esm/universal-hex/index.js +5 -0
  263. package/build/esm/universal-hex/index.js.map +1 -0
  264. package/build/esm/usb/arm-debug.d.ts +137 -0
  265. package/build/esm/usb/arm-debug.js +409 -0
  266. package/build/esm/usb/arm-debug.js.map +1 -0
  267. package/build/esm/usb/arm-debug.test.d.ts +1 -0
  268. package/build/esm/usb/arm-debug.test.js +331 -0
  269. package/build/esm/usb/arm-debug.test.js.map +1 -0
  270. package/build/esm/{board-serial-info.d.ts → usb/board-serial-info.d.ts} +2 -1
  271. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  272. package/build/esm/usb/board-serial-info.js.map +1 -0
  273. package/build/esm/usb/board-serial-info.test.d.ts +1 -0
  274. package/build/esm/usb/board-serial-info.test.js +44 -0
  275. package/build/esm/usb/board-serial-info.test.js.map +1 -0
  276. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  277. package/build/esm/usb/cdc-saturation.js +148 -0
  278. package/build/esm/usb/cdc-saturation.js.map +1 -0
  279. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  280. package/build/esm/usb/cmsis-dap.js +342 -0
  281. package/build/esm/usb/cmsis-dap.js.map +1 -0
  282. package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
  283. package/build/esm/usb/cmsis-dap.test.js +348 -0
  284. package/build/esm/usb/cmsis-dap.test.js.map +1 -0
  285. package/build/esm/usb/connection.d.ts +81 -0
  286. package/build/esm/{usb.js → usb/connection.js} +239 -161
  287. package/build/esm/usb/connection.js.map +1 -0
  288. package/build/esm/usb/connection.test.d.ts +1 -0
  289. package/build/esm/usb/connection.test.js +264 -0
  290. package/build/esm/usb/connection.test.js.map +1 -0
  291. package/build/esm/usb/cortex-m.d.ts +72 -0
  292. package/build/esm/usb/cortex-m.js +161 -0
  293. package/build/esm/usb/cortex-m.js.map +1 -0
  294. package/build/esm/usb/cortex-m.test.d.ts +1 -0
  295. package/build/esm/usb/cortex-m.test.js +215 -0
  296. package/build/esm/usb/cortex-m.test.js.map +1 -0
  297. package/build/esm/usb/daplink.d.ts +69 -0
  298. package/build/esm/usb/daplink.js +231 -0
  299. package/build/esm/usb/daplink.js.map +1 -0
  300. package/build/esm/usb/daplink.test.d.ts +1 -0
  301. package/build/esm/usb/daplink.test.js +288 -0
  302. package/build/esm/usb/daplink.test.js.map +1 -0
  303. package/build/esm/usb/device-wrapper.d.ts +34 -0
  304. package/build/esm/usb/device-wrapper.js +98 -0
  305. package/build/esm/usb/device-wrapper.js.map +1 -0
  306. package/build/esm/usb/index.d.ts +5 -0
  307. package/build/esm/usb/index.js +5 -0
  308. package/build/esm/usb/index.js.map +1 -0
  309. package/build/{cjs/usb-partial-flashing-utils.d.ts → esm/usb/partial-flashing-utils.d.ts} +6 -9
  310. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  311. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  312. package/build/esm/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +15 -7
  313. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +62 -94
  314. package/build/esm/usb/partial-flashing.js.map +1 -0
  315. package/build/esm/usb/promise-queue.js.map +1 -0
  316. package/build/esm/usb/promise-queue.test.d.ts +1 -0
  317. package/build/esm/usb/promise-queue.test.js +66 -0
  318. package/build/esm/usb/promise-queue.test.js.map +1 -0
  319. package/build/esm/usb/serial-events.d.ts +21 -0
  320. package/build/esm/usb/serial-events.js +2 -0
  321. package/build/esm/usb/serial-events.js.map +1 -0
  322. package/build/esm/usb/transport.d.ts +42 -0
  323. package/build/esm/usb/transport.js +151 -0
  324. package/build/esm/usb/transport.js.map +1 -0
  325. package/package.json +55 -15
  326. package/LICENSE.md +0 -21
  327. package/README.md +0 -125
  328. package/build/cjs/accelerometer-service.js.map +0 -1
  329. package/build/cjs/accelerometer.d.ts +0 -9
  330. package/build/cjs/accelerometer.js +0 -16
  331. package/build/cjs/accelerometer.js.map +0 -1
  332. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  333. package/build/cjs/bluetooth.js.map +0 -1
  334. package/build/cjs/board-serial-info.js.map +0 -1
  335. package/build/cjs/button-service.js.map +0 -1
  336. package/build/cjs/buttons.d.ts +0 -10
  337. package/build/cjs/buttons.js +0 -22
  338. package/build/cjs/buttons.js.map +0 -1
  339. package/build/cjs/constants.d.ts +0 -48
  340. package/build/cjs/constants.js +0 -73
  341. package/build/cjs/constants.js.map +0 -1
  342. package/build/cjs/device-bond-state.js.map +0 -1
  343. package/build/cjs/device-information-service.js.map +0 -1
  344. package/build/cjs/dfu-service.js.map +0 -1
  345. package/build/cjs/flashing/flashing-full.js.map +0 -1
  346. package/build/cjs/flashing/flashing-makecode.d.ts +0 -6
  347. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  348. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  349. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  350. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  351. package/build/cjs/flashing/zip.js.map +0 -1
  352. package/build/cjs/hex-flash-data-source.js.map +0 -1
  353. package/build/cjs/led-service.js.map +0 -1
  354. package/build/cjs/led.d.ts +0 -6
  355. package/build/cjs/led.js.map +0 -1
  356. package/build/cjs/magnetometer-service.js.map +0 -1
  357. package/build/cjs/magnetometer.d.ts +0 -9
  358. package/build/cjs/magnetometer.js +0 -16
  359. package/build/cjs/magnetometer.js.map +0 -1
  360. package/build/cjs/partial-flashing-service.js.map +0 -1
  361. package/build/cjs/promise-queue.js.map +0 -1
  362. package/build/cjs/serial-events.d.ts +0 -20
  363. package/build/cjs/serial-events.js +0 -69
  364. package/build/cjs/serial-events.js.map +0 -1
  365. package/build/cjs/uart-service.js.map +0 -1
  366. package/build/cjs/uart.d.ts +0 -4
  367. package/build/cjs/uart.js +0 -16
  368. package/build/cjs/uart.js.map +0 -1
  369. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  370. package/build/cjs/usb-device-wrapper.js +0 -437
  371. package/build/cjs/usb-device-wrapper.js.map +0 -1
  372. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  373. package/build/cjs/usb-partial-flashing.js.map +0 -1
  374. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  375. package/build/cjs/usb-radio-bridge.js.map +0 -1
  376. package/build/cjs/usb-serial-protocol.js.map +0 -1
  377. package/build/cjs/usb.d.ts +0 -66
  378. package/build/cjs/usb.js.map +0 -1
  379. package/build/esm/accelerometer-service.js.map +0 -1
  380. package/build/esm/accelerometer.d.ts +0 -9
  381. package/build/esm/accelerometer.js +0 -12
  382. package/build/esm/accelerometer.js.map +0 -1
  383. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  384. package/build/esm/bluetooth-profile.js.map +0 -1
  385. package/build/esm/bluetooth.js.map +0 -1
  386. package/build/esm/board-serial-info.js.map +0 -1
  387. package/build/esm/button-service.js.map +0 -1
  388. package/build/esm/buttons.d.ts +0 -10
  389. package/build/esm/buttons.js +0 -18
  390. package/build/esm/buttons.js.map +0 -1
  391. package/build/esm/constants.d.ts +0 -48
  392. package/build/esm/constants.js +0 -70
  393. package/build/esm/constants.js.map +0 -1
  394. package/build/esm/device-bond-state.js.map +0 -1
  395. package/build/esm/device-information-service.js.map +0 -1
  396. package/build/esm/dfu-service.js.map +0 -1
  397. package/build/esm/flashing/flashing-full.js.map +0 -1
  398. package/build/esm/flashing/flashing-makecode.d.ts +0 -6
  399. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  400. package/build/esm/flashing/flashing-partial.js.map +0 -1
  401. package/build/esm/flashing/flashing-v1.js.map +0 -1
  402. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  403. package/build/esm/flashing/zip.js.map +0 -1
  404. package/build/esm/hex-flash-data-source.js.map +0 -1
  405. package/build/esm/led-service.js.map +0 -1
  406. package/build/esm/led.d.ts +0 -6
  407. package/build/esm/led.js +0 -2
  408. package/build/esm/led.js.map +0 -1
  409. package/build/esm/magnetometer-service.js.map +0 -1
  410. package/build/esm/magnetometer.d.ts +0 -9
  411. package/build/esm/magnetometer.js +0 -12
  412. package/build/esm/magnetometer.js.map +0 -1
  413. package/build/esm/partial-flashing-service.js.map +0 -1
  414. package/build/esm/promise-queue.js.map +0 -1
  415. package/build/esm/serial-events.d.ts +0 -20
  416. package/build/esm/serial-events.js +0 -61
  417. package/build/esm/serial-events.js.map +0 -1
  418. package/build/esm/uart-service.js.map +0 -1
  419. package/build/esm/uart.d.ts +0 -4
  420. package/build/esm/uart.js +0 -12
  421. package/build/esm/uart.js.map +0 -1
  422. package/build/esm/usb-device-wrapper.d.ts +0 -47
  423. package/build/esm/usb-device-wrapper.js +0 -410
  424. package/build/esm/usb-device-wrapper.js.map +0 -1
  425. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  426. package/build/esm/usb-partial-flashing.js.map +0 -1
  427. package/build/esm/usb-radio-bridge.d.ts +0 -24
  428. package/build/esm/usb-radio-bridge.js.map +0 -1
  429. package/build/esm/usb-serial-protocol.js.map +0 -1
  430. package/build/esm/usb.d.ts +0 -66
  431. package/build/esm/usb.js.map +0 -1
  432. package/typedoc.json +0 -14
  433. /package/build/cjs/{device-bond-state.d.ts → bluetooth/device-bond-state.d.ts} +0 -0
  434. /package/build/cjs/{device-bond-state.js → bluetooth/device-bond-state.js} +0 -0
  435. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  436. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  437. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  438. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  439. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  440. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  441. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  442. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  443. /package/build/esm/{device-bond-state.d.ts → bluetooth/device-bond-state.d.ts} +0 -0
  444. /package/build/esm/{device-bond-state.js → bluetooth/device-bond-state.js} +0 -0
  445. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  446. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  447. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  448. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  449. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  450. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  451. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  452. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
@@ -0,0 +1,248 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { readFileSync } from "fs";
3
+ import { resolve } from "path";
4
+ import MemoryMap from "nrf-intel-hex";
5
+ import { isUniversalHex, separateUniversalHex, } from "@microbit/microbit-universal-hex";
6
+ import { findMakeCodeRegionInMemoryMap } from "./flashing-makecode.js";
7
+ import { truncateHexAfterEof } from "../../hex-util.js";
8
+ const hexDir = resolve(__dirname, "../../../examples");
9
+ const loadHex = (name) => readFileSync(resolve(hexDir, name), "utf-8");
10
+ /**
11
+ * Load a hex file, separate if universal, and return parsed MemoryMaps
12
+ * keyed by board ID (or 0 for thin hex).
13
+ */
14
+ const loadParsedHex = (name) => {
15
+ const raw = loadHex(name);
16
+ if (isUniversalHex(raw)) {
17
+ return separateUniversalHex(raw).map((p) => ({
18
+ boardId: p.boardId,
19
+ memoryMap: MemoryMap.fromHex(p.hex),
20
+ }));
21
+ }
22
+ return [
23
+ { boardId: 0, memoryMap: MemoryMap.fromHex(truncateHexAfterEof(raw)) },
24
+ ];
25
+ };
26
+ const fullFlashRegion = (end) => ({
27
+ start: 0,
28
+ end,
29
+ hash: "",
30
+ });
31
+ // All example hex files with expected regions per board
32
+ const hexFiles = [
33
+ {
34
+ // v0 embeds source directly in the flash binary (JSON + LZMA at ~0x315f0)
35
+ // rather than in custom Intel HEX record type 0x0E like later versions.
36
+ name: "microbit-small-heart-makecode-v0.hex",
37
+ label: "MakeCode v0",
38
+ universal: false,
39
+ regions: [
40
+ {
41
+ boardId: 0,
42
+ start: 0x30c00,
43
+ end: 0x3fc40,
44
+ hash: "AB433FFB2EC06262",
45
+ appHash: "653E46119D3A701B",
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ name: "microbit-small-heart-makecode-v1.hex",
51
+ label: "MakeCode v1",
52
+ universal: false,
53
+ regions: [
54
+ {
55
+ boardId: 0,
56
+ start: 0x32c00,
57
+ end: 0x3fc40,
58
+ hash: "13FC432659DAE036",
59
+ appHash: "579ACD9774545DAA",
60
+ },
61
+ ],
62
+ },
63
+ {
64
+ name: "microbit-small-heart-makecode-v2.hex",
65
+ label: "MakeCode v2",
66
+ universal: false,
67
+ regions: [
68
+ {
69
+ boardId: 0,
70
+ start: 0x34800,
71
+ end: 0x3fc40,
72
+ hash: "02F597B8CE253C03",
73
+ appHash: "AF81BA51A0E7E921",
74
+ },
75
+ ],
76
+ },
77
+ {
78
+ name: "microbit-small-heart-makecode-v3.hex",
79
+ label: "MakeCode v3",
80
+ universal: true,
81
+ regions: [
82
+ {
83
+ boardId: 0x9901,
84
+ start: 0x35000,
85
+ end: 0x3fc40,
86
+ hash: "4F4FD28A88324C7E",
87
+ appHash: "C1008100AB00DD00",
88
+ },
89
+ {
90
+ boardId: 0x9903,
91
+ start: 0x45000,
92
+ end: 0x7f340,
93
+ hash: "FFC95E6502F1C747",
94
+ appHash: "DB0013005900BE00",
95
+ },
96
+ ],
97
+ },
98
+ {
99
+ name: "microbit-small-heart-makecode-v4.hex",
100
+ label: "MakeCode v4",
101
+ universal: true,
102
+ regions: [
103
+ {
104
+ boardId: 0x9901,
105
+ start: 0x35000,
106
+ end: 0x3fc40,
107
+ hash: "02E34856C566087A",
108
+ appHash: "54005A00F1008000",
109
+ },
110
+ {
111
+ boardId: 0x9903,
112
+ start: 0x47000,
113
+ end: 0x7f340,
114
+ hash: "8E4D117FB81B2B19",
115
+ appHash: "39006F00D900A600",
116
+ },
117
+ ],
118
+ },
119
+ {
120
+ name: "microbit-small-heart-makecode-v5.hex",
121
+ label: "MakeCode v5",
122
+ universal: true,
123
+ regions: [
124
+ {
125
+ boardId: 0x9900,
126
+ start: 0x36800,
127
+ end: 0x3fc40,
128
+ hash: "FFDA7A967870CC1B",
129
+ appHash: "E4006A0031002200",
130
+ },
131
+ {
132
+ boardId: 0x9903,
133
+ start: 0x47000,
134
+ end: 0x7f340,
135
+ hash: "3BD7683DA9B220E8",
136
+ appHash: "3E003800AF001600",
137
+ },
138
+ ],
139
+ },
140
+ {
141
+ name: "microbit-small-heart-makecode-v6.hex",
142
+ label: "MakeCode v6",
143
+ universal: true,
144
+ regions: [
145
+ {
146
+ boardId: 0x9900,
147
+ start: 0x35400,
148
+ end: 0x3fc40,
149
+ hash: "F4B5733CAAC69708",
150
+ appHash: "78005900AB000900",
151
+ },
152
+ {
153
+ boardId: 0x9903,
154
+ start: 0x47000,
155
+ end: 0x7f340,
156
+ hash: "890F5019E604A158",
157
+ appHash: "E300B400A6003100",
158
+ },
159
+ ],
160
+ },
161
+ {
162
+ name: "microbit-small-heart-makecode-v7.hex",
163
+ label: "MakeCode v7",
164
+ universal: true,
165
+ regions: [
166
+ {
167
+ boardId: 0x9900,
168
+ start: 0x35400,
169
+ end: 0x3fc40,
170
+ hash: "F87DD6F924D49825",
171
+ appHash: "2B00EF0092003900",
172
+ },
173
+ {
174
+ boardId: 0x9903,
175
+ start: 0x47000,
176
+ end: 0x7f340,
177
+ hash: "42B6FF95F591DA1F",
178
+ appHash: "9100F3005800E800",
179
+ },
180
+ ],
181
+ },
182
+ {
183
+ name: "microbit-small-heart-makecode-v8.hex",
184
+ label: "MakeCode v8",
185
+ universal: true,
186
+ regions: [
187
+ {
188
+ boardId: 0x9900,
189
+ start: 0x35400,
190
+ end: 0x3fc40,
191
+ hash: "8E76592A9CB06B29",
192
+ appHash: "8300A70050005500",
193
+ },
194
+ {
195
+ boardId: 0x9903,
196
+ start: 0x47000,
197
+ end: 0x7f340,
198
+ hash: "22204AC874977E7F",
199
+ appHash: "900022002E00BE00",
200
+ },
201
+ ],
202
+ },
203
+ ];
204
+ describe("findMakeCodeRegionInMemoryMap", () => {
205
+ for (const { name, label, universal, regions } of hexFiles) {
206
+ describe(label, () => {
207
+ const parts = loadParsedHex(name);
208
+ if (!universal) {
209
+ it("is a non-universal (thin) hex", () => {
210
+ expect(isUniversalHex(loadHex(name))).toBe(false);
211
+ });
212
+ }
213
+ for (const expected of regions) {
214
+ const part = parts.find((p) => p.boardId === expected.boardId);
215
+ const isV2Board = expected.boardId === 0x9903 || expected.boardId === 0x9904;
216
+ const boardLabel = expected.boardId === 0
217
+ ? "thin V1"
218
+ : `boardId=0x${expected.boardId.toString(16)}`;
219
+ const flashEnd = isV2Board ? 0x80000 : 0x40000;
220
+ it(`finds the MakeCode region (${boardLabel})`, () => {
221
+ expect(part).toBeDefined();
222
+ const region = findMakeCodeRegionInMemoryMap(part.memoryMap, fullFlashRegion(flashEnd));
223
+ expect(region).toEqual({
224
+ start: expected.start,
225
+ end: expected.end,
226
+ hash: expected.hash,
227
+ appHash: expected.appHash,
228
+ });
229
+ });
230
+ }
231
+ });
232
+ }
233
+ describe("thin hex EOF truncation", () => {
234
+ const thinFiles = hexFiles.filter((f) => !f.universal);
235
+ for (const { name, label } of thinFiles) {
236
+ it(`${label} raw hex has data after EOF that MemoryMap.fromHex rejects`, () => {
237
+ const raw = loadHex(name);
238
+ expect(() => MemoryMap.fromHex(raw)).toThrow(/after.*EOF/i);
239
+ });
240
+ it(`${label} can be parsed after truncating at EOF`, () => {
241
+ const parts = loadParsedHex(name);
242
+ expect(parts).toHaveLength(1);
243
+ expect(parts[0].memoryMap).toBeInstanceOf(MemoryMap);
244
+ });
245
+ }
246
+ });
247
+ });
248
+ //# sourceMappingURL=flashing-makecode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-makecode.test.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/flashing-makecode.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import MemoryMap from "nrf-intel-hex";
2
- import { BluetoothDeviceWrapper } from "../bluetooth-device-wrapper.js";
3
- import { BoardVersion, ProgressCallback } from "../device.js";
2
+ import { BluetoothDeviceWrapper } from "../device-wrapper.js";
3
+ import { BoardVersion, ProgressCallback } from "../../device.js";
4
4
  export declare enum PartialFlashResult {
5
5
  Success = "Success",
6
+ AlreadyUpToDate = "AlreadyUpToDate",
6
7
  AttemptFullFlash = "AttemptFullFlash"
7
8
  }
8
9
  declare const partialFlash: (connection: BluetoothDeviceWrapper, boardVersion: BoardVersion, memoryMap: MemoryMap, progress: ProgressCallback) => Promise<PartialFlashResult>;
@@ -1,7 +1,8 @@
1
- import { PacketState, PartialFlashingService, RegionId, } from "../partial-flashing-service.js";
1
+ import { isCharacteristicNotFoundError, } from "../device-wrapper.js";
2
+ import { MicroBitMode, PacketState, PartialFlashingService, RegionId, } from "../services/partial-flashing-service.js";
2
3
  import { findMakeCodeRegionInMemoryMap } from "./flashing-makecode.js";
3
- import { DisconnectError } from "../async-util.js";
4
- import { DeviceError, ProgressStage, } from "../device.js";
4
+ import { DisconnectError } from "../../async-util.js";
5
+ import { DeviceError, ProgressStage, } from "../../device.js";
5
6
  const FLASH_PAGE_SIZE = {
6
7
  V1: 0x400,
7
8
  V2: 0x1000,
@@ -9,6 +10,7 @@ const FLASH_PAGE_SIZE = {
9
10
  export var PartialFlashResult;
10
11
  (function (PartialFlashResult) {
11
12
  PartialFlashResult["Success"] = "Success";
13
+ PartialFlashResult["AlreadyUpToDate"] = "AlreadyUpToDate";
12
14
  PartialFlashResult["AttemptFullFlash"] = "AttemptFullFlash";
13
15
  })(PartialFlashResult || (PartialFlashResult = {}));
14
16
  const partialFlash = async (connection, boardVersion, memoryMap, progress) => {
@@ -23,6 +25,9 @@ const partialFlash = async (connection, boardVersion, memoryMap, progress) => {
23
25
  }
24
26
  catch (e) {
25
27
  connection.error("Partial flash failed", e);
28
+ if (isCharacteristicNotFoundError(e)) {
29
+ return PartialFlashResult.AttemptFullFlash;
30
+ }
26
31
  if (
27
32
  // Error thrown in iOS only for when user cancels the pairing dialog.
28
33
  e instanceof Error &&
@@ -61,6 +66,10 @@ const partialFlashInternal = async (connection, pf, boardVersion, memoryMap, pro
61
66
  connection.log("Could not read DAL region");
62
67
  return PartialFlashResult.AttemptFullFlash;
63
68
  }
69
+ if (/^0+$/.test(deviceDalRegion.hash) || /^0+$/.test(deviceCodeRegion.hash)) {
70
+ connection.log("Device reported zero hash, skipping partial flash");
71
+ return PartialFlashResult.AttemptFullFlash;
72
+ }
64
73
  progress(ProgressStage.PartialFlashing);
65
74
  const fileCodeRegion = findMakeCodeRegionInMemoryMap(memoryMap, deviceCodeRegion);
66
75
  if (fileCodeRegion === null) {
@@ -75,6 +84,11 @@ const partialFlashInternal = async (connection, pf, boardVersion, memoryMap, pro
75
84
  connection.log("Code start address doesn't match");
76
85
  return PartialFlashResult.AttemptFullFlash;
77
86
  }
87
+ if (fileCodeRegion.appHash === deviceCodeRegion.hash) {
88
+ connection.log("Application hash matches, already up to date");
89
+ await pf.resetToMode(MicroBitMode.Application);
90
+ return PartialFlashResult.AlreadyUpToDate;
91
+ }
78
92
  // The device-side partial flash service erases each flash page when it
79
93
  // receives a write at a page-aligned address. After erase, every byte
80
94
  // in the page is 0xFF, so writing 0xFF within an already-erased page
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-partial.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/flashing-partial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashing-v1.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/flashing-v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2CAA2C,GAAG,KAAK,EAC9D,QAAgB,EAChB,kBAA0B,EAC1B,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;IAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,wDAAwD;QACxD,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- import { BluetoothDeviceWrapper } from "../bluetooth-device-wrapper.js";
2
- import { BoardVersion, ProgressCallback } from "../device.js";
1
+ import { BluetoothDeviceWrapper } from "../device-wrapper.js";
2
+ import { BoardVersion, ProgressCallback } from "../../device.js";
3
3
  export declare function flashDfu(connection: BluetoothDeviceWrapper, boardVersion: BoardVersion, appBin: Uint8Array, progress: ProgressCallback): Promise<void>;
@@ -2,7 +2,7 @@ import { Capacitor } from "@capacitor/core";
2
2
  import { Directory, Filesystem } from "@capacitor/filesystem";
3
3
  import { DfuState, NordicDfu } from "@microbit/capacitor-community-nordic-dfu";
4
4
  import { createZip } from "./zip.js";
5
- import { DeviceError, ProgressStage, } from "../device.js";
5
+ import { DeviceError, ProgressStage, } from "../../device.js";
6
6
  const appBinFilename = "application.bin";
7
7
  const appDatFilename = "application.dat";
8
8
  const manifestData = JSON.stringify({
@@ -30,7 +30,7 @@ async function createDfuZipFile(boardVersion, appBin) {
30
30
  const createInitPacket = boardVersion === "V1" ? createLegacyInitPacketV1 : createInitPacketV2;
31
31
  const encoder = new TextEncoder();
32
32
  const zipData = createZip([
33
- { name: appDatFilename, data: createInitPacket(appBin) },
33
+ { name: appDatFilename, data: await createInitPacket(appBin) },
34
34
  { name: appBinFilename, data: appBin },
35
35
  { name: "manifest.json", data: encoder.encode(manifestData) },
36
36
  ]);
@@ -56,7 +56,7 @@ async function cleanupTemporaryFile(connection, filename) {
56
56
  }
57
57
  }
58
58
  export async function flashDfu(connection, boardVersion, appBin, progress) {
59
- const { device } = connection;
59
+ const { bleDevice } = connection;
60
60
  const { uri: filePath, filename } = await getFilePath(boardVersion, appBin);
61
61
  let listener;
62
62
  try {
@@ -95,16 +95,16 @@ export async function flashDfu(connection, boardVersion, appBin, progress) {
95
95
  }
96
96
  });
97
97
  // Note this doesn't await the whole DFU process, just its initialization
98
+ const isAndroid = Capacitor.getPlatform() === "android";
98
99
  const error = await NordicDfu.startDFU({
99
- deviceName: device.name,
100
- deviceAddress: device.deviceId,
100
+ deviceName: bleDevice.name,
101
+ deviceAddress: bleDevice.deviceId,
101
102
  filePath,
102
- dfuOptions: Capacitor.getPlatform() === "android"
103
+ dfuOptions: isAndroid
103
104
  ? {
104
105
  ...{
105
106
  V1: { forceDfu: true },
106
107
  V2: {
107
- unsafeExperimentalButtonlessServiceInSecureDfuEnabled: true,
108
108
  disableNotification: true,
109
109
  restoreBond: true,
110
110
  },
@@ -113,7 +113,18 @@ export async function flashDfu(connection, boardVersion, appBin, progress) {
113
113
  keepBond: true,
114
114
  packetReceiptNotificationsEnabled: true,
115
115
  }
116
- : {},
116
+ : {
117
+ // The micro:bit bootloader is built with
118
+ // NRF_DFU_BLE_REQUIRES_BONDS=1, which compiles out the code
119
+ // path that reads a custom advertising name from settings. The
120
+ // bootloader always advertises as "DfuTarg" regardless of any
121
+ // name sent via opcode 0x02. With alternativeAdvertisingNameEnabled
122
+ // left as true (the default), the DFU library scans for the
123
+ // wrong name and times out. With it disabled, the library scans
124
+ // by DFU service UUID instead.
125
+ // Android is unaffected as it reconnects by MAC address.
126
+ alternativeAdvertisingNameEnabled: false,
127
+ },
117
128
  });
118
129
  if (error) {
119
130
  connection.error(`DFU Error: ${error.message}`, error);
@@ -173,7 +184,9 @@ const calculateCRC16 = (data) => {
173
184
  }
174
185
  return crc & 0xffff;
175
186
  };
176
- const createInitPacketV2 = (appBin) => {
187
+ // See microbit_dfu_app_t and fw_hash_ok in the V2 bootloader:
188
+ // https://github.com/microbit-foundation/v2-bootloader/blob/master/nRF5SDK_mods/components/libraries/bootloader/dfu/nrf_dfu_validation.c
189
+ const createInitPacketV2 = async (appBin) => {
177
190
  //typedef struct {
178
191
  // uint8_t magic[12]; // identify this struct "microbit_app"
179
192
  // uint32_t version; // version of this struct == 1
@@ -184,8 +197,9 @@ const createInitPacketV2 = (appBin) => {
184
197
  const appSize = appBin.length;
185
198
  const magic = "microbit_app";
186
199
  const version = 1;
187
- const hashSize = 0;
188
- const hash = new Uint8Array(32).fill(0);
200
+ const hashSize = 32;
201
+ const hash = new Uint8Array(await crypto.subtle.digest("SHA-256", appBin));
202
+ hash.reverse(); // Bootloader reverses bytes before comparing (see nrf_dfu_validation_hash_ok)
189
203
  const buffer = new ArrayBuffer(12 + 4 + 4 + 4 + 32); // total: 56 bytes
190
204
  const view = new DataView(buffer);
191
205
  const uint8View = new Uint8Array(buffer);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nordic-dfu.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/nordic-dfu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/zip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,94 @@
1
+ import { execSync } from "child_process";
2
+ import { mkdtempSync, writeFileSync, readFileSync, rmSync } from "fs";
3
+ import { tmpdir } from "os";
4
+ import { join } from "path";
5
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
6
+ import { createZip } from "./zip.js";
7
+ const isWindows = process.platform === "win32";
8
+ describe.skipIf(isWindows)("createZip", () => {
9
+ let tempDir;
10
+ beforeEach(() => {
11
+ tempDir = mkdtempSync(join(tmpdir(), "zip-test-"));
12
+ });
13
+ afterEach(() => {
14
+ rmSync(tempDir, { recursive: true, force: true });
15
+ });
16
+ const unzip = (zipPath, outDir) => {
17
+ execSync(`unzip -o "${zipPath}" -d "${outDir}"`, { stdio: "pipe" });
18
+ };
19
+ it("creates a valid ZIP with a single text file", () => {
20
+ const content = "Hello, World!";
21
+ const encoder = new TextEncoder();
22
+ const zip = createZip([
23
+ { name: "hello.txt", data: encoder.encode(content) },
24
+ ]);
25
+ const zipPath = join(tempDir, "test.zip");
26
+ const outDir = join(tempDir, "out");
27
+ writeFileSync(zipPath, zip);
28
+ unzip(zipPath, outDir);
29
+ const extracted = readFileSync(join(outDir, "hello.txt"), "utf-8");
30
+ expect(extracted).toBe(content);
31
+ });
32
+ it("creates a valid ZIP with multiple files", () => {
33
+ const encoder = new TextEncoder();
34
+ const files = [
35
+ { name: "file1.txt", content: "First file content" },
36
+ { name: "file2.txt", content: "Second file content" },
37
+ { name: "data.json", content: '{"key": "value"}' },
38
+ ];
39
+ const zip = createZip(files.map((f) => ({ name: f.name, data: encoder.encode(f.content) })));
40
+ const zipPath = join(tempDir, "test.zip");
41
+ const outDir = join(tempDir, "out");
42
+ writeFileSync(zipPath, zip);
43
+ unzip(zipPath, outDir);
44
+ for (const file of files) {
45
+ const extracted = readFileSync(join(outDir, file.name), "utf-8");
46
+ expect(extracted).toBe(file.content);
47
+ }
48
+ });
49
+ it("creates a valid ZIP with binary data", () => {
50
+ const binaryData = new Uint8Array([0x00, 0x01, 0x02, 0xff, 0xfe, 0xfd]);
51
+ const zip = createZip([{ name: "binary.bin", data: binaryData }]);
52
+ const zipPath = join(tempDir, "test.zip");
53
+ const outDir = join(tempDir, "out");
54
+ writeFileSync(zipPath, zip);
55
+ unzip(zipPath, outDir);
56
+ const extracted = new Uint8Array(readFileSync(join(outDir, "binary.bin")));
57
+ expect(extracted).toEqual(binaryData);
58
+ });
59
+ it("creates a valid ZIP with empty file", () => {
60
+ const zip = createZip([{ name: "empty.txt", data: new Uint8Array(0) }]);
61
+ const zipPath = join(tempDir, "test.zip");
62
+ const outDir = join(tempDir, "out");
63
+ writeFileSync(zipPath, zip);
64
+ unzip(zipPath, outDir);
65
+ const extracted = readFileSync(join(outDir, "empty.txt"));
66
+ expect(extracted.length).toBe(0);
67
+ });
68
+ it("creates a valid ZIP matching DFU package structure", () => {
69
+ const encoder = new TextEncoder();
70
+ const appBin = new Uint8Array(1024).fill(0xab);
71
+ const appDat = new Uint8Array([0x01, 0x02, 0x03, 0x04]);
72
+ const manifest = JSON.stringify({
73
+ manifest: {
74
+ application: {
75
+ bin_file: "application.bin",
76
+ dat_file: "application.dat",
77
+ },
78
+ },
79
+ });
80
+ const zip = createZip([
81
+ { name: "application.dat", data: appDat },
82
+ { name: "application.bin", data: appBin },
83
+ { name: "manifest.json", data: encoder.encode(manifest) },
84
+ ]);
85
+ const zipPath = join(tempDir, "dfu.zip");
86
+ const outDir = join(tempDir, "out");
87
+ writeFileSync(zipPath, zip);
88
+ unzip(zipPath, outDir);
89
+ expect(new Uint8Array(readFileSync(join(outDir, "application.dat")))).toEqual(appDat);
90
+ expect(new Uint8Array(readFileSync(join(outDir, "application.bin")))).toEqual(appBin);
91
+ expect(readFileSync(join(outDir, "manifest.json"), "utf-8")).toBe(manifest);
92
+ });
93
+ });
94
+ //# sourceMappingURL=zip.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.test.js","sourceRoot":"","sources":["../../../../src/bluetooth/flashing/zip.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @module @microbit/microbit-connection/bluetooth
3
+ */
4
+ export { createBluetoothConnection, type MicrobitBluetoothConnection, type MicrobitBluetoothConnectionOptions, } from "./connection.js";
5
+ export type { DeviceBondState } from "./device-bond-state.js";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @module @microbit/microbit-connection/bluetooth
3
+ */
4
+ export { createBluetoothConnection, } from "./connection.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bluetooth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,yBAAyB,GAG1B,MAAM,iBAAiB,CAAC"}
@@ -114,6 +114,14 @@ export declare const profile: {
114
114
  };
115
115
  };
116
116
  };
117
+ nordicSecureDfu: {
118
+ id: string;
119
+ characteristics: {
120
+ buttonless: {
121
+ id: string;
122
+ };
123
+ };
124
+ };
117
125
  partialFlashing: {
118
126
  id: string;
119
127
  characteristics: {
@@ -65,6 +65,12 @@ export const profile = {
65
65
  calibration: { id: "e95db358-251d-470a-a062-fa1922dfa9a8" },
66
66
  },
67
67
  },
68
+ nordicSecureDfu: {
69
+ id: "0000fe59-0000-1000-8000-00805f9b34fb",
70
+ characteristics: {
71
+ buttonless: { id: "8ec90003-f315-4f60-9fb8-838830daea50" },
72
+ },
73
+ },
68
74
  partialFlashing: {
69
75
  id: "e97dd91d-251d-470a-a062-fa1922dfa9a8",
70
76
  characteristics: {
@@ -86,4 +92,4 @@ export const profile = {
86
92
  },
87
93
  },
88
94
  };
89
- //# sourceMappingURL=bluetooth-profile.js.map
95
+ //# sourceMappingURL=profile.js.map