@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,151 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2026, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.saturateCdcPipeline = saturateCdcPipeline;
9
+ const cortex_m_js_1 = require("./cortex-m.js");
10
+ const CDC_SAT_LOAD_ADDR = 0x20000000;
11
+ // DAPLink's UART RX ring buffer + CDC TX buffer must both fill before CDC
12
+ // stops consuming. Buffer sizes vary by interface chip:
13
+ // KL26/KL27: 64 + 64 = 128 bytes
14
+ // nRF52820/nRF52833: 1024 + 64 = 1088 bytes
15
+ // 2048 covers all known variants with headroom (~178ms at 115200 baud).
16
+ const CDC_SAT_BYTE_COUNT = 2048;
17
+ // nRF51 legacy UART registers (base 0x40002000)
18
+ const NRF51_UART_TASKS_STARTTX = 0x40002008;
19
+ const NRF51_UART_TASKS_STOPTX = 0x4000200c;
20
+ const NRF51_UART_EVENTS_TXDRDY = 0x4000211c;
21
+ const NRF51_UART_ENABLE = 0x40002500;
22
+ const NRF51_UART_PSEL_TXD = 0x4000250c;
23
+ const NRF51_UART_BAUDRATE = 0x40002524;
24
+ const NRF51_UART_TXD = 0x4000251c;
25
+ // nRF52833 UARTE registers (base 0x40002000)
26
+ const NRF52_UARTE_TASKS_STARTTX = 0x40002008;
27
+ const NRF52_UARTE_TASKS_STOPTX = 0x4000210c;
28
+ const NRF52_UARTE_EVENTS_ENDTX = 0x40002120;
29
+ const NRF52_UARTE_EVENTS_TXSTOPPED = 0x40002158;
30
+ const NRF52_UARTE_ENABLE = 0x40002500;
31
+ const NRF52_UARTE_PSEL_TXD = 0x4000250c;
32
+ const NRF52_UARTE_BAUDRATE = 0x40002524;
33
+ const NRF52_UARTE_TXD_PTR = 0x40002544;
34
+ const NRF52_UARTE_TXD_MAXCNT = 0x40002548;
35
+ // UART baud rate register value for 115200 (same encoding on nRF51 and nRF52)
36
+ const NRF_BAUDRATE_115200 = 0x01d7e000;
37
+ // micro:bit UART TX pins (target → interface chip)
38
+ const MICROBIT_V1_TX_PIN = 24; // P0.24
39
+ const MICROBIT_V2_TX_PIN = 6; // P0.06
40
+ /**
41
+ * Push dummy data through the target's UART to fill DAPLink's internal
42
+ * CDC buffers, preventing CDC from consuming post-flash serial output.
43
+ * Must be called while the target is halted.
44
+ */
45
+ async function saturateCdcPipeline(device, boardVersion, logging) {
46
+ try {
47
+ if (boardVersion === "V1") {
48
+ await saturateCdcV1(device, logging);
49
+ }
50
+ else {
51
+ await saturateCdcV2(device, logging);
52
+ }
53
+ }
54
+ catch (e) {
55
+ logging.log(`CDC saturation failed (non-fatal): ${e instanceof Error ? e.message : e}`);
56
+ }
57
+ }
58
+ /**
59
+ * V1 (nRF51): Run a Thumb blob that sends CDC_SAT_BYTE_COUNT bytes at
60
+ * wire speed through the legacy UART. The CPU is resumed with PRIMASK=1
61
+ * to prevent the halted program's ISRs from interfering.
62
+ *
63
+ * Blob register convention (values passed via writeCoreRegister):
64
+ * r0 = byte count, r1 = TXD addr, r2 = TXDRDY addr,
65
+ * r3 = data byte, r4 = 0 (for clearing events)
66
+ *
67
+ * Thumb instructions (word 0 is a BKPT pair used as the LR target):
68
+ * loop: str r4, [r2] // clear TXDRDY
69
+ * str r3, [r1] // write TXD
70
+ * wait: ldr r5, [r2] // read TXDRDY
71
+ * cmp r5, #0
72
+ * beq wait
73
+ * subs r0, #1
74
+ * bne loop
75
+ * bkpt #0
76
+ */
77
+ async function saturateCdcV1(device, logging) {
78
+ const { adi, cortexM } = device;
79
+ // Stop any in-flight TX and fully reconfigure the UART from scratch.
80
+ // The previous program (e.g. MakeCode) may not have set up the UART at
81
+ // all, so we can't assume any registers are configured.
82
+ await adi.writeMem32(NRF51_UART_TASKS_STOPTX, 1);
83
+ await adi.writeMem32(NRF51_UART_ENABLE, 0);
84
+ await adi.writeMem32(NRF51_UART_PSEL_TXD, MICROBIT_V1_TX_PIN);
85
+ await adi.writeMem32(NRF51_UART_BAUDRATE, NRF_BAUDRATE_115200);
86
+ await adi.writeMem32(NRF51_UART_ENABLE, 4); // UART enable
87
+ await adi.writeMem32(NRF51_UART_EVENTS_TXDRDY, 0);
88
+ await adi.writeMem32(NRF51_UART_TASKS_STARTTX, 1);
89
+ const blob = new Uint32Array([
90
+ 0xbe00be00, // BKPT (LR target) + pad
91
+ 0x600b6014, // str r4,[r2]; str r3,[r1]
92
+ 0x2d006815, // ldr r5,[r2]; cmp r5,#0
93
+ 0x3801d0fc, // beq wait; subs r0,#1
94
+ 0xbe00d1f8, // bne loop; bkpt
95
+ ]);
96
+ await adi.writeBlock(CDC_SAT_LOAD_ADDR, blob);
97
+ await cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.PC, (CDC_SAT_LOAD_ADDR + 4) | 1);
98
+ await cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.LR, CDC_SAT_LOAD_ADDR | 1);
99
+ await cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.SP, 0x20004000);
100
+ await cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.PSR, 0x01000000);
101
+ await cortexM.writeCoreRegister(0, CDC_SAT_BYTE_COUNT);
102
+ await cortexM.writeCoreRegister(1, NRF51_UART_TXD);
103
+ await cortexM.writeCoreRegister(2, NRF51_UART_EVENTS_TXDRDY);
104
+ await cortexM.writeCoreRegister(3, 0x00); // NUL byte (ignored by terminals)
105
+ await cortexM.writeCoreRegister(4, 0);
106
+ await cortexM.writeCoreRegister(20, 1); // PRIMASK = 1
107
+ await cortexM.resume(false);
108
+ // Wait for blob to hit its final BKPT (~178ms for 2048 bytes at 115200).
109
+ for (let i = 0; i < 2000; i++) {
110
+ if (await cortexM.isHalted())
111
+ return;
112
+ }
113
+ logging.log("V1 CDC saturation blob did not complete, halting");
114
+ await cortexM.halt();
115
+ }
116
+ /**
117
+ * V2 (nRF52833): Set up a UARTE DMA transfer via SWD register writes.
118
+ * The DMA engine runs independently of the halted CPU.
119
+ */
120
+ async function saturateCdcV2(device, logging) {
121
+ const { adi } = device;
122
+ // Stop any in-flight transfer cleanly
123
+ await adi.writeMem32(NRF52_UARTE_EVENTS_TXSTOPPED, 0);
124
+ await adi.writeMem32(NRF52_UARTE_TASKS_STOPTX, 1);
125
+ for (let i = 0; i < 100; i++) {
126
+ if (await adi.readMem32(NRF52_UARTE_EVENTS_TXSTOPPED))
127
+ break;
128
+ }
129
+ // Fully reconfigure UARTE from scratch — the previous program may not
130
+ // have set up the peripheral at all.
131
+ await adi.writeMem32(NRF52_UARTE_ENABLE, 0);
132
+ await adi.writeMem32(NRF52_UARTE_PSEL_TXD, MICROBIT_V2_TX_PIN);
133
+ await adi.writeMem32(NRF52_UARTE_BAUDRATE, NRF_BAUDRATE_115200);
134
+ await adi.writeMem32(NRF52_UARTE_ENABLE, 8); // 8 = UARTE mode
135
+ // Write NUL bytes to RAM for the DMA buffer (harmless if seen by a
136
+ // CDC reader — terminals ignore NUL).
137
+ const nulBuf = new Uint32Array(CDC_SAT_BYTE_COUNT / 4);
138
+ await adi.writeBlock(CDC_SAT_LOAD_ADDR, nulBuf);
139
+ // Set up DMA and trigger
140
+ await adi.writeMem32(NRF52_UARTE_TXD_PTR, CDC_SAT_LOAD_ADDR);
141
+ await adi.writeMem32(NRF52_UARTE_TXD_MAXCNT, CDC_SAT_BYTE_COUNT);
142
+ await adi.writeMem32(NRF52_UARTE_EVENTS_ENDTX, 0);
143
+ await adi.writeMem32(NRF52_UARTE_TASKS_STARTTX, 1);
144
+ // Poll for ENDTX (~178ms for 2048 bytes at 115200 baud).
145
+ for (let i = 0; i < 2000; i++) {
146
+ if (await adi.readMem32(NRF52_UARTE_EVENTS_ENDTX))
147
+ return;
148
+ }
149
+ logging.log("UARTE ENDTX not detected after polling");
150
+ }
151
+ //# sourceMappingURL=cdc-saturation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdc-saturation.js","sourceRoot":"","sources":["../../../src/usb/cdc-saturation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
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
+ * CMSIS-DAP protocol layer. CmsisDapUsb handles the framing and validation of
11
+ * CMSIS-DAP commands over USB. It sits between UsbTransport (raw packet I/O)
12
+ * and ArmDebugSwd (SWD register access). Its responsibilities are:
13
+ *
14
+ * - Serialising all DAP commands through a single queue so concurrent
15
+ * callers (serial polling, flash writes, SWD reads) don't interleave.
16
+ * - Framing DAP_TRANSFER / DAP_TRANSFER_BLOCK requests and parsing their
17
+ * responses, including structured error reporting.
18
+ * - Providing named wrappers for the low-level DAP commands used during
19
+ * SWD initialisation (SWJ_SEQUENCE, SWJ_CLOCK, etc.).
20
+ * - Draining stale USB responses left over from a previous session.
21
+ *
22
+ * Protocol references:
23
+ * - CMSIS-DAP: https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__Commands__gr.html
24
+ * - ARM ADI: https://developer.arm.com/documentation/ihi0031/a/
25
+ */
26
+ import { DeviceError } from "../device.js";
27
+ import { Logging } from "../logging.js";
28
+ import { type Transport } from "./transport.js";
29
+ export declare const DP = 0;
30
+ export declare const AP = 1;
31
+ export declare const READ = 2;
32
+ export declare const WRITE = 0;
33
+ export declare const ABORT_ALL: number;
34
+ export interface DapOperation {
35
+ port: number;
36
+ mode: number;
37
+ register: number;
38
+ value?: number;
39
+ }
40
+ /**
41
+ * Base error for CMSIS-DAP protocol failures.
42
+ * Extends DeviceError so existing catch blocks continue to work.
43
+ */
44
+ export declare class DapError extends DeviceError {
45
+ constructor(message: string);
46
+ }
47
+ /**
48
+ * The response command byte didn't match the request.
49
+ * This can indicate stale responses in the USB buffer from a previous
50
+ * interrupted session, or a protocol-level error.
51
+ */
52
+ export declare class DapResponseMismatchError extends DapError {
53
+ constructor(expected: number, actual: number);
54
+ }
55
+ /**
56
+ * DAP transfer or block transfer failed with a non-OK response.
57
+ */
58
+ export declare class DapTransferError extends DapError {
59
+ readonly response: number;
60
+ readonly completedOps: number;
61
+ readonly totalOps: number;
62
+ constructor(response: number, completedOps: number, totalOps: number, prefix?: string);
63
+ }
64
+ export interface CmsisDap {
65
+ readonly isOpen: boolean;
66
+ readonly blockSize: number;
67
+ /** Send a CMSIS-DAP command and validate the response. */
68
+ send(command: number, data?: Uint8Array): Promise<DataView>;
69
+ clearAbort(): Promise<void>;
70
+ swjSequence(data: Uint8Array): Promise<void>;
71
+ swjClock(frequency: number): Promise<void>;
72
+ connect(): Promise<void>;
73
+ disconnect(): Promise<void>;
74
+ configureTransfer(idleCycles: number, waitRetry: number, matchRetry: number): Promise<void>;
75
+ open(): Promise<void>;
76
+ close(): Promise<void>;
77
+ /**
78
+ * Execute a batch of DAP transfer operations (DAP_TRANSFER command).
79
+ * Returns the values read (one per READ operation in the batch).
80
+ */
81
+ transfer(operations: DapOperation[]): Promise<Uint32Array>;
82
+ /** Read a block of 32-bit values from a single register (DAP_TRANSFER_BLOCK). */
83
+ transferBlockRead(port: number, register: number, count: number): Promise<Uint32Array>;
84
+ /** Write a block of 32-bit values to a single register (DAP_TRANSFER_BLOCK). */
85
+ transferBlockWrite(port: number, register: number, values: Uint32Array): Promise<void>;
86
+ /**
87
+ * Drain stale responses from the USB buffer.
88
+ * Sends probe commands and reads until the response matches,
89
+ * discarding any stale responses from interrupted operations.
90
+ */
91
+ drainStaleResponses(): Promise<void>;
92
+ }
93
+ export declare class CmsisDapUsb implements CmsisDap {
94
+ private transport;
95
+ private logging;
96
+ readonly blockSize: number;
97
+ private sendQueue;
98
+ constructor(transport: Transport, logging: Logging);
99
+ get isOpen(): boolean;
100
+ send(command: number, data?: Uint8Array): Promise<DataView>;
101
+ clearAbort(): Promise<void>;
102
+ swjSequence(data: Uint8Array): Promise<void>;
103
+ swjClock(frequency: number): Promise<void>;
104
+ connect(): Promise<void>;
105
+ disconnect(): Promise<void>;
106
+ configureTransfer(idleCycles: number, waitRetry: number, matchRetry: number): Promise<void>;
107
+ open(): Promise<void>;
108
+ close(): Promise<void>;
109
+ transfer(operations: DapOperation[]): Promise<Uint32Array>;
110
+ transferBlockRead(port: number, register: number, count: number): Promise<Uint32Array>;
111
+ transferBlockWrite(port: number, register: number, values: Uint32Array): Promise<void>;
112
+ drainStaleResponses(): Promise<void>;
113
+ }
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2026, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * Derived from dapjs (https://github.com/ARMmbed/dapjs) which is
6
+ * Copyright (c) Arm Limited 2018
7
+ * Copyright (c) Microsoft Corporation
8
+ *
9
+ * SPDX-License-Identifier: MIT
10
+ *
11
+ * CMSIS-DAP protocol layer. CmsisDapUsb handles the framing and validation of
12
+ * CMSIS-DAP commands over USB. It sits between UsbTransport (raw packet I/O)
13
+ * and ArmDebugSwd (SWD register access). Its responsibilities are:
14
+ *
15
+ * - Serialising all DAP commands through a single queue so concurrent
16
+ * callers (serial polling, flash writes, SWD reads) don't interleave.
17
+ * - Framing DAP_TRANSFER / DAP_TRANSFER_BLOCK requests and parsing their
18
+ * responses, including structured error reporting.
19
+ * - Providing named wrappers for the low-level DAP commands used during
20
+ * SWD initialisation (SWJ_SEQUENCE, SWJ_CLOCK, etc.).
21
+ * - Draining stale USB responses left over from a previous session.
22
+ *
23
+ * Protocol references:
24
+ * - CMSIS-DAP: https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__Commands__gr.html
25
+ * - ARM ADI: https://developer.arm.com/documentation/ihi0031/a/
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.CmsisDapUsb = exports.DapTransferError = exports.DapResponseMismatchError = exports.DapError = exports.ABORT_ALL = exports.WRITE = exports.READ = exports.AP = exports.DP = void 0;
29
+ const device_js_1 = require("../device.js");
30
+ const promise_queue_js_1 = require("./promise-queue.js");
31
+ const transport_js_1 = require("./transport.js");
32
+ // ---------------------------------------------------------------------------
33
+ // Constants
34
+ // ---------------------------------------------------------------------------
35
+ // CMSIS-DAP commands
36
+ const DAP_INFO = 0x00;
37
+ const DAP_CONNECT = 0x02;
38
+ const DAP_DISCONNECT = 0x03;
39
+ const DAP_TRANSFER_CONFIGURE = 0x04;
40
+ const DAP_TRANSFER = 0x05;
41
+ const DAP_TRANSFER_BLOCK = 0x06;
42
+ const DAP_WRITE_ABORT = 0x08;
43
+ const DAP_SWJ_CLOCK = 0x11;
44
+ const DAP_SWJ_SEQUENCE = 0x12;
45
+ // DAP_CONNECT response
46
+ const DAP_CONNECT_FAILED = 0;
47
+ // DAP response statuses for commands that return OK/ERROR in byte 1
48
+ const DAP_OK = 0x00;
49
+ // Commands whose byte-1 response should be checked for OK
50
+ const STATUS_CHECK_COMMANDS = new Set([
51
+ DAP_DISCONNECT,
52
+ DAP_WRITE_ABORT,
53
+ DAP_SWJ_CLOCK,
54
+ DAP_SWJ_SEQUENCE,
55
+ DAP_TRANSFER_CONFIGURE,
56
+ ]);
57
+ // DAP_TRANSFER response codes (bitfield)
58
+ const TRANSFER_OK = 0x01;
59
+ const TRANSFER_WAIT = 0x02;
60
+ const TRANSFER_FAULT = 0x04;
61
+ const TRANSFER_ERROR = 0x08;
62
+ const TRANSFER_MISMATCH = 0x10;
63
+ // DAP ports
64
+ exports.DP = 0x00; // Debug Port
65
+ exports.AP = 0x01; // Access Port
66
+ // DAP transfer modes
67
+ exports.READ = 0x02;
68
+ exports.WRITE = 0x00;
69
+ // Abort register bits
70
+ const ABORT_STKCMPCLR = 1 << 1;
71
+ const ABORT_STKERRCLR = 1 << 2;
72
+ const ABORT_WDERRCLR = 1 << 3;
73
+ const ABORT_ORUNERRCLR = 1 << 4;
74
+ exports.ABORT_ALL = ABORT_WDERRCLR | ABORT_STKERRCLR | ABORT_STKCMPCLR | ABORT_ORUNERRCLR;
75
+ // Packet sizes
76
+ const BLOCK_HEADER_SIZE = 4;
77
+ const TRANSFER_HEADER_SIZE = 2;
78
+ const TRANSFER_OPERATION_SIZE = 5;
79
+ // ---------------------------------------------------------------------------
80
+ // Error classes
81
+ // ---------------------------------------------------------------------------
82
+ /**
83
+ * Base error for CMSIS-DAP protocol failures.
84
+ * Extends DeviceError so existing catch blocks continue to work.
85
+ */
86
+ class DapError extends device_js_1.DeviceError {
87
+ constructor(message) {
88
+ super({ code: "reconnect-microbit", message });
89
+ }
90
+ }
91
+ exports.DapError = DapError;
92
+ /**
93
+ * The response command byte didn't match the request.
94
+ * This can indicate stale responses in the USB buffer from a previous
95
+ * interrupted session, or a protocol-level error.
96
+ */
97
+ class DapResponseMismatchError extends DapError {
98
+ constructor(expected, actual) {
99
+ super(`Bad response for ${expected} -> ${actual}`);
100
+ }
101
+ }
102
+ exports.DapResponseMismatchError = DapResponseMismatchError;
103
+ /**
104
+ * DAP transfer or block transfer failed with a non-OK response.
105
+ */
106
+ class DapTransferError extends DapError {
107
+ constructor(response, completedOps, totalOps, prefix = "") {
108
+ super(`${prefix}${transferResponseMessage(response)} at operation ${completedOps}/${totalOps}`);
109
+ Object.defineProperty(this, "response", {
110
+ enumerable: true,
111
+ configurable: true,
112
+ writable: true,
113
+ value: response
114
+ });
115
+ Object.defineProperty(this, "completedOps", {
116
+ enumerable: true,
117
+ configurable: true,
118
+ writable: true,
119
+ value: completedOps
120
+ });
121
+ Object.defineProperty(this, "totalOps", {
122
+ enumerable: true,
123
+ configurable: true,
124
+ writable: true,
125
+ value: totalOps
126
+ });
127
+ }
128
+ }
129
+ exports.DapTransferError = DapTransferError;
130
+ class CmsisDapUsb {
131
+ constructor(transport, logging) {
132
+ Object.defineProperty(this, "transport", {
133
+ enumerable: true,
134
+ configurable: true,
135
+ writable: true,
136
+ value: transport
137
+ });
138
+ Object.defineProperty(this, "logging", {
139
+ enumerable: true,
140
+ configurable: true,
141
+ writable: true,
142
+ value: logging
143
+ });
144
+ Object.defineProperty(this, "blockSize", {
145
+ enumerable: true,
146
+ configurable: true,
147
+ writable: true,
148
+ value: void 0
149
+ });
150
+ Object.defineProperty(this, "sendQueue", {
151
+ enumerable: true,
152
+ configurable: true,
153
+ writable: true,
154
+ value: new promise_queue_js_1.PromiseQueue()
155
+ });
156
+ this.blockSize = transport_js_1.PACKET_SIZE - BLOCK_HEADER_SIZE - 1;
157
+ }
158
+ get isOpen() {
159
+ return this.transport.isOpen;
160
+ }
161
+ async send(command, data) {
162
+ let array;
163
+ if (data) {
164
+ array = new Uint8Array(data.length + 1);
165
+ array[0] = command;
166
+ array.set(data, 1);
167
+ }
168
+ else {
169
+ array = new Uint8Array([command]);
170
+ }
171
+ return this.sendQueue.add(async () => {
172
+ await this.transport.write(array);
173
+ const response = await this.transport.read();
174
+ if (response.getUint8(0) !== command) {
175
+ throw new DapResponseMismatchError(command, response.getUint8(0));
176
+ }
177
+ if (STATUS_CHECK_COMMANDS.has(command)) {
178
+ if (response.getUint8(1) !== DAP_OK) {
179
+ throw new DapError(`Bad status for ${command} -> ${response.getUint8(1)}`);
180
+ }
181
+ }
182
+ return response;
183
+ });
184
+ }
185
+ async clearAbort() {
186
+ const data = new Uint8Array(5);
187
+ new DataView(data.buffer).setUint32(1, exports.ABORT_ALL, true);
188
+ await this.send(DAP_WRITE_ABORT, data);
189
+ }
190
+ async swjSequence(data) {
191
+ const bitLength = data.byteLength * 8;
192
+ const payload = new Uint8Array(data.length + 1);
193
+ payload[0] = bitLength;
194
+ payload.set(data, 1);
195
+ await this.send(DAP_SWJ_SEQUENCE, payload);
196
+ }
197
+ async swjClock(frequency) {
198
+ await this.send(DAP_SWJ_CLOCK, new Uint8Array(new Uint32Array([frequency]).buffer));
199
+ }
200
+ async connect() {
201
+ const result = await this.send(DAP_CONNECT, new Uint8Array([0]));
202
+ if (result.getUint8(1) === DAP_CONNECT_FAILED) {
203
+ throw new DapError("Mode not enabled.");
204
+ }
205
+ }
206
+ async disconnect() {
207
+ await this.send(DAP_DISCONNECT);
208
+ }
209
+ async configureTransfer(idleCycles, waitRetry, matchRetry) {
210
+ const data = new Uint8Array(5);
211
+ const view = new DataView(data.buffer);
212
+ view.setUint8(0, idleCycles);
213
+ view.setUint16(1, waitRetry, true);
214
+ view.setUint16(3, matchRetry, true);
215
+ await this.send(DAP_TRANSFER_CONFIGURE, data);
216
+ }
217
+ async open() {
218
+ await this.transport.open();
219
+ }
220
+ async close() {
221
+ await this.transport.close();
222
+ }
223
+ async transfer(operations) {
224
+ if (operations.length === 0) {
225
+ return new Uint32Array(0);
226
+ }
227
+ const data = new Uint8Array(TRANSFER_HEADER_SIZE + operations.length * TRANSFER_OPERATION_SIZE);
228
+ const view = new DataView(data.buffer);
229
+ view.setUint8(0, 0); // DAP index (ignored for SWD)
230
+ view.setUint8(1, operations.length);
231
+ operations.forEach((op, index) => {
232
+ const offset = TRANSFER_HEADER_SIZE + index * TRANSFER_OPERATION_SIZE;
233
+ view.setUint8(offset, op.port | op.mode | op.register);
234
+ view.setUint32(offset + 1, op.value ?? 0, true);
235
+ });
236
+ try {
237
+ const result = await this.send(DAP_TRANSFER, data);
238
+ const completedCount = result.getUint8(1);
239
+ const response = result.getUint8(2);
240
+ if (response !== TRANSFER_OK) {
241
+ throw new DapTransferError(response, completedCount, operations.length);
242
+ }
243
+ if (completedCount !== operations.length) {
244
+ throw new DapError(`Transfer count mismatch: expected ${operations.length}, got ${completedCount}`);
245
+ }
246
+ const readCount = operations.filter((op) => op.mode === exports.READ).length;
247
+ return new Uint32Array(result.buffer.slice(3, 3 + readCount * 4));
248
+ }
249
+ catch (error) {
250
+ await this.clearAbort();
251
+ throw error;
252
+ }
253
+ }
254
+ async transferBlockRead(port, register, count) {
255
+ const maxWords = Math.floor(this.blockSize / 4);
256
+ if (count > maxWords) {
257
+ throw new DapError(`Transfer block read count ${count} exceeds max ${maxWords}`);
258
+ }
259
+ const data = new Uint8Array(BLOCK_HEADER_SIZE);
260
+ const view = new DataView(data.buffer);
261
+ view.setUint8(0, 0);
262
+ view.setUint16(1, count, true);
263
+ view.setUint8(3, port | exports.READ | register);
264
+ try {
265
+ const result = await this.send(DAP_TRANSFER_BLOCK, data);
266
+ const completedCount = result.getUint16(1, true);
267
+ const response = result.getUint8(3);
268
+ if (response !== TRANSFER_OK) {
269
+ throw new DapTransferError(response, completedCount, count, "Block read: ");
270
+ }
271
+ if (completedCount !== count) {
272
+ throw new DapError(`Block read count mismatch: expected ${count}, got ${completedCount}`);
273
+ }
274
+ return new Uint32Array(result.buffer.slice(4, 4 + count * 4));
275
+ }
276
+ catch (error) {
277
+ await this.clearAbort();
278
+ throw error;
279
+ }
280
+ }
281
+ async transferBlockWrite(port, register, values) {
282
+ const maxWords = Math.floor(this.blockSize / 4);
283
+ if (values.length > maxWords) {
284
+ throw new DapError(`Transfer block write count ${values.length} exceeds max ${maxWords}`);
285
+ }
286
+ const data = new Uint8Array(BLOCK_HEADER_SIZE + values.byteLength);
287
+ const view = new DataView(data.buffer);
288
+ view.setUint8(0, 0);
289
+ view.setUint16(1, values.length, true);
290
+ view.setUint8(3, port | exports.WRITE | register);
291
+ values.forEach((value, index) => {
292
+ const offset = BLOCK_HEADER_SIZE + index * 4;
293
+ view.setUint32(offset, value, true);
294
+ });
295
+ try {
296
+ const result = await this.send(DAP_TRANSFER_BLOCK, data);
297
+ const completedCount = result.getUint16(1, true);
298
+ const response = result.getUint8(3);
299
+ if (response !== TRANSFER_OK) {
300
+ throw new DapTransferError(response, completedCount, values.length, "Block write: ");
301
+ }
302
+ if (completedCount !== values.length) {
303
+ throw new DapError(`Block write count mismatch: expected ${values.length}, got ${completedCount}`);
304
+ }
305
+ }
306
+ catch (error) {
307
+ await this.clearAbort();
308
+ throw error;
309
+ }
310
+ }
311
+ async drainStaleResponses() {
312
+ return this.sendQueue.add(async () => {
313
+ const maxAttempts = 10;
314
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
315
+ const packet = new Uint8Array([DAP_INFO, 0x01]);
316
+ await this.transport.write(packet);
317
+ const response = await this.transport.read();
318
+ const responseBytes = new Uint8Array(response.buffer);
319
+ if (responseBytes[0] === DAP_INFO) {
320
+ for (let i = 0; i < attempt; i++) {
321
+ await this.transport.read();
322
+ }
323
+ this.logging.log(`USB buffer drain: synchronized after ${attempt} stale response(s)`);
324
+ return;
325
+ }
326
+ this.logging.log(`USB buffer drain: discarded stale response 0x${responseBytes[0].toString(16)}`);
327
+ }
328
+ this.logging.log("USB buffer drain: warning - could not fully synchronize after max attempts");
329
+ });
330
+ }
331
+ }
332
+ exports.CmsisDapUsb = CmsisDapUsb;
333
+ // ---------------------------------------------------------------------------
334
+ // Utility
335
+ // ---------------------------------------------------------------------------
336
+ function transferResponseMessage(response) {
337
+ if (response === 0)
338
+ return "Transfer failed (no ACK — target not responding)";
339
+ if (response & TRANSFER_WAIT)
340
+ return "Transfer WAIT (target busy, retries exhausted)";
341
+ if (response & TRANSFER_FAULT)
342
+ return "Transfer FAULT (access error)";
343
+ if (response & TRANSFER_ERROR)
344
+ return "Transfer protocol error";
345
+ if (response & TRANSFER_MISMATCH)
346
+ return "Transfer value mismatch";
347
+ return `Transfer failed (response=0x${response.toString(16)})`;
348
+ }
349
+ //# sourceMappingURL=cmsis-dap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmsis-dap.js","sourceRoot":"","sources":["../../../src/usb/cmsis-dap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};