@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,215 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { DapError } from "./cmsis-dap.js";
3
+ import { CoreRegister, CortexM, DEMCR, DHCSR, NVIC_AIRCR, REGWnR, S_HALT, S_REGRDY, } from "./cortex-m.js";
4
+ // ---------------------------------------------------------------------------
5
+ // Mock ADI
6
+ // ---------------------------------------------------------------------------
7
+ function createMockAdi() {
8
+ const mem32 = new Map();
9
+ const writtenMem32 = [];
10
+ const mockDap = {
11
+ isOpen: true,
12
+ blockSize: 59,
13
+ send: vi.fn(),
14
+ clearAbort: vi.fn(),
15
+ swjSequence: vi.fn(),
16
+ swjClock: vi.fn(),
17
+ connect: vi.fn(),
18
+ disconnect: vi.fn(),
19
+ configureTransfer: vi.fn(),
20
+ open: vi.fn(),
21
+ close: vi.fn(),
22
+ transfer: vi.fn(),
23
+ transferBlockRead: vi.fn(),
24
+ transferBlockWrite: vi.fn(),
25
+ drainStaleResponses: vi.fn(),
26
+ };
27
+ const mock = {
28
+ dap: mockDap,
29
+ get isOpen() {
30
+ return true;
31
+ },
32
+ mem32,
33
+ writtenMem32,
34
+ writtenBlocks: [],
35
+ transferSequenceCalls: [],
36
+ readMem32: vi.fn(async (address) => {
37
+ return mem32.get(address) ?? 0;
38
+ }),
39
+ writeMem32: vi.fn(async (address, value) => {
40
+ writtenMem32.push({ address, value });
41
+ mem32.set(address, value);
42
+ }),
43
+ readMem32Ops: vi.fn((address) => [
44
+ { port: 0, mode: 0x02, register: 0, value: address },
45
+ ]),
46
+ writeMem32Ops: vi.fn((address, value) => [
47
+ { port: 0, mode: 0x00, register: 0, value: address },
48
+ { port: 0, mode: 0x00, register: 0, value },
49
+ ]),
50
+ readBlock: vi.fn(),
51
+ writeBlock: vi.fn(async (address, values) => {
52
+ mock.writtenBlocks.push({ address, values });
53
+ }),
54
+ transferSequence: vi.fn(async (groups) => {
55
+ mock.transferSequenceCalls.push(groups);
56
+ // Return S_REGRDY for readCoreRegister/writeCoreRegister
57
+ return new Uint32Array([S_REGRDY, 0x42]);
58
+ }),
59
+ resetState: vi.fn(),
60
+ connect: vi.fn(),
61
+ disconnect: vi.fn(),
62
+ reinit: vi.fn(),
63
+ };
64
+ return mock;
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Tests
68
+ // ---------------------------------------------------------------------------
69
+ describe("CortexM", () => {
70
+ let adi;
71
+ let cortex;
72
+ beforeEach(() => {
73
+ adi = createMockAdi();
74
+ cortex = new CortexM(adi);
75
+ });
76
+ describe("isHalted", () => {
77
+ it("returns true when S_HALT is set", async () => {
78
+ adi.mem32.set(DHCSR, S_HALT);
79
+ expect(await cortex.isHalted()).toBe(true);
80
+ });
81
+ it("returns false when S_HALT is not set", async () => {
82
+ adi.mem32.set(DHCSR, 0);
83
+ expect(await cortex.isHalted()).toBe(false);
84
+ });
85
+ });
86
+ describe("halt", () => {
87
+ it("writes halt request to DHCSR", async () => {
88
+ adi.mem32.set(DHCSR, 0); // not halted initially
89
+ // After the write, simulate halted state for the wait
90
+ vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
91
+ adi.writtenMem32.push({ address: addr, value: val });
92
+ if (addr === DHCSR)
93
+ adi.mem32.set(DHCSR, S_HALT);
94
+ });
95
+ await cortex.halt();
96
+ const dhcsrWrite = adi.writtenMem32.find((w) => w.address === DHCSR);
97
+ expect(dhcsrWrite).toBeDefined();
98
+ // Should have C_DEBUGEN and C_HALT bits set with DBGKEY
99
+ expect(dhcsrWrite.value & 0x03).toBe(0x03);
100
+ });
101
+ it("skips if already halted", async () => {
102
+ adi.mem32.set(DHCSR, S_HALT);
103
+ await cortex.halt();
104
+ expect(adi.writeMem32).not.toHaveBeenCalled();
105
+ });
106
+ });
107
+ describe("resume", () => {
108
+ it("clears halt and enables debug", async () => {
109
+ adi.mem32.set(DHCSR, S_HALT); // halted initially
110
+ // After writes, simulate running state
111
+ vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
112
+ adi.writtenMem32.push({ address: addr, value: val });
113
+ if (addr === DHCSR)
114
+ adi.mem32.set(DHCSR, 0); // now running
115
+ });
116
+ await cortex.resume();
117
+ // Should have written to DFSR and DHCSR
118
+ expect(adi.writtenMem32.length).toBeGreaterThanOrEqual(2);
119
+ });
120
+ it("skips if not halted", async () => {
121
+ adi.mem32.set(DHCSR, 0);
122
+ await cortex.resume();
123
+ expect(adi.writeMem32).not.toHaveBeenCalled();
124
+ });
125
+ });
126
+ describe("readCoreRegister", () => {
127
+ it("reads register via DCRSR/DCRDR sequence", async () => {
128
+ const value = await cortex.readCoreRegister(CoreRegister.PC);
129
+ expect(adi.transferSequence).toHaveBeenCalled();
130
+ const groups = adi.transferSequenceCalls[0];
131
+ // First group: write DCRSR with register index
132
+ const dcrsrOps = groups[0];
133
+ expect(dcrsrOps.some((op) => op.value === CoreRegister.PC)).toBe(true);
134
+ // Return value comes from the result
135
+ expect(value).toBe(0x42);
136
+ });
137
+ it("throws when S_REGRDY is not set", async () => {
138
+ vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0, 0x42]));
139
+ await expect(cortex.readCoreRegister(CoreRegister.PC)).rejects.toThrow(DapError);
140
+ });
141
+ });
142
+ describe("writeCoreRegister", () => {
143
+ it("writes register via DCRDR/DCRSR sequence", async () => {
144
+ await cortex.writeCoreRegister(CoreRegister.SP, 0x20001000);
145
+ expect(adi.transferSequence).toHaveBeenCalled();
146
+ const groups = adi.transferSequenceCalls[0];
147
+ // First group: write DCRDR with value
148
+ const dcrdOps = groups[0];
149
+ expect(dcrdOps.some((op) => op.value === 0x20001000)).toBe(true);
150
+ // Second group: write DCRSR with register | REGWnR
151
+ const dcrsrOps = groups[1];
152
+ expect(dcrsrOps.some((op) => op.value === (CoreRegister.SP | REGWnR))).toBe(true);
153
+ });
154
+ it("throws when S_REGRDY is not set", async () => {
155
+ vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0]));
156
+ await expect(cortex.writeCoreRegister(CoreRegister.SP, 0x20001000)).rejects.toThrow(DapError);
157
+ });
158
+ });
159
+ describe("softwareReset", () => {
160
+ it("writes reset request to NVIC_AIRCR", async () => {
161
+ // After reset, S_RESET_ST should clear
162
+ adi.mem32.set(DHCSR, 0);
163
+ await cortex.softwareReset();
164
+ const aircrWrite = adi.writtenMem32.find((w) => w.address === NVIC_AIRCR);
165
+ expect(aircrWrite).toBeDefined();
166
+ });
167
+ });
168
+ describe("reset", () => {
169
+ it("without halt: just does software reset", async () => {
170
+ adi.mem32.set(DHCSR, 0);
171
+ await cortex.reset(false);
172
+ const aircrWrite = adi.writtenMem32.find((w) => w.address === NVIC_AIRCR);
173
+ expect(aircrWrite).toBeDefined();
174
+ // No DEMCR writes for non-halt reset
175
+ const demcrWrite = adi.writtenMem32.find((w) => w.address === DEMCR);
176
+ expect(demcrWrite).toBeUndefined();
177
+ });
178
+ it("with halt: sets vector catch, resets, waits for halt, restores DEMCR", async () => {
179
+ // Start halted so halt() is a no-op
180
+ adi.mem32.set(DHCSR, S_HALT);
181
+ adi.mem32.set(DEMCR, 0);
182
+ await cortex.reset(true);
183
+ // Should have written DEMCR with VC_CORERESET
184
+ const demcrWrites = adi.writtenMem32.filter((w) => w.address === DEMCR);
185
+ expect(demcrWrites.length).toBeGreaterThanOrEqual(2);
186
+ // First write enables VC_CORERESET (bit 0)
187
+ expect(demcrWrites[0].value & 1).toBe(1);
188
+ // Last write restores original DEMCR (0)
189
+ expect(demcrWrites[demcrWrites.length - 1].value).toBe(0);
190
+ });
191
+ });
192
+ describe("execute", () => {
193
+ it("uploads code, sets registers, resumes, and waits for halt", async () => {
194
+ // Start not halted, then halt when halt() is called
195
+ adi.mem32.set(DHCSR, 0);
196
+ vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
197
+ adi.writtenMem32.push({ address: addr, value: val });
198
+ if (addr === DHCSR)
199
+ adi.mem32.set(DHCSR, S_HALT);
200
+ });
201
+ const code = new Uint32Array([0xbe00be00, 0x12345678]);
202
+ await cortex.execute(0x20000000, code, 0x20001000, 0x20000005, 0x20000001);
203
+ // Code uploaded via writeBlock
204
+ expect(adi.writeBlock).toHaveBeenCalledWith(0x20000000, code);
205
+ // Core registers set via transferSequence (PC, LR, SP, PSR = 4 writes)
206
+ expect(adi.transferSequence).toHaveBeenCalled();
207
+ });
208
+ it("throws if too many general purpose registers", async () => {
209
+ const code = new Uint32Array([0]);
210
+ const tooMany = new Array(13).fill(0);
211
+ await expect(cortex.execute(0x20000000, code, 0, 0, 0, ...tooMany)).rejects.toThrow("Only 12 general purpose registers");
212
+ });
213
+ });
214
+ });
215
+ //# sourceMappingURL=cortex-m.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cortex-m.test.js","sourceRoot":"","sources":["../../../src/usb/cortex-m.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
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
+ * DAPLink serial and flash access via CMSIS-DAP vendor commands.
13
+ *
14
+ * DAPLink is the interface firmware running on the micro:bit's debug chip
15
+ * (KL27). It extends the standard CMSIS-DAP protocol with vendor-specific
16
+ * commands (0x80+) for:
17
+ *
18
+ * - UART serial pass-through (DapLinkSerial): reading/writing serial data
19
+ * to the target micro:bit's UART, with configurable baud rate and
20
+ * polling-based read loop.
21
+ *
22
+ * - Hex-file flash streaming (dapLinkFlash): streaming Intel HEX data to
23
+ * DAPLink which handles erasing, programming, and verifying flash pages.
24
+ * This is the "full flash" path — as opposed to partial flashing which
25
+ * writes individual pages via SWD.
26
+ */
27
+ import { Logging } from "../logging.js";
28
+ import { type ArmDebug } from "./arm-debug.js";
29
+ import { type CmsisDap } from "./cmsis-dap.js";
30
+ /** Read the DAPLink unique ID (same string as USB serial number). */
31
+ export declare const DAPLINK_VENDOR_READ_UNIQUE_ID = 128;
32
+ export declare const DAPLINK_VENDOR_READ_SETTINGS = 129;
33
+ export declare const DAPLINK_VENDOR_WRITE_SETTINGS = 130;
34
+ export declare const DAPLINK_VENDOR_SERIAL_READ = 131;
35
+ export declare const DAPLINK_VENDOR_SERIAL_WRITE = 132;
36
+ export declare const DAPLINK_VENDOR_FLASH_RESET = 137;
37
+ export declare const DAPLINK_VENDOR_FLASH_OPEN = 138;
38
+ export declare const DAPLINK_VENDOR_FLASH_CLOSE = 139;
39
+ export declare const DAPLINK_VENDOR_FLASH_WRITE = 140;
40
+ export declare class DapLinkSerial {
41
+ private dap;
42
+ private logging;
43
+ private polling;
44
+ constructor(dap: CmsisDap, logging: Logging);
45
+ getBaudrate(): Promise<number>;
46
+ setBaudrate(baudrate: number): Promise<void>;
47
+ read(): Promise<string | undefined>;
48
+ write(data: string): Promise<void>;
49
+ startPolling(onData: (data: string) => void, serialDelay?: number): Promise<void>;
50
+ stopPolling(): void;
51
+ /**
52
+ * Drain any buffered serial data from DAPLink's UART ring buffer.
53
+ * Reads and discards until empty.
54
+ */
55
+ drain(): Promise<void>;
56
+ }
57
+ export declare function dapLinkFlash(adi: ArmDebug, buffer: Uint8Array, onProgress?: (progress: number) => void): Promise<void>;
58
+ /**
59
+ * Read the DAPLink unique ID via vendor command 0x80. Returns the same
60
+ * 48-char hex string as the USB serial number but isn't affected by
61
+ * browser anti-fingerprinting.
62
+ */
63
+ export declare function readDaplinkUniqueId(dap: CmsisDap, logging: Logging): Promise<string | undefined>;
64
+ /**
65
+ * Read a 32-bit word from memory, retrying on transfer errors.
66
+ * Useful for reads immediately after reset when the target may not
67
+ * be ready to respond.
68
+ */
69
+ export declare function readMem32WithRetry(adi: ArmDebug, address: number, logging: Logging, maxRetries?: number, delayMs?: number): Promise<number>;
@@ -0,0 +1,231 @@
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
+ * DAPLink serial and flash access via CMSIS-DAP vendor commands.
13
+ *
14
+ * DAPLink is the interface firmware running on the micro:bit's debug chip
15
+ * (KL27). It extends the standard CMSIS-DAP protocol with vendor-specific
16
+ * commands (0x80+) for:
17
+ *
18
+ * - UART serial pass-through (DapLinkSerial): reading/writing serial data
19
+ * to the target micro:bit's UART, with configurable baud rate and
20
+ * polling-based read loop.
21
+ *
22
+ * - Hex-file flash streaming (dapLinkFlash): streaming Intel HEX data to
23
+ * DAPLink which handles erasing, programming, and verifying flash pages.
24
+ * This is the "full flash" path — as opposed to partial flashing which
25
+ * writes individual pages via SWD.
26
+ */
27
+ import { DapError, DapTransferError } from "./cmsis-dap.js";
28
+ // ---------------------------------------------------------------------------
29
+ // Constants
30
+ // ---------------------------------------------------------------------------
31
+ // DAPLink vendor commands
32
+ // https://github.com/ARMmbed/DAPLink/blob/main/source/daplink/cmsis-dap/daplink_vendor_commands.h
33
+ /** Read the DAPLink unique ID (same string as USB serial number). */
34
+ export const DAPLINK_VENDOR_READ_UNIQUE_ID = 0x80;
35
+ export const DAPLINK_VENDOR_READ_SETTINGS = 0x81;
36
+ export const DAPLINK_VENDOR_WRITE_SETTINGS = 0x82;
37
+ export const DAPLINK_VENDOR_SERIAL_READ = 0x83;
38
+ export const DAPLINK_VENDOR_SERIAL_WRITE = 0x84;
39
+ export const DAPLINK_VENDOR_FLASH_RESET = 0x89;
40
+ export const DAPLINK_VENDOR_FLASH_OPEN = 0x8a;
41
+ export const DAPLINK_VENDOR_FLASH_CLOSE = 0x8b;
42
+ export const DAPLINK_VENDOR_FLASH_WRITE = 0x8c;
43
+ // DAPLink stream error codes (error_t in DAPLink's error.h).
44
+ // stream_write returns these to indicate success variants.
45
+ const DAPLINK_ERROR_SUCCESS = 0;
46
+ const DAPLINK_ERROR_SUCCESS_DONE = 18;
47
+ // Default flash page size for DAPLink write chunks
48
+ const DAPLINK_FLASH_PAGE_SIZE = 62;
49
+ // ---------------------------------------------------------------------------
50
+ // DapLinkSerial — vendor commands for UART serial access
51
+ // ---------------------------------------------------------------------------
52
+ export class DapLinkSerial {
53
+ constructor(dap, logging) {
54
+ Object.defineProperty(this, "dap", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: dap
59
+ });
60
+ Object.defineProperty(this, "logging", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: logging
65
+ });
66
+ Object.defineProperty(this, "polling", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: false
71
+ });
72
+ }
73
+ async getBaudrate() {
74
+ const result = await this.dap.send(DAPLINK_VENDOR_READ_SETTINGS);
75
+ return result.getUint32(1, true);
76
+ }
77
+ async setBaudrate(baudrate) {
78
+ await this.dap.send(DAPLINK_VENDOR_WRITE_SETTINGS, new Uint8Array(new Uint32Array([baudrate]).buffer));
79
+ }
80
+ async read() {
81
+ const result = await this.dap.send(DAPLINK_VENDOR_SERIAL_READ);
82
+ const length = result.getUint8(1);
83
+ if (length === 0)
84
+ return undefined;
85
+ const bytes = new Uint8Array(result.buffer, 2, length);
86
+ return new TextDecoder().decode(bytes);
87
+ }
88
+ async write(data) {
89
+ const encoded = new TextEncoder().encode(data);
90
+ const payload = new Uint8Array(encoded.length + 1);
91
+ payload[0] = encoded.length;
92
+ payload.set(encoded, 1);
93
+ await this.dap.send(DAPLINK_VENDOR_SERIAL_WRITE, payload);
94
+ }
95
+ async startPolling(onData, serialDelay = 100) {
96
+ this.polling = true;
97
+ try {
98
+ while (this.polling) {
99
+ const data = await this.read();
100
+ if (data !== undefined && this.polling) {
101
+ onData(data);
102
+ }
103
+ await new Promise((resolve) => setTimeout(resolve, serialDelay));
104
+ }
105
+ }
106
+ finally {
107
+ this.polling = false;
108
+ }
109
+ }
110
+ stopPolling() {
111
+ this.polling = false;
112
+ }
113
+ /**
114
+ * Drain any buffered serial data from DAPLink's UART ring buffer.
115
+ * Reads and discards until empty.
116
+ */
117
+ async drain() {
118
+ let totalDrained = 0;
119
+ while (true) {
120
+ const data = await this.read();
121
+ if (!data)
122
+ break;
123
+ totalDrained += data.length;
124
+ }
125
+ if (totalDrained > 0) {
126
+ this.logging.log(`Drained ${totalDrained} bytes of stale serial data`);
127
+ }
128
+ }
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // dapLinkFlash — vendor commands for flash streaming
132
+ // ---------------------------------------------------------------------------
133
+ export async function dapLinkFlash(adi, buffer, onProgress) {
134
+ const { dap } = adi;
135
+ const arrayBuffer = buffer.buffer;
136
+ // Stream type 1 = Intel HEX (the only format we use).
137
+ // DAPLink vendor commands return an error_t status in byte 1:
138
+ // 0 = ERROR_SUCCESS, 18 = ERROR_SUCCESS_DONE, 19 = ERROR_SUCCESS_DONE_OR_CONTINUE
139
+ const openResult = await dap.send(DAPLINK_VENDOR_FLASH_OPEN, new Uint8Array(new Uint32Array([1]).buffer));
140
+ if (openResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
141
+ throw new DapError(`Flash open error (status=${openResult.getUint8(1)})`);
142
+ }
143
+ try {
144
+ // We intentionally don't check FLASH_WRITE status for errors. V1
145
+ // micro:bit DAPLink reports ERROR_ERASE_SECTOR (16) late in the
146
+ // flash but the write still succeeds. dapjs never checked these.
147
+ let offset = 0;
148
+ while (offset < arrayBuffer.byteLength) {
149
+ const end = Math.min(arrayBuffer.byteLength, offset + DAPLINK_FLASH_PAGE_SIZE);
150
+ const page = arrayBuffer.slice(offset, end);
151
+ const data = new Uint8Array(page.byteLength + 1);
152
+ data[0] = page.byteLength;
153
+ data.set(new Uint8Array(page), 1);
154
+ const writeResult = await dap.send(DAPLINK_VENDOR_FLASH_WRITE, data);
155
+ onProgress?.(offset / arrayBuffer.byteLength);
156
+ offset = end;
157
+ // DAPLink signals hex EOF with ERROR_SUCCESS_DONE (18).
158
+ if (writeResult.getUint8(1) === DAPLINK_ERROR_SUCCESS_DONE)
159
+ break;
160
+ }
161
+ onProgress?.(1.0);
162
+ const closeResult = await dap.send(DAPLINK_VENDOR_FLASH_CLOSE);
163
+ if (closeResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
164
+ throw new DapError(`Flash close error (status=${closeResult.getUint8(1)})`);
165
+ }
166
+ await dap.send(DAPLINK_VENDOR_FLASH_RESET);
167
+ }
168
+ catch (error) {
169
+ try {
170
+ await dap.send(DAPLINK_VENDOR_FLASH_CLOSE);
171
+ }
172
+ catch {
173
+ /* ignore */
174
+ }
175
+ throw error;
176
+ }
177
+ finally {
178
+ adi.resetState();
179
+ }
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // DAPLink utilities
183
+ // ---------------------------------------------------------------------------
184
+ /**
185
+ * Read the DAPLink unique ID via vendor command 0x80. Returns the same
186
+ * 48-char hex string as the USB serial number but isn't affected by
187
+ * browser anti-fingerprinting.
188
+ */
189
+ export async function readDaplinkUniqueId(dap, logging) {
190
+ try {
191
+ const result = await dap.send(DAPLINK_VENDOR_READ_UNIQUE_ID);
192
+ const length = result.getUint8(1);
193
+ if (length === 0) {
194
+ return undefined;
195
+ }
196
+ const bytes = new Uint8Array(result.buffer, 2, length);
197
+ return new TextDecoder().decode(bytes);
198
+ }
199
+ catch (e) {
200
+ logging.log(`Error reading DAPLink unique ID: ${e instanceof Error ? e.message : e}`);
201
+ return undefined;
202
+ }
203
+ }
204
+ /**
205
+ * Read a 32-bit word from memory, retrying on transfer errors.
206
+ * Useful for reads immediately after reset when the target may not
207
+ * be ready to respond.
208
+ */
209
+ export async function readMem32WithRetry(adi, address, logging, maxRetries = 20, delayMs = 20) {
210
+ let lastError;
211
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
212
+ try {
213
+ const value = await adi.readMem32(address);
214
+ if (attempt > 0) {
215
+ logging.log(`readMem32(0x${address.toString(16)}) succeeded after ${attempt + 1} attempts`);
216
+ }
217
+ return value;
218
+ }
219
+ catch (e) {
220
+ if (e instanceof DapTransferError) {
221
+ lastError = e;
222
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
223
+ }
224
+ else {
225
+ throw e;
226
+ }
227
+ }
228
+ }
229
+ throw lastError;
230
+ }
231
+ //# sourceMappingURL=daplink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daplink.js","sourceRoot":"","sources":["../../../src/usb/daplink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAiB,QAAQ,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,0BAA0B;AAC1B,kGAAkG;AAClG,qEAAqE;AACrE,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C,6DAA6D;AAC7D,2DAA2D;AAC3D,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,mDAAmD;AACnD,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IAGxB,YACU,GAAa,EACb,OAAgB;QADxB;;;;mBAAQ,GAAG;WAAU;QACrB;;;;mBAAQ,OAAO;WAAS;QAJlB;;;;mBAAU,KAAK;WAAC;IAKrB,CAAC;IAEJ,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CACjB,6BAA6B,EAC7B,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CACnD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAA8B,EAC9B,WAAW,GAAG,GAAG;QAEjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI;gBAAE,MAAM;YACjB,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,6BAA6B,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAa,EACb,MAAkB,EAClB,UAAuC;IAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAElC,sDAAsD;IACtD,8DAA8D;IAC9D,oFAAoF;IAEpF,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAC/B,yBAAyB,EACzB,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAC5C,CAAC;IACF,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,4BAA4B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC;QACH,iEAAiE;QACjE,gEAAgE;QAChE,iEAAiE;QACjE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAClB,WAAW,CAAC,UAAU,EACtB,MAAM,GAAG,uBAAuB,CACjC,CAAC;YACF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YACrE,UAAU,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,CAAC;YACb,wDAAwD;YACxD,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,0BAA0B;gBAAE,MAAM;QACpE,CAAC;QAED,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;QAElB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;YACtD,MAAM,IAAI,QAAQ,CAChB,6BAA6B,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CACxD,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAa,EACb,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CACT,oCAAoC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAa,EACb,OAAe,EACf,OAAgB,EAChB,UAAU,GAAG,EAAE,EACf,OAAO,GAAG,EAAE;IAEZ,IAAI,SAA4B,CAAC;IACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,eAAe,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,OAAO,GAAG,CAAC,WAAW,CAC/E,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC;gBAClC,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};