@microbit/microbit-connection 0.9.0-apps.alpha.9 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/README.md +106 -27
  2. package/build/cjs/async-util.d.ts +3 -1
  3. package/build/cjs/async-util.js +5 -1
  4. package/build/cjs/async-util.js.map +1 -1
  5. package/build/cjs/availability.js.map +1 -1
  6. package/build/cjs/bluetooth/ble-error.d.ts +10 -0
  7. package/build/cjs/bluetooth/ble-error.js +47 -0
  8. package/build/cjs/bluetooth/ble-error.js.map +1 -0
  9. package/build/cjs/bluetooth/connection.d.ts +378 -0
  10. package/build/cjs/bluetooth/connection.js +623 -0
  11. package/build/cjs/bluetooth/connection.js.map +1 -0
  12. package/build/cjs/bluetooth/device-bond-state.d.ts +14 -0
  13. package/build/cjs/bluetooth/device-bond-state.js +26 -0
  14. package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
  15. package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +36 -21
  16. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +174 -147
  17. package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
  18. package/build/{esm → cjs/bluetooth}/flashing/flashing-full.d.ts +2 -2
  19. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  20. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  21. package/build/cjs/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  22. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  23. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  24. package/build/cjs/bluetooth/flashing/flashing-partial.d.ts +10 -0
  25. package/build/cjs/bluetooth/flashing/flashing-partial.js +145 -0
  26. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  27. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  28. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  29. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  30. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  31. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  32. package/build/cjs/bluetooth/index.d.ts +5 -0
  33. package/build/cjs/bluetooth/index.js +9 -0
  34. package/build/cjs/bluetooth/index.js.map +1 -0
  35. package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  36. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  37. package/build/cjs/bluetooth/profile.js.map +1 -0
  38. package/build/cjs/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
  39. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
  40. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  41. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  42. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
  43. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  44. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  45. package/build/cjs/bluetooth/services/device-information-service.js +29 -0
  46. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  47. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  48. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  49. package/build/cjs/bluetooth/services/event-service.d.ts +48 -0
  50. package/build/cjs/bluetooth/services/event-service.js +273 -0
  51. package/build/cjs/bluetooth/services/event-service.js.map +1 -0
  52. package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
  53. package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
  54. package/build/cjs/bluetooth/services/io-pin-service.js.map +1 -0
  55. package/build/{esm → cjs/bluetooth/services}/led-service.d.ts +2 -3
  56. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
  57. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  58. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  59. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
  60. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  61. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  62. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  63. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  64. package/build/cjs/bluetooth/services/temperature-service.d.ts +14 -0
  65. package/build/cjs/bluetooth/services/temperature-service.js +80 -0
  66. package/build/cjs/bluetooth/services/temperature-service.js.map +1 -0
  67. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  68. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
  69. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  70. package/build/cjs/board-id.d.ts +1 -1
  71. package/build/cjs/board-id.js.map +1 -1
  72. package/build/cjs/device.d.ts +191 -101
  73. package/build/cjs/device.js +47 -110
  74. package/build/cjs/device.js.map +1 -1
  75. package/build/cjs/events.d.ts +8 -108
  76. package/build/cjs/events.js +27 -88
  77. package/build/cjs/events.js.map +1 -1
  78. package/build/cjs/hex-util.d.ts +1 -0
  79. package/build/cjs/hex-util.js +15 -0
  80. package/build/cjs/hex-util.js.map +1 -0
  81. package/build/cjs/index.d.ts +8 -16
  82. package/build/cjs/index.js +9 -28
  83. package/build/cjs/index.js.map +1 -1
  84. package/build/cjs/logging.js.map +1 -1
  85. package/build/cjs/microbit-events.d.ts +67 -0
  86. package/build/cjs/microbit-events.js +55 -0
  87. package/build/cjs/microbit-events.js.map +1 -0
  88. package/build/cjs/radio-bridge/connection.d.ts +52 -0
  89. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +84 -96
  90. package/build/cjs/radio-bridge/connection.js.map +1 -0
  91. package/build/cjs/radio-bridge/index.d.ts +4 -0
  92. package/build/cjs/radio-bridge/index.js +9 -0
  93. package/build/cjs/radio-bridge/index.js.map +1 -0
  94. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  95. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  96. package/build/cjs/service-events.d.ts +92 -15
  97. package/build/cjs/service-events.js +6 -36
  98. package/build/cjs/service-events.js.map +1 -1
  99. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -1
  100. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  101. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  102. package/build/cjs/universal-hex/index.d.ts +4 -0
  103. package/build/cjs/universal-hex/index.js +9 -0
  104. package/build/cjs/universal-hex/index.js.map +1 -0
  105. package/build/cjs/usb/arm-debug.d.ts +137 -0
  106. package/build/cjs/usb/arm-debug.js +414 -0
  107. package/build/cjs/usb/arm-debug.js.map +1 -0
  108. package/build/{esm → cjs/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/cdc-saturation.d.ts +36 -0
  112. package/build/cjs/usb/cdc-saturation.js +151 -0
  113. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  114. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  115. package/build/cjs/usb/cmsis-dap.js +349 -0
  116. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  117. package/build/cjs/usb/connection.d.ts +96 -0
  118. package/build/cjs/{usb.js → usb/connection.js} +257 -173
  119. package/build/cjs/usb/connection.js.map +1 -0
  120. package/build/cjs/usb/cortex-m.d.ts +72 -0
  121. package/build/cjs/usb/cortex-m.js +165 -0
  122. package/build/cjs/usb/cortex-m.js.map +1 -0
  123. package/build/cjs/usb/daplink.d.ts +69 -0
  124. package/build/cjs/usb/daplink.js +238 -0
  125. package/build/cjs/usb/daplink.js.map +1 -0
  126. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  127. package/build/cjs/usb/device-wrapper.js +102 -0
  128. package/build/cjs/usb/device-wrapper.js.map +1 -0
  129. package/build/cjs/usb/index.d.ts +5 -0
  130. package/build/cjs/usb/index.js +10 -0
  131. package/build/cjs/usb/index.js.map +1 -0
  132. package/build/{esm/usb-partial-flashing-utils.d.ts → cjs/usb/partial-flashing-utils.d.ts} +6 -9
  133. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  134. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  135. package/build/{esm/usb-partial-flashing.d.ts → cjs/usb/partial-flashing.d.ts} +37 -11
  136. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -134
  137. package/build/cjs/usb/partial-flashing.js.map +1 -0
  138. package/build/cjs/usb/promise-queue.js.map +1 -0
  139. package/build/cjs/usb/serial-events.d.ts +16 -0
  140. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  141. package/build/cjs/usb/serial-events.js.map +1 -0
  142. package/build/cjs/usb/transport.d.ts +42 -0
  143. package/build/cjs/usb/transport.js +155 -0
  144. package/build/cjs/usb/transport.js.map +1 -0
  145. package/build/esm/async-util.d.ts +3 -1
  146. package/build/esm/async-util.js +5 -1
  147. package/build/esm/async-util.js.map +1 -1
  148. package/build/esm/availability.js.map +1 -1
  149. package/build/esm/bluetooth/ble-error.d.ts +10 -0
  150. package/build/esm/bluetooth/ble-error.js +42 -0
  151. package/build/esm/bluetooth/ble-error.js.map +1 -0
  152. package/build/esm/bluetooth/connection.d.ts +378 -0
  153. package/build/esm/bluetooth/connection.js +593 -0
  154. package/build/esm/bluetooth/connection.js.map +1 -0
  155. package/build/esm/bluetooth/device-bond-state.d.ts +14 -0
  156. package/build/esm/bluetooth/device-bond-state.js +22 -0
  157. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  158. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +36 -21
  159. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +172 -146
  160. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  161. package/build/{cjs → esm/bluetooth}/flashing/flashing-full.d.ts +2 -2
  162. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  163. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  164. package/build/esm/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  165. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  166. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  167. package/build/esm/bluetooth/flashing/flashing-partial.d.ts +10 -0
  168. package/build/esm/bluetooth/flashing/flashing-partial.js +142 -0
  169. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  170. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  171. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  172. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  173. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  174. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  175. package/build/esm/bluetooth/index.d.ts +5 -0
  176. package/build/esm/bluetooth/index.js +5 -0
  177. package/build/esm/bluetooth/index.js.map +1 -0
  178. package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  179. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  180. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  181. package/build/esm/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
  182. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
  183. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  184. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  185. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
  186. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  187. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  188. package/build/esm/bluetooth/services/device-information-service.js +25 -0
  189. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  190. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  191. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  192. package/build/esm/bluetooth/services/event-service.d.ts +48 -0
  193. package/build/esm/bluetooth/services/event-service.js +269 -0
  194. package/build/esm/bluetooth/services/event-service.js.map +1 -0
  195. package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
  196. package/build/esm/bluetooth/services/io-pin-service.js +169 -0
  197. package/build/esm/bluetooth/services/io-pin-service.js.map +1 -0
  198. package/build/{cjs → esm/bluetooth/services}/led-service.d.ts +2 -3
  199. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
  200. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  201. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  202. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
  203. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  204. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  205. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  206. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  207. package/build/esm/bluetooth/services/temperature-service.d.ts +14 -0
  208. package/build/esm/bluetooth/services/temperature-service.js +76 -0
  209. package/build/esm/bluetooth/services/temperature-service.js.map +1 -0
  210. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  211. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
  212. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  213. package/build/esm/board-id.d.ts +1 -1
  214. package/build/esm/board-id.js.map +1 -1
  215. package/build/esm/device.d.ts +191 -101
  216. package/build/esm/device.js +45 -104
  217. package/build/esm/device.js.map +1 -1
  218. package/build/esm/events.d.ts +8 -108
  219. package/build/esm/events.js +26 -86
  220. package/build/esm/events.js.map +1 -1
  221. package/build/esm/hex-util.d.ts +1 -0
  222. package/build/esm/hex-util.js +11 -0
  223. package/build/esm/hex-util.js.map +1 -0
  224. package/build/esm/index.d.ts +8 -16
  225. package/build/esm/index.js +7 -11
  226. package/build/esm/index.js.map +1 -1
  227. package/build/esm/logging.js.map +1 -1
  228. package/build/esm/microbit-events.d.ts +67 -0
  229. package/build/esm/microbit-events.js +52 -0
  230. package/build/esm/microbit-events.js.map +1 -0
  231. package/build/esm/radio-bridge/connection.d.ts +52 -0
  232. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +84 -96
  233. package/build/esm/radio-bridge/connection.js.map +1 -0
  234. package/build/esm/radio-bridge/index.d.ts +4 -0
  235. package/build/esm/radio-bridge/index.js +5 -0
  236. package/build/esm/radio-bridge/index.js.map +1 -0
  237. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  238. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  239. package/build/esm/service-events.d.ts +92 -15
  240. package/build/esm/service-events.js +5 -34
  241. package/build/esm/service-events.js.map +1 -1
  242. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -1
  243. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  244. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  245. package/build/esm/universal-hex/index.d.ts +4 -0
  246. package/build/esm/universal-hex/index.js +5 -0
  247. package/build/esm/universal-hex/index.js.map +1 -0
  248. package/build/esm/usb/arm-debug.d.ts +137 -0
  249. package/build/esm/usb/arm-debug.js +409 -0
  250. package/build/esm/usb/arm-debug.js.map +1 -0
  251. package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
  252. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  253. package/build/esm/usb/board-serial-info.js.map +1 -0
  254. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  255. package/build/esm/usb/cdc-saturation.js +148 -0
  256. package/build/esm/usb/cdc-saturation.js.map +1 -0
  257. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  258. package/build/esm/usb/cmsis-dap.js +342 -0
  259. package/build/esm/usb/cmsis-dap.js.map +1 -0
  260. package/build/esm/usb/connection.d.ts +96 -0
  261. package/build/esm/{usb.js → usb/connection.js} +253 -168
  262. package/build/esm/usb/connection.js.map +1 -0
  263. package/build/esm/usb/cortex-m.d.ts +72 -0
  264. package/build/esm/usb/cortex-m.js +161 -0
  265. package/build/esm/usb/cortex-m.js.map +1 -0
  266. package/build/esm/usb/daplink.d.ts +69 -0
  267. package/build/esm/usb/daplink.js +231 -0
  268. package/build/esm/usb/daplink.js.map +1 -0
  269. package/build/esm/usb/device-wrapper.d.ts +34 -0
  270. package/build/esm/usb/device-wrapper.js +98 -0
  271. package/build/esm/usb/device-wrapper.js.map +1 -0
  272. package/build/esm/usb/index.d.ts +5 -0
  273. package/build/esm/usb/index.js +5 -0
  274. package/build/esm/usb/index.js.map +1 -0
  275. package/build/{cjs/usb-partial-flashing-utils.d.ts → esm/usb/partial-flashing-utils.d.ts} +6 -9
  276. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  277. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  278. package/build/{cjs/usb-partial-flashing.d.ts → esm/usb/partial-flashing.d.ts} +37 -11
  279. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -110
  280. package/build/esm/usb/partial-flashing.js.map +1 -0
  281. package/build/esm/usb/promise-queue.js.map +1 -0
  282. package/build/esm/usb/serial-events.d.ts +16 -0
  283. package/build/esm/usb/serial-events.js +2 -0
  284. package/build/esm/usb/serial-events.js.map +1 -0
  285. package/build/esm/usb/transport.d.ts +42 -0
  286. package/build/esm/usb/transport.js +151 -0
  287. package/build/esm/usb/transport.js.map +1 -0
  288. package/package.json +61 -14
  289. package/build/cjs/accelerometer-service.js.map +0 -1
  290. package/build/cjs/accelerometer.d.ts +0 -9
  291. package/build/cjs/accelerometer.js +0 -16
  292. package/build/cjs/accelerometer.js.map +0 -1
  293. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  294. package/build/cjs/bluetooth.d.ts +0 -112
  295. package/build/cjs/bluetooth.js +0 -457
  296. package/build/cjs/bluetooth.js.map +0 -1
  297. package/build/cjs/board-serial-info.js.map +0 -1
  298. package/build/cjs/button-service.js.map +0 -1
  299. package/build/cjs/buttons.d.ts +0 -10
  300. package/build/cjs/buttons.js +0 -22
  301. package/build/cjs/buttons.js.map +0 -1
  302. package/build/cjs/constants.d.ts +0 -48
  303. package/build/cjs/constants.js +0 -73
  304. package/build/cjs/constants.js.map +0 -1
  305. package/build/cjs/device-information-service.js +0 -34
  306. package/build/cjs/device-information-service.js.map +0 -1
  307. package/build/cjs/dfu-service.js.map +0 -1
  308. package/build/cjs/flashing/flashing-full.js.map +0 -1
  309. package/build/cjs/flashing/flashing-makecode.d.ts +0 -6
  310. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  311. package/build/cjs/flashing/flashing-partial.d.ts +0 -9
  312. package/build/cjs/flashing/flashing-partial.js +0 -98
  313. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  314. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  315. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  316. package/build/cjs/flashing/zip.js.map +0 -1
  317. package/build/cjs/hex-flash-data-source.js.map +0 -1
  318. package/build/cjs/led-service.js.map +0 -1
  319. package/build/cjs/led.d.ts +0 -6
  320. package/build/cjs/led.js.map +0 -1
  321. package/build/cjs/magnetometer-service.js.map +0 -1
  322. package/build/cjs/magnetometer.d.ts +0 -9
  323. package/build/cjs/magnetometer.js +0 -16
  324. package/build/cjs/magnetometer.js.map +0 -1
  325. package/build/cjs/partial-flashing-service.js.map +0 -1
  326. package/build/cjs/promise-queue.js.map +0 -1
  327. package/build/cjs/serial-events.d.ts +0 -20
  328. package/build/cjs/serial-events.js +0 -69
  329. package/build/cjs/serial-events.js.map +0 -1
  330. package/build/cjs/setupTests.d.ts +0 -6
  331. package/build/cjs/setupTests.js.map +0 -1
  332. package/build/cjs/uart-service.js.map +0 -1
  333. package/build/cjs/uart.d.ts +0 -4
  334. package/build/cjs/uart.js +0 -16
  335. package/build/cjs/uart.js.map +0 -1
  336. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  337. package/build/cjs/usb-device-wrapper.js +0 -437
  338. package/build/cjs/usb-device-wrapper.js.map +0 -1
  339. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  340. package/build/cjs/usb-partial-flashing.js.map +0 -1
  341. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  342. package/build/cjs/usb-radio-bridge.js.map +0 -1
  343. package/build/cjs/usb-serial-protocol.js.map +0 -1
  344. package/build/cjs/usb.d.ts +0 -66
  345. package/build/cjs/usb.js.map +0 -1
  346. package/build/esm/accelerometer-service.js.map +0 -1
  347. package/build/esm/accelerometer.d.ts +0 -9
  348. package/build/esm/accelerometer.js +0 -12
  349. package/build/esm/accelerometer.js.map +0 -1
  350. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  351. package/build/esm/bluetooth-profile.js.map +0 -1
  352. package/build/esm/bluetooth.d.ts +0 -112
  353. package/build/esm/bluetooth.js +0 -427
  354. package/build/esm/bluetooth.js.map +0 -1
  355. package/build/esm/board-serial-info.js.map +0 -1
  356. package/build/esm/button-service.js.map +0 -1
  357. package/build/esm/buttons.d.ts +0 -10
  358. package/build/esm/buttons.js +0 -18
  359. package/build/esm/buttons.js.map +0 -1
  360. package/build/esm/constants.d.ts +0 -48
  361. package/build/esm/constants.js +0 -70
  362. package/build/esm/constants.js.map +0 -1
  363. package/build/esm/device-information-service.js +0 -30
  364. package/build/esm/device-information-service.js.map +0 -1
  365. package/build/esm/dfu-service.js.map +0 -1
  366. package/build/esm/flashing/flashing-full.js.map +0 -1
  367. package/build/esm/flashing/flashing-makecode.d.ts +0 -6
  368. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  369. package/build/esm/flashing/flashing-partial.d.ts +0 -9
  370. package/build/esm/flashing/flashing-partial.js +0 -95
  371. package/build/esm/flashing/flashing-partial.js.map +0 -1
  372. package/build/esm/flashing/flashing-v1.js.map +0 -1
  373. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  374. package/build/esm/flashing/zip.js.map +0 -1
  375. package/build/esm/hex-flash-data-source.js.map +0 -1
  376. package/build/esm/led-service.js.map +0 -1
  377. package/build/esm/led.d.ts +0 -6
  378. package/build/esm/led.js +0 -2
  379. package/build/esm/led.js.map +0 -1
  380. package/build/esm/magnetometer-service.js.map +0 -1
  381. package/build/esm/magnetometer.d.ts +0 -9
  382. package/build/esm/magnetometer.js +0 -12
  383. package/build/esm/magnetometer.js.map +0 -1
  384. package/build/esm/partial-flashing-service.js.map +0 -1
  385. package/build/esm/promise-queue.js.map +0 -1
  386. package/build/esm/serial-events.d.ts +0 -20
  387. package/build/esm/serial-events.js +0 -61
  388. package/build/esm/serial-events.js.map +0 -1
  389. package/build/esm/setupTests.d.ts +0 -6
  390. package/build/esm/setupTests.js.map +0 -1
  391. package/build/esm/uart-service.js.map +0 -1
  392. package/build/esm/uart.d.ts +0 -4
  393. package/build/esm/uart.js +0 -12
  394. package/build/esm/uart.js.map +0 -1
  395. package/build/esm/usb-device-wrapper.d.ts +0 -47
  396. package/build/esm/usb-device-wrapper.js +0 -410
  397. package/build/esm/usb-device-wrapper.js.map +0 -1
  398. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  399. package/build/esm/usb-partial-flashing.js.map +0 -1
  400. package/build/esm/usb-radio-bridge.d.ts +0 -24
  401. package/build/esm/usb-radio-bridge.js.map +0 -1
  402. package/build/esm/usb-serial-protocol.js.map +0 -1
  403. package/build/esm/usb.d.ts +0 -66
  404. package/build/esm/usb.js.map +0 -1
  405. package/typedoc.json +0 -14
  406. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  407. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  408. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  409. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  410. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  411. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  412. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  413. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  414. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  415. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  416. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  417. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  418. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  419. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  420. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  421. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
@@ -38,47 +38,18 @@
38
38
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39
39
  * SOFTWARE.
40
40
  */
41
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
42
- if (k2 === undefined) k2 = k;
43
- var desc = Object.getOwnPropertyDescriptor(m, k);
44
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
45
- desc = { enumerable: true, get: function() { return m[k]; } };
46
- }
47
- Object.defineProperty(o, k2, desc);
48
- }) : (function(o, m, k, k2) {
49
- if (k2 === undefined) k2 = k;
50
- o[k2] = m[k];
51
- }));
52
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
53
- Object.defineProperty(o, "default", { enumerable: true, value: v });
54
- }) : function(o, v) {
55
- o["default"] = v;
56
- });
57
- var __importStar = (this && this.__importStar) || function (mod) {
58
- if (mod && mod.__esModule) return mod;
59
- var result = {};
60
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
61
- __setModuleDefault(result, mod);
62
- return result;
63
- };
64
41
  var __importDefault = (this && this.__importDefault) || function (mod) {
65
42
  return (mod && mod.__esModule) ? mod : { "default": mod };
66
43
  };
67
44
  Object.defineProperty(exports, "__esModule", { value: true });
68
45
  exports.PartialFlashing = void 0;
69
- /**
70
- * Implementation of partial flashing for the micro:bit.
71
- *
72
- * Latest Microsoft implementation is here:
73
- * https://github.com/microsoft/pxt-microbit/blob/master/editor/flash.ts
74
- */
75
- // dapjs import faff needed for Vitest https://github.com/ARMmbed/dapjs/issues/118
76
- const dapjs = __importStar(require("dapjs"));
77
- const { DAPLink: DAPLinkValue } = dapjs;
78
- const async_util_js_1 = require("./async-util.js");
79
- const usb_partial_flashing_utils_js_1 = require("./usb-partial-flashing-utils.js");
80
- const device_js_1 = require("./device.js");
46
+ const arm_debug_js_1 = require("./arm-debug.js");
47
+ const device_js_1 = require("../device.js");
48
+ const hex_util_js_1 = require("../hex-util.js");
81
49
  const nrf_intel_hex_1 = __importDefault(require("nrf-intel-hex"));
50
+ const cortex_m_js_1 = require("./cortex-m.js");
51
+ const daplink_js_1 = require("./daplink.js");
52
+ const partial_flashing_utils_js_1 = require("./partial-flashing-utils.js");
82
53
  // Source code for binaries in can be found at https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/external/sha/source/main.c
83
54
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L243
84
55
  // Update from https://github.com/microsoft/pxt-microbit/commit/a35057717222b8e48335144f497b55e29e9b0f25
@@ -109,18 +80,31 @@ const membase = 0x20000000;
109
80
  const loadAddr = membase;
110
81
  const dataAddr = 0x20002000;
111
82
  const stackAddr = 0x20001000;
83
+ // UICR (User Information Configuration Registers) — non-volatile registers
84
+ // for chip config (bootloader address, NFC pin mode, etc). Bits can only be
85
+ // cleared (1→0); restoring a bit to 1 requires erasing the entire UICR region.
86
+ // https://docs.nordicsemi.com/bundle/ps_nrf52833/page/uicr.html
87
+ const UICR_BASE = 0x10001000;
88
+ const UICR_LIMIT = 0x10002000;
89
+ // nRF52 NVMC registers for UICR erase/write
90
+ const NVMC_CONFIG = 0x4001e504;
91
+ const NVMC_ERASEUICR = 0x4001e514;
92
+ const NVMC_READY = 0x4001e400;
93
+ const NVMC_CONFIG_WEN = 1; // Write enable
94
+ const NVMC_CONFIG_EEN = 2; // Erase enable
95
+ const NVMC_CONFIG_REN = 0; // Read only
112
96
  /**
113
- * Uses a DAPWrapper to flash the micro:bit.
97
+ * Uses a USBDeviceWrapper to flash the micro:bit.
114
98
  *
115
- * Intented to be used for a single flash with a pre-connected DAPWrapper.
99
+ * Intended to be used for a single flash with a pre-connected USBDeviceWrapper.
116
100
  */
117
101
  class PartialFlashing {
118
- constructor(dapwrapper, logging, boardVersion) {
119
- Object.defineProperty(this, "dapwrapper", {
102
+ constructor(device, logging, boardVersion, pageSize, numPages) {
103
+ Object.defineProperty(this, "device", {
120
104
  enumerable: true,
121
105
  configurable: true,
122
106
  writable: true,
123
- value: dapwrapper
107
+ value: device
124
108
  });
125
109
  Object.defineProperty(this, "logging", {
126
110
  enumerable: true,
@@ -134,6 +118,18 @@ class PartialFlashing {
134
118
  writable: true,
135
119
  value: boardVersion
136
120
  });
121
+ Object.defineProperty(this, "pageSize", {
122
+ enumerable: true,
123
+ configurable: true,
124
+ writable: true,
125
+ value: pageSize
126
+ });
127
+ Object.defineProperty(this, "numPages", {
128
+ enumerable: true,
129
+ configurable: true,
130
+ writable: true,
131
+ value: numPages
132
+ });
137
133
  }
138
134
  log(v) {
139
135
  this.logging.log(v);
@@ -141,56 +137,55 @@ class PartialFlashing {
141
137
  // Runs the checksum algorithm on the micro:bit's whole flash memory, and returns the results.
142
138
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L365
143
139
  async getFlashChecksumsAsync() {
144
- await this.dapwrapper.executeAsync(loadAddr, computeChecksums2, stackAddr, loadAddr + 1, 0xffffffff, dataAddr, 0, this.dapwrapper.pageSize, this.dapwrapper.numPages);
145
- return this.dapwrapper.readBlockAsync(dataAddr, this.dapwrapper.numPages * 2);
140
+ await this.device.cortexM.execute(loadAddr, computeChecksums2, stackAddr, loadAddr + 1, 0xffffffff, dataAddr, 0, this.pageSize, this.numPages);
141
+ return this.device.adi.readBlock(dataAddr, this.numPages * 2);
146
142
  }
147
143
  // Runs the code on the micro:bit to copy a single page of data from RAM address addr to the ROM address specified by the page.
148
144
  // Does not wait for execution to halt.
149
145
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L340
150
146
  async runFlash(page, addr) {
151
- await this.dapwrapper.cortexM.halt(true);
152
- await Promise.all([
153
- this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.PC, loadAddr + 4 + 1),
154
- this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.LR, loadAddr + 1),
155
- this.dapwrapper.cortexM.writeCoreRegister(usb_partial_flashing_utils_js_1.CoreRegister.SP, stackAddr),
156
- this.dapwrapper.cortexM.writeCoreRegister(0, page.targetAddr),
157
- this.dapwrapper.cortexM.writeCoreRegister(1, addr),
158
- this.dapwrapper.cortexM.writeCoreRegister(2, this.dapwrapper.pageSize >> 2),
159
- ]);
160
- return this.dapwrapper.cortexM.resume(false);
147
+ await this.device.cortexM.halt(true);
148
+ await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.PC, loadAddr + 4 + 1);
149
+ await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.LR, loadAddr + 1);
150
+ await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.SP, stackAddr);
151
+ await this.device.cortexM.writeCoreRegister(0, page.targetAddr);
152
+ await this.device.cortexM.writeCoreRegister(1, addr);
153
+ await this.device.cortexM.writeCoreRegister(2, this.pageSize >> 2);
154
+ return this.device.cortexM.resume(false);
161
155
  }
162
156
  // Write a single page of data to micro:bit ROM by writing it to micro:bit RAM and copying to ROM.
163
157
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L385
164
158
  async partialFlashPageAsync(page, nextPage, i) {
165
- // TODO: This short-circuits UICR, do we need to update this?
159
+ // UICR pages are handled separately by checkUicr/repairUicr.
166
160
  if (page.targetAddr >= 0x10000000) {
167
161
  return;
168
162
  }
169
163
  // Use two slots in RAM to allow parallelisation of the following two tasks.
170
164
  // 1. DAPjs writes a page to one slot.
171
165
  // 2. flashPageBIN copies a page to flash from the other slot.
172
- let thisAddr = i & 1 ? dataAddr : dataAddr + this.dapwrapper.pageSize;
173
- let nextAddr = i & 1 ? dataAddr + this.dapwrapper.pageSize : dataAddr;
166
+ let thisAddr = i & 1 ? dataAddr : dataAddr + this.pageSize;
167
+ let nextAddr = i & 1 ? dataAddr + this.pageSize : dataAddr;
174
168
  // Write first page to slot in RAM.
175
169
  // All subsequent pages will have already been written to RAM.
176
170
  if (i === 0) {
177
171
  let u32data = new Uint32Array(page.data.length / 4);
178
172
  for (let j = 0; j < page.data.length; j += 4) {
179
- u32data[j >> 2] = (0, usb_partial_flashing_utils_js_1.read32FromUInt8Array)(page.data, j);
173
+ u32data[j >> 2] = (0, partial_flashing_utils_js_1.read32FromUInt8Array)(page.data, j);
180
174
  }
181
- await this.dapwrapper.writeBlockAsync(thisAddr, u32data);
175
+ await this.device.adi.writeBlock(thisAddr, u32data);
182
176
  }
183
177
  await this.runFlash(page, thisAddr);
184
178
  // Write next page to micro:bit RAM if it exists.
185
179
  if (nextPage) {
186
180
  let buf = new Uint32Array(nextPage.data.buffer);
187
- await this.dapwrapper.writeBlockAsync(nextAddr, buf);
181
+ await this.device.adi.writeBlock(nextAddr, buf);
188
182
  }
189
- return this.dapwrapper.waitForHalt();
183
+ return this.device.cortexM.waitForHalt();
190
184
  }
191
185
  // Write pages of data to micro:bit ROM.
192
186
  async partialFlashCoreAsync(pages, updateProgress) {
193
187
  this.log("Partial flash");
188
+ await this.device.adi.writeBlock(loadAddr, flashPageBIN);
194
189
  for (let i = 0; i < pages.length; ++i) {
195
190
  updateProgress(device_js_1.ProgressStage.PartialFlashing, i / pages.length);
196
191
  await this.partialFlashPageAsync(pages[i], pages[i + 1], i);
@@ -201,13 +196,13 @@ class PartialFlashing {
201
196
  // Falls back to a full flash if partial flashing fails.
202
197
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L335
203
198
  async partialFlashAsync(data, updateProgress) {
204
- const flashBytes = this.convertDataToPaddedBytes(data);
199
+ const memoryMap = this.toMemoryMap(data);
200
+ const { flashBytes, uicrEntries } = this.extractFlashAndUicr(memoryMap);
205
201
  const checksums = await this.getFlashChecksumsAsync();
206
- await this.dapwrapper.writeBlockAsync(loadAddr, flashPageBIN);
207
- let aligned = (0, usb_partial_flashing_utils_js_1.pageAlignBlocks)(flashBytes, 0, this.dapwrapper.pageSize);
202
+ let aligned = (0, partial_flashing_utils_js_1.pageAlignBlocks)(flashBytes, 0, this.pageSize);
208
203
  const totalPages = aligned.length;
209
204
  this.log("Total pages: " + totalPages);
210
- aligned = (0, usb_partial_flashing_utils_js_1.onlyChanged)(aligned, checksums, this.dapwrapper.pageSize);
205
+ aligned = (0, partial_flashing_utils_js_1.onlyChanged)(aligned, checksums, this.pageSize);
211
206
  this.log("Changed pages: " + aligned.length);
212
207
  let partial;
213
208
  if (aligned.length > totalPages / 2) {
@@ -218,6 +213,10 @@ class PartialFlashing {
218
213
  catch (e) {
219
214
  this.log(e);
220
215
  this.log("Full flash failed, attempting partial flash.");
216
+ // FLASH_CLOSE (called during full flash cleanup) disables SWD,
217
+ // so we must reconnect before partial flash can use it.
218
+ await this.device.adi.reinit();
219
+ await this.device.cortexM.reset(true);
221
220
  await this.partialFlashCoreAsync(aligned, updateProgress);
222
221
  partial = true;
223
222
  }
@@ -234,109 +233,146 @@ class PartialFlashing {
234
233
  partial = false;
235
234
  }
236
235
  }
237
- try {
238
- await this.dapwrapper.reset();
239
- }
240
- catch (e) {
241
- // Allow errors on resetting, user can always manually reset if necessary.
236
+ // After partial flash, check UICR. Full flash writes UICR as part of
237
+ // the hex stream so doesn't need this.
238
+ if (partial && uicrEntries.length > 0) {
239
+ partial = await this.ensureUicr(data, uicrEntries, updateProgress);
242
240
  }
243
241
  this.log("Flashing complete");
244
242
  return partial;
245
243
  }
246
- // Perform full flash of micro:bit's ROM using daplink.
244
+ // Perform full flash of micro:bit's ROM using DAPLink vendor commands.
247
245
  async fullFlashAsync(data, updateProgress) {
248
246
  this.log("Full flash");
249
247
  const fullFlashProgress = (progress) => {
250
248
  updateProgress(device_js_1.ProgressStage.FullFlashing, progress);
251
249
  };
252
- this.dapwrapper.daplink.on(DAPLinkValue.EVENT_PROGRESS, fullFlashProgress);
253
- try {
254
- data = this.convertDataToHexString(data);
255
- await this.dapwrapper.transport.open();
256
- await this.dapwrapper.daplink.flash(new TextEncoder().encode(data));
257
- this.logging.event({
258
- type: "WebUSB-info",
259
- message: "full-flash-successful",
260
- });
261
- }
262
- finally {
263
- this.dapwrapper.daplink.removeListener(DAPLinkValue.EVENT_PROGRESS, fullFlashProgress);
264
- }
250
+ const hexData = this.convertDataToHexString(data);
251
+ await (0, daplink_js_1.dapLinkFlash)(this.device.adi, new TextEncoder().encode(hexData), fullFlashProgress);
252
+ this.logging.event({
253
+ type: "WebUSB-info",
254
+ message: "full-flash-successful",
255
+ });
265
256
  }
266
257
  // Flash the micro:bit's ROM with the provided image, resetting the micro:bit first.
267
258
  // Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L439
268
259
  async flashAsync(data, updateProgress) {
269
- let resetPromise = (async () => {
270
- // Reset micro:bit to ensure interface responds correctly.
271
- this.log("Begin reset");
272
- try {
273
- await this.dapwrapper.reset(true);
274
- }
275
- catch (e) {
276
- this.log("Retrying reset");
277
- await this.dapwrapper.reconnectAsync();
278
- await this.dapwrapper.reset(true);
279
- }
280
- })();
260
+ // Reset into halted state so partial flash can execute code from a clean
261
+ // state.
262
+ this.log("Begin reset");
281
263
  try {
282
- try {
283
- await (0, async_util_js_1.withTimeout)(resetPromise, 1000);
284
- this.log("Begin flashing");
285
- return await this.partialFlashAsync(data, updateProgress);
286
- }
287
- catch (e) {
288
- if (e instanceof async_util_js_1.TimeoutError) {
289
- this.log("Resetting micro:bit timed out");
290
- this.log("Partial flashing failed. Attempting full flash");
291
- this.logging.event({
292
- type: "WebUSB-info",
293
- message: "flash-failed/attempting-full-flash",
294
- });
295
- await this.fullFlashAsync(data, updateProgress);
296
- return false;
297
- }
298
- else {
299
- throw e;
300
- }
301
- }
264
+ await this.device.cortexM.reset(true);
302
265
  }
303
- finally {
304
- // NB cannot return Promises above!
305
- await this.dapwrapper.disconnectAsync();
266
+ catch (e) {
267
+ this.log("Retrying reset");
268
+ await this.device.reconnect();
269
+ await this.device.cortexM.reset(true);
306
270
  }
271
+ this.log("Begin flashing");
272
+ return this.partialFlashAsync(data, updateProgress);
307
273
  }
308
274
  convertDataToHexString(data) {
309
275
  if (typeof data === "string") {
310
276
  return data;
311
277
  }
312
278
  if (data instanceof Uint8Array) {
313
- return this.paddedBytesToHexString(data);
279
+ return nrf_intel_hex_1.default.fromPaddedUint8Array(data).asHexString();
314
280
  }
315
281
  return data.asHexString();
316
282
  }
317
- convertDataToPaddedBytes(data) {
318
- if (data instanceof Uint8Array) {
319
- return data;
320
- }
283
+ /**
284
+ * Parse the flash data into a MemoryMap (if not already one).
285
+ */
286
+ toMemoryMap(data) {
321
287
  if (typeof data === "string") {
322
- return this.hexStringToPaddedBytes(data);
288
+ return nrf_intel_hex_1.default.fromHex((0, hex_util_js_1.truncateHexAfterEof)(data));
323
289
  }
324
- return this.memoryMapToPaddedBytes(data);
325
- }
326
- hexStringToPaddedBytes(hex) {
327
- const m = nrf_intel_hex_1.default.fromHex(hex);
328
- return this.memoryMapToPaddedBytes(m);
329
- }
330
- paddedBytesToHexString(data) {
331
- return nrf_intel_hex_1.default.fromPaddedUint8Array(data).asHexString();
290
+ if (data instanceof Uint8Array) {
291
+ return nrf_intel_hex_1.default.fromPaddedUint8Array(data);
292
+ }
293
+ return data;
332
294
  }
333
- memoryMapToPaddedBytes(memoryMap) {
295
+ /**
296
+ * Extract padded flash bytes (main flash only) and UICR entries from a
297
+ * MemoryMap. Parses the data once for both.
298
+ */
299
+ extractFlashAndUicr(memoryMap) {
334
300
  const flashSize = {
335
301
  V1: 256 * 1024,
336
302
  V2: 512 * 1024,
337
303
  }[this.boardVersion];
338
- return memoryMap.slicePad(0, flashSize);
304
+ const flashBytes = memoryMap.slicePad(0, flashSize);
305
+ const uicrEntries = [];
306
+ for (const [addr, block] of memoryMap) {
307
+ if (addr < UICR_BASE || addr >= UICR_LIMIT)
308
+ continue;
309
+ for (let i = 0; i < block.length; i += 4) {
310
+ uicrEntries.push({
311
+ address: addr + i,
312
+ value: (0, partial_flashing_utils_js_1.read32FromUInt8Array)(block, i),
313
+ });
314
+ }
315
+ }
316
+ return { flashBytes, uicrEntries };
317
+ }
318
+ /**
319
+ * Check UICR and repair if needed after a partial flash.
320
+ *
321
+ * UICR bits can only be cleared (1→0) without erasing. If all mismatched
322
+ * bits only need 1→0, we can write directly on both V1 and V2.
323
+ * If any bit needs 0→1, an erase is required first:
324
+ * - V2: erase via NVMC.ERASEUICR, then write
325
+ * - V1: no independent UICR erase, fall back to full flash
326
+ *
327
+ * Returns true if we stayed on the partial flash path, false if we had
328
+ * to fall back to full flash.
329
+ */
330
+ async ensureUicr(data, entries, updateProgress) {
331
+ let needsErase = false;
332
+ let hasMismatch = false;
333
+ for (const { address, value } of entries) {
334
+ const actual = await this.device.adi.readMem32(address);
335
+ if (actual === value)
336
+ continue;
337
+ hasMismatch = true;
338
+ // Check if any bit needs to go from 0→1 (requires erase)
339
+ const canWriteInPlace = (actual & value) >>> 0 === value >>> 0;
340
+ this.log(`UICR mismatch at 0x${address.toString(16)}: ` +
341
+ `device=0x${(actual >>> 0).toString(16)} ` +
342
+ `expected=0x${(value >>> 0).toString(16)}` +
343
+ (canWriteInPlace ? "" : " (needs erase)"));
344
+ if (!canWriteInPlace) {
345
+ needsErase = true;
346
+ }
347
+ }
348
+ if (!hasMismatch) {
349
+ return true;
350
+ }
351
+ if (needsErase && this.boardVersion === "V1") {
352
+ // V1 has no ERASEUICR — must do a full flash (chip erase).
353
+ this.log("UICR requires erase on V1, falling back to full flash.");
354
+ await this.fullFlashAsync(data, updateProgress);
355
+ return false;
356
+ }
357
+ const waitNvmcReady = () => (0, arm_debug_js_1.waitFor)(async () => ((await this.device.adi.readMem32(NVMC_READY)) & 1) === 1, 10_000, 5);
358
+ if (needsErase) {
359
+ // V2: erase UICR via dedicated NVMC register
360
+ this.log("Erasing UICR");
361
+ await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_EEN);
362
+ await this.device.adi.writeMem32(NVMC_ERASEUICR, 1);
363
+ await waitNvmcReady();
364
+ }
365
+ // Write UICR words
366
+ this.log("Writing UICR");
367
+ await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_WEN);
368
+ for (const { address, value } of entries) {
369
+ await this.device.adi.writeMem32(address, value);
370
+ await waitNvmcReady();
371
+ }
372
+ await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_REN);
373
+ this.log("UICR repair complete");
374
+ return true;
339
375
  }
340
376
  }
341
377
  exports.PartialFlashing = PartialFlashing;
342
- //# sourceMappingURL=usb-partial-flashing.js.map
378
+ //# sourceMappingURL=partial-flashing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partial-flashing.js","sourceRoot":"","sources":["../../../src/usb/partial-flashing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-queue.js","sourceRoot":"","sources":["../../../src/usb/promise-queue.ts"],"names":[],"mappings":";;;AAcA,MAAa,YAAY;IAKvB,YAAY,UAAmB,EAAE;QAJzB;;;;mBAAgB,KAAK;WAAC;QACtB;;;;mBAA6B,EAAE;WAAC;QAChC;;;;;WAA4C;QAGlD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAI,MAAwB;QACpC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAkB;gBAC3B,OAAO;gBACP,MAAM;gBACN,MAAM;aACP,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA5DD,oCA4DC"}
@@ -0,0 +1,16 @@
1
+ export interface SerialData {
2
+ data: string;
3
+ }
4
+ export interface SerialConnectionEventMap {
5
+ /** Fired when serial data is received from the micro:bit. */
6
+ serialdata: SerialData;
7
+ /**
8
+ * Fired when the serial session ends, indicating that subsequent serial
9
+ * output may be from a different program (e.g. after flashing or a full
10
+ * disconnect). Consumers typically use this to clear the terminal.
11
+ *
12
+ * Not fired when the connection is paused (tab hidden) because the same
13
+ * program continues running and serial resumes when the tab becomes visible.
14
+ */
15
+ serialreset: void;
16
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=led.js.map
3
+ //# sourceMappingURL=serial-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serial-events.js","sourceRoot":"","sources":["../../../src/usb/serial-events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * (c) 2026, Micro:bit Educational Foundation and contributors
3
+ *
4
+ * Derived from dapjs (https://github.com/ARMmbed/dapjs) which is
5
+ * Copyright (c) Arm Limited 2018
6
+ * Copyright (c) Microsoft Corporation
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ *
10
+ * See arm-debug.ts for the full dapjs license.
11
+ *
12
+ * WebUSB transport layer. Handles opening/closing the USB interface,
13
+ * finding the correct CMSIS-DAP endpoints, and reading/writing raw packets.
14
+ *
15
+ * This is the lowest layer in the USB stack, sitting beneath the CMSIS-DAP
16
+ * protocol layer. It knows nothing about DAP commands — it just moves
17
+ * fixed-size packets between the host and the USB device.
18
+ *
19
+ * micro:bit V2 uses CMSIS-DAP v2 (bulk endpoints). micro:bit V1 uses
20
+ * CMSIS-DAP v1 (HID) which has no bulk endpoints — we fall back to
21
+ * control transfers (SET_REPORT/GET_REPORT) in that case.
22
+ */
23
+ export declare const PACKET_SIZE = 64;
24
+ export interface Transport {
25
+ readonly isOpen: boolean;
26
+ open(): Promise<void>;
27
+ close(): Promise<void>;
28
+ read(): Promise<DataView>;
29
+ write(data: Uint8Array): Promise<void>;
30
+ }
31
+ export declare class UsbTransport implements Transport {
32
+ private device;
33
+ private interfaceNumber?;
34
+ private endpointIn?;
35
+ private endpointOut?;
36
+ constructor(device: USBDevice);
37
+ get isOpen(): boolean;
38
+ open(): Promise<void>;
39
+ close(): Promise<void>;
40
+ read(): Promise<DataView>;
41
+ write(data: Uint8Array): Promise<void>;
42
+ }