@microbit/microbit-connection 0.9.0-apps.alpha.16 → 0.9.0-apps.alpha.18

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 (457) hide show
  1. package/build/cjs/async-util.d.ts +3 -1
  2. package/build/cjs/async-util.js +5 -1
  3. package/build/cjs/async-util.js.map +1 -1
  4. package/build/cjs/bluetooth/ble-error.d.ts +10 -0
  5. package/build/cjs/bluetooth/ble-error.js +47 -0
  6. package/build/cjs/bluetooth/ble-error.js.map +1 -0
  7. package/build/cjs/bluetooth/connection.d.ts +137 -0
  8. package/build/cjs/{bluetooth.js → bluetooth/connection.js} +158 -106
  9. package/build/cjs/bluetooth/connection.js.map +1 -0
  10. package/build/cjs/{bluetooth.test.js → bluetooth/connection.test.js} +9 -9
  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} +11 -11
  14. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +38 -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 +6 -5
  18. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  19. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.d.ts +1 -1
  20. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  21. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.test.js +3 -3
  22. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  23. package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.d.ts +2 -2
  24. package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.js +7 -6
  25. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  26. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  27. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  28. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +15 -11
  29. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  30. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  31. package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
  32. package/build/cjs/bluetooth/index.d.ts +5 -0
  33. package/build/cjs/bluetooth/index.js +9 -0
  34. package/build/cjs/bluetooth/index.js.map +1 -0
  35. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +1 -1
  36. package/build/cjs/bluetooth/profile.js.map +1 -0
  37. package/build/cjs/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
  38. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
  39. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  40. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  41. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
  42. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  43. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  44. package/build/cjs/bluetooth/services/device-information-service.js +29 -0
  45. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  46. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  47. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  48. package/build/{esm → cjs/bluetooth/services}/led-service.d.ts +2 -3
  49. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
  50. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  51. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  52. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
  53. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  54. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  55. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  56. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  57. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  58. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
  59. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  60. package/build/cjs/board-id.d.ts +1 -1
  61. package/build/cjs/board-id.js.map +1 -1
  62. package/build/cjs/device.d.ts +145 -123
  63. package/build/cjs/device.js +47 -128
  64. package/build/cjs/device.js.map +1 -1
  65. package/build/cjs/events.d.ts +8 -108
  66. package/build/cjs/events.js +27 -88
  67. package/build/cjs/events.js.map +1 -1
  68. package/build/cjs/events.test.js +54 -48
  69. package/build/cjs/events.test.js.map +1 -1
  70. package/build/cjs/hex-util.d.ts +1 -0
  71. package/build/cjs/hex-util.js +15 -0
  72. package/build/cjs/hex-util.js.map +1 -0
  73. package/build/cjs/index.d.ts +7 -17
  74. package/build/cjs/index.js +6 -28
  75. package/build/cjs/index.js.map +1 -1
  76. package/build/cjs/radio-bridge/connection.d.ts +52 -0
  77. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +69 -37
  78. package/build/cjs/radio-bridge/connection.js.map +1 -0
  79. package/build/cjs/radio-bridge/index.d.ts +4 -0
  80. package/build/cjs/radio-bridge/index.js +9 -0
  81. package/build/cjs/radio-bridge/index.js.map +1 -0
  82. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  83. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  84. package/build/cjs/service-events.d.ts +43 -14
  85. package/build/cjs/service-events.js +6 -36
  86. package/build/cjs/service-events.js.map +1 -1
  87. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -2
  88. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +7 -15
  89. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  90. package/build/cjs/universal-hex/index.d.ts +4 -0
  91. package/build/cjs/universal-hex/index.js +9 -0
  92. package/build/cjs/universal-hex/index.js.map +1 -0
  93. package/build/cjs/usb/arm-debug.d.ts +137 -0
  94. package/build/cjs/usb/arm-debug.js +414 -0
  95. package/build/cjs/usb/arm-debug.js.map +1 -0
  96. package/build/cjs/usb/arm-debug.test.js +333 -0
  97. package/build/cjs/usb/arm-debug.test.js.map +1 -0
  98. package/build/{esm → cjs/usb}/board-serial-info.d.ts +2 -1
  99. package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  100. package/build/cjs/usb/board-serial-info.js.map +1 -0
  101. package/build/cjs/{board-serial-info.test.js → usb/board-serial-info.test.js} +2 -4
  102. package/build/cjs/usb/board-serial-info.test.js.map +1 -0
  103. package/build/cjs/usb/cdc-saturation.d.ts +36 -0
  104. package/build/cjs/usb/cdc-saturation.js +151 -0
  105. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  106. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  107. package/build/cjs/usb/cmsis-dap.js +349 -0
  108. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  109. package/build/cjs/usb/cmsis-dap.test.js +350 -0
  110. package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
  111. package/build/cjs/usb/connection.d.ts +96 -0
  112. package/build/cjs/{usb.js → usb/connection.js} +257 -173
  113. package/build/cjs/usb/connection.js.map +1 -0
  114. package/build/cjs/{usb.test.js → usb/connection.test.js} +52 -42
  115. package/build/cjs/usb/connection.test.js.map +1 -0
  116. package/build/cjs/usb/cortex-m.d.ts +72 -0
  117. package/build/cjs/usb/cortex-m.js +165 -0
  118. package/build/cjs/usb/cortex-m.js.map +1 -0
  119. package/build/cjs/usb/cortex-m.test.js +217 -0
  120. package/build/cjs/usb/cortex-m.test.js.map +1 -0
  121. package/build/cjs/usb/daplink.d.ts +69 -0
  122. package/build/cjs/usb/daplink.js +238 -0
  123. package/build/cjs/usb/daplink.js.map +1 -0
  124. package/build/cjs/usb/daplink.test.js +290 -0
  125. package/build/cjs/usb/daplink.test.js.map +1 -0
  126. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  127. package/build/cjs/usb/device-wrapper.js +102 -0
  128. package/build/cjs/usb/device-wrapper.js.map +1 -0
  129. package/build/cjs/usb/index.d.ts +5 -0
  130. package/build/cjs/usb/index.js +10 -0
  131. package/build/cjs/usb/index.js.map +1 -0
  132. package/build/{esm/usb-partial-flashing-utils.d.ts → cjs/usb/partial-flashing-utils.d.ts} +6 -9
  133. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  134. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  135. package/build/{esm/usb-partial-flashing.d.ts → cjs/usb/partial-flashing.d.ts} +37 -11
  136. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -135
  137. package/build/cjs/usb/partial-flashing.js.map +1 -0
  138. package/build/cjs/usb/promise-queue.js.map +1 -0
  139. package/build/cjs/usb/promise-queue.test.js.map +1 -0
  140. package/build/cjs/usb/serial-events.d.ts +16 -0
  141. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  142. package/build/cjs/usb/serial-events.js.map +1 -0
  143. package/build/cjs/usb/transport.d.ts +42 -0
  144. package/build/cjs/usb/transport.js +155 -0
  145. package/build/cjs/usb/transport.js.map +1 -0
  146. package/build/esm/async-util.d.ts +3 -1
  147. package/build/esm/async-util.js +5 -1
  148. package/build/esm/async-util.js.map +1 -1
  149. package/build/esm/bluetooth/ble-error.d.ts +10 -0
  150. package/build/esm/bluetooth/ble-error.js +42 -0
  151. package/build/esm/bluetooth/ble-error.js.map +1 -0
  152. package/build/esm/bluetooth/connection.d.ts +137 -0
  153. package/build/esm/{bluetooth.js → bluetooth/connection.js} +152 -100
  154. package/build/esm/bluetooth/connection.js.map +1 -0
  155. package/build/esm/{bluetooth.test.js → bluetooth/connection.test.js} +9 -9
  156. package/build/esm/bluetooth/connection.test.js.map +1 -0
  157. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  158. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +11 -11
  159. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +35 -39
  160. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  161. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.d.ts +2 -2
  162. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  163. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  164. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.d.ts +1 -1
  165. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  166. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.test.js +2 -2
  167. package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  168. package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.d.ts +2 -2
  169. package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.js +6 -5
  170. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  171. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  172. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  173. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +15 -11
  174. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  175. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  176. package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
  177. package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
  178. package/build/esm/bluetooth/index.d.ts +5 -0
  179. package/build/esm/bluetooth/index.js +5 -0
  180. package/build/esm/bluetooth/index.js.map +1 -0
  181. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +1 -1
  182. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  183. package/build/esm/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
  184. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
  185. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  186. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  187. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
  188. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  189. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  190. package/build/esm/bluetooth/services/device-information-service.js +25 -0
  191. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  192. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  193. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  194. package/build/{cjs → esm/bluetooth/services}/led-service.d.ts +2 -3
  195. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
  196. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  197. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  198. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
  199. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  200. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  201. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  202. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  203. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  204. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
  205. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  206. package/build/esm/board-id.d.ts +1 -1
  207. package/build/esm/board-id.js.map +1 -1
  208. package/build/esm/device.d.ts +145 -123
  209. package/build/esm/device.js +45 -122
  210. package/build/esm/device.js.map +1 -1
  211. package/build/esm/events.d.ts +8 -108
  212. package/build/esm/events.js +26 -86
  213. package/build/esm/events.js.map +1 -1
  214. package/build/esm/events.test.js +55 -49
  215. package/build/esm/events.test.js.map +1 -1
  216. package/build/esm/hex-util.d.ts +1 -0
  217. package/build/esm/hex-util.js +11 -0
  218. package/build/esm/hex-util.js.map +1 -0
  219. package/build/esm/index.d.ts +7 -17
  220. package/build/esm/index.js +6 -11
  221. package/build/esm/index.js.map +1 -1
  222. package/build/esm/radio-bridge/connection.d.ts +52 -0
  223. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +69 -37
  224. package/build/esm/radio-bridge/connection.js.map +1 -0
  225. package/build/esm/radio-bridge/index.d.ts +4 -0
  226. package/build/esm/radio-bridge/index.js +5 -0
  227. package/build/esm/radio-bridge/index.js.map +1 -0
  228. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  229. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  230. package/build/esm/service-events.d.ts +43 -14
  231. package/build/esm/service-events.js +5 -34
  232. package/build/esm/service-events.js.map +1 -1
  233. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -2
  234. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -13
  235. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  236. package/build/esm/universal-hex/index.d.ts +4 -0
  237. package/build/esm/universal-hex/index.js +5 -0
  238. package/build/esm/universal-hex/index.js.map +1 -0
  239. package/build/esm/usb/arm-debug.d.ts +137 -0
  240. package/build/esm/usb/arm-debug.js +409 -0
  241. package/build/esm/usb/arm-debug.js.map +1 -0
  242. package/build/esm/usb/arm-debug.test.d.ts +1 -0
  243. package/build/esm/usb/arm-debug.test.js +331 -0
  244. package/build/esm/usb/arm-debug.test.js.map +1 -0
  245. package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
  246. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  247. package/build/esm/usb/board-serial-info.js.map +1 -0
  248. package/build/esm/usb/board-serial-info.test.d.ts +1 -0
  249. package/build/esm/{board-serial-info.test.js → usb/board-serial-info.test.js} +2 -4
  250. package/build/esm/usb/board-serial-info.test.js.map +1 -0
  251. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  252. package/build/esm/usb/cdc-saturation.js +148 -0
  253. package/build/esm/usb/cdc-saturation.js.map +1 -0
  254. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  255. package/build/esm/usb/cmsis-dap.js +342 -0
  256. package/build/esm/usb/cmsis-dap.js.map +1 -0
  257. package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
  258. package/build/esm/usb/cmsis-dap.test.js +348 -0
  259. package/build/esm/usb/cmsis-dap.test.js.map +1 -0
  260. package/build/esm/usb/connection.d.ts +96 -0
  261. package/build/esm/{usb.js → usb/connection.js} +253 -168
  262. package/build/esm/usb/connection.js.map +1 -0
  263. package/build/esm/usb/connection.test.d.ts +1 -0
  264. package/build/esm/{usb.test.js → usb/connection.test.js} +47 -37
  265. package/build/esm/usb/connection.test.js.map +1 -0
  266. package/build/esm/usb/cortex-m.d.ts +72 -0
  267. package/build/esm/usb/cortex-m.js +161 -0
  268. package/build/esm/usb/cortex-m.js.map +1 -0
  269. package/build/esm/usb/cortex-m.test.d.ts +1 -0
  270. package/build/esm/usb/cortex-m.test.js +215 -0
  271. package/build/esm/usb/cortex-m.test.js.map +1 -0
  272. package/build/esm/usb/daplink.d.ts +69 -0
  273. package/build/esm/usb/daplink.js +231 -0
  274. package/build/esm/usb/daplink.js.map +1 -0
  275. package/build/esm/usb/daplink.test.d.ts +1 -0
  276. package/build/esm/usb/daplink.test.js +288 -0
  277. package/build/esm/usb/daplink.test.js.map +1 -0
  278. package/build/esm/usb/device-wrapper.d.ts +34 -0
  279. package/build/esm/usb/device-wrapper.js +98 -0
  280. package/build/esm/usb/device-wrapper.js.map +1 -0
  281. package/build/esm/usb/index.d.ts +5 -0
  282. package/build/esm/usb/index.js +5 -0
  283. package/build/esm/usb/index.js.map +1 -0
  284. package/build/{cjs/usb-partial-flashing-utils.d.ts → esm/usb/partial-flashing-utils.d.ts} +6 -9
  285. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  286. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  287. package/build/{cjs/usb-partial-flashing.d.ts → esm/usb/partial-flashing.d.ts} +37 -11
  288. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -111
  289. package/build/esm/usb/partial-flashing.js.map +1 -0
  290. package/build/esm/usb/promise-queue.js.map +1 -0
  291. package/build/esm/usb/promise-queue.test.d.ts +1 -0
  292. package/build/esm/usb/promise-queue.test.js.map +1 -0
  293. package/build/esm/usb/serial-events.d.ts +16 -0
  294. package/build/esm/usb/serial-events.js +2 -0
  295. package/build/esm/usb/serial-events.js.map +1 -0
  296. package/build/esm/usb/transport.d.ts +42 -0
  297. package/build/esm/usb/transport.js +151 -0
  298. package/build/esm/usb/transport.js.map +1 -0
  299. package/package.json +43 -2
  300. package/build/cjs/accelerometer-service.js.map +0 -1
  301. package/build/cjs/accelerometer.d.ts +0 -9
  302. package/build/cjs/accelerometer.js +0 -16
  303. package/build/cjs/accelerometer.js.map +0 -1
  304. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  305. package/build/cjs/bluetooth.d.ts +0 -114
  306. package/build/cjs/bluetooth.js.map +0 -1
  307. package/build/cjs/bluetooth.test.js.map +0 -1
  308. package/build/cjs/board-serial-info.js.map +0 -1
  309. package/build/cjs/board-serial-info.test.js.map +0 -1
  310. package/build/cjs/button-service.js.map +0 -1
  311. package/build/cjs/buttons.d.ts +0 -10
  312. package/build/cjs/buttons.js +0 -22
  313. package/build/cjs/buttons.js.map +0 -1
  314. package/build/cjs/constants.d.ts +0 -48
  315. package/build/cjs/constants.js +0 -73
  316. package/build/cjs/constants.js.map +0 -1
  317. package/build/cjs/device-bond-state.js.map +0 -1
  318. package/build/cjs/device-information-service.js +0 -34
  319. package/build/cjs/device-information-service.js.map +0 -1
  320. package/build/cjs/dfu-service.js.map +0 -1
  321. package/build/cjs/flashing/flashing-full.js.map +0 -1
  322. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  323. package/build/cjs/flashing/flashing-makecode.test.js.map +0 -1
  324. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  325. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  326. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  327. package/build/cjs/flashing/zip.js.map +0 -1
  328. package/build/cjs/flashing/zip.test.js.map +0 -1
  329. package/build/cjs/hex-flash-data-source.js.map +0 -1
  330. package/build/cjs/led-service.js.map +0 -1
  331. package/build/cjs/led.d.ts +0 -6
  332. package/build/cjs/led.js.map +0 -1
  333. package/build/cjs/magnetometer-service.js.map +0 -1
  334. package/build/cjs/magnetometer.d.ts +0 -9
  335. package/build/cjs/magnetometer.js +0 -16
  336. package/build/cjs/magnetometer.js.map +0 -1
  337. package/build/cjs/partial-flashing-service.js.map +0 -1
  338. package/build/cjs/promise-queue.js.map +0 -1
  339. package/build/cjs/promise-queue.test.js.map +0 -1
  340. package/build/cjs/serial-events.d.ts +0 -20
  341. package/build/cjs/serial-events.js +0 -69
  342. package/build/cjs/serial-events.js.map +0 -1
  343. package/build/cjs/uart-service.js.map +0 -1
  344. package/build/cjs/uart.d.ts +0 -4
  345. package/build/cjs/uart.js +0 -16
  346. package/build/cjs/uart.js.map +0 -1
  347. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  348. package/build/cjs/usb-device-wrapper.js +0 -437
  349. package/build/cjs/usb-device-wrapper.js.map +0 -1
  350. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  351. package/build/cjs/usb-partial-flashing.js.map +0 -1
  352. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  353. package/build/cjs/usb-radio-bridge.js.map +0 -1
  354. package/build/cjs/usb-serial-protocol.js.map +0 -1
  355. package/build/cjs/usb.d.ts +0 -66
  356. package/build/cjs/usb.js.map +0 -1
  357. package/build/cjs/usb.test.js.map +0 -1
  358. package/build/esm/accelerometer-service.js.map +0 -1
  359. package/build/esm/accelerometer.d.ts +0 -9
  360. package/build/esm/accelerometer.js +0 -12
  361. package/build/esm/accelerometer.js.map +0 -1
  362. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  363. package/build/esm/bluetooth-profile.js.map +0 -1
  364. package/build/esm/bluetooth.d.ts +0 -114
  365. package/build/esm/bluetooth.js.map +0 -1
  366. package/build/esm/bluetooth.test.js.map +0 -1
  367. package/build/esm/board-serial-info.js.map +0 -1
  368. package/build/esm/board-serial-info.test.js.map +0 -1
  369. package/build/esm/button-service.js.map +0 -1
  370. package/build/esm/buttons.d.ts +0 -10
  371. package/build/esm/buttons.js +0 -18
  372. package/build/esm/buttons.js.map +0 -1
  373. package/build/esm/constants.d.ts +0 -48
  374. package/build/esm/constants.js +0 -70
  375. package/build/esm/constants.js.map +0 -1
  376. package/build/esm/device-bond-state.js.map +0 -1
  377. package/build/esm/device-information-service.js +0 -30
  378. package/build/esm/device-information-service.js.map +0 -1
  379. package/build/esm/dfu-service.js.map +0 -1
  380. package/build/esm/flashing/flashing-full.js.map +0 -1
  381. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  382. package/build/esm/flashing/flashing-makecode.test.js.map +0 -1
  383. package/build/esm/flashing/flashing-partial.js.map +0 -1
  384. package/build/esm/flashing/flashing-v1.js.map +0 -1
  385. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  386. package/build/esm/flashing/zip.js.map +0 -1
  387. package/build/esm/flashing/zip.test.js.map +0 -1
  388. package/build/esm/hex-flash-data-source.js.map +0 -1
  389. package/build/esm/led-service.js.map +0 -1
  390. package/build/esm/led.d.ts +0 -6
  391. package/build/esm/led.js +0 -2
  392. package/build/esm/led.js.map +0 -1
  393. package/build/esm/magnetometer-service.js.map +0 -1
  394. package/build/esm/magnetometer.d.ts +0 -9
  395. package/build/esm/magnetometer.js +0 -12
  396. package/build/esm/magnetometer.js.map +0 -1
  397. package/build/esm/partial-flashing-service.js.map +0 -1
  398. package/build/esm/promise-queue.js.map +0 -1
  399. package/build/esm/promise-queue.test.js.map +0 -1
  400. package/build/esm/serial-events.d.ts +0 -20
  401. package/build/esm/serial-events.js +0 -61
  402. package/build/esm/serial-events.js.map +0 -1
  403. package/build/esm/uart-service.js.map +0 -1
  404. package/build/esm/uart.d.ts +0 -4
  405. package/build/esm/uart.js +0 -12
  406. package/build/esm/uart.js.map +0 -1
  407. package/build/esm/usb-device-wrapper.d.ts +0 -47
  408. package/build/esm/usb-device-wrapper.js +0 -410
  409. package/build/esm/usb-device-wrapper.js.map +0 -1
  410. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  411. package/build/esm/usb-partial-flashing.js.map +0 -1
  412. package/build/esm/usb-radio-bridge.d.ts +0 -24
  413. package/build/esm/usb-radio-bridge.js.map +0 -1
  414. package/build/esm/usb-serial-protocol.js.map +0 -1
  415. package/build/esm/usb.d.ts +0 -66
  416. package/build/esm/usb.js.map +0 -1
  417. package/build/esm/usb.test.js.map +0 -1
  418. /package/build/cjs/{bluetooth.test.d.ts → bluetooth/connection.test.d.ts} +0 -0
  419. /package/build/cjs/{device-bond-state.d.ts → bluetooth/device-bond-state.d.ts} +0 -0
  420. /package/build/cjs/{device-bond-state.js → bluetooth/device-bond-state.js} +0 -0
  421. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +0 -0
  422. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.test.d.ts +0 -0
  423. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  424. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  425. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  426. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  427. /package/build/cjs/{flashing → bluetooth/flashing}/zip.test.d.ts +0 -0
  428. /package/build/cjs/{flashing → bluetooth/flashing}/zip.test.js +0 -0
  429. /package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +0 -0
  430. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  431. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  432. /package/build/cjs/{board-serial-info.test.d.ts → usb/arm-debug.test.d.ts} +0 -0
  433. /package/build/{esm → cjs/usb}/board-serial-info.test.d.ts +0 -0
  434. /package/build/cjs/{promise-queue.test.d.ts → usb/cmsis-dap.test.d.ts} +0 -0
  435. /package/build/cjs/{usb.test.d.ts → usb/connection.test.d.ts} +0 -0
  436. /package/build/{esm/bluetooth.test.d.ts → cjs/usb/cortex-m.test.d.ts} +0 -0
  437. /package/build/{esm/flashing/flashing-makecode.test.d.ts → cjs/usb/daplink.test.d.ts} +0 -0
  438. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  439. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  440. /package/build/{esm → cjs/usb}/promise-queue.test.d.ts +0 -0
  441. /package/build/cjs/{promise-queue.test.js → usb/promise-queue.test.js} +0 -0
  442. /package/build/esm/{flashing/zip.test.d.ts → bluetooth/connection.test.d.ts} +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-makecode.js +0 -0
  446. /package/build/esm/{usb.test.d.ts → bluetooth/flashing/flashing-makecode.test.d.ts} +0 -0
  447. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  448. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  449. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  450. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  451. /package/build/esm/{flashing → bluetooth/flashing}/zip.test.js +0 -0
  452. /package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +0 -0
  453. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  454. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  455. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  456. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
  457. /package/build/esm/{promise-queue.test.js → usb/promise-queue.test.js} +0 -0
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const cmsis_dap_js_1 = require("./cmsis-dap.js");
5
+ const cortex_m_js_1 = require("./cortex-m.js");
6
+ // ---------------------------------------------------------------------------
7
+ // Mock ADI
8
+ // ---------------------------------------------------------------------------
9
+ function createMockAdi() {
10
+ const mem32 = new Map();
11
+ const writtenMem32 = [];
12
+ const mockDap = {
13
+ isOpen: true,
14
+ blockSize: 59,
15
+ send: vitest_1.vi.fn(),
16
+ clearAbort: vitest_1.vi.fn(),
17
+ swjSequence: vitest_1.vi.fn(),
18
+ swjClock: vitest_1.vi.fn(),
19
+ connect: vitest_1.vi.fn(),
20
+ disconnect: vitest_1.vi.fn(),
21
+ configureTransfer: vitest_1.vi.fn(),
22
+ open: vitest_1.vi.fn(),
23
+ close: vitest_1.vi.fn(),
24
+ transfer: vitest_1.vi.fn(),
25
+ transferBlockRead: vitest_1.vi.fn(),
26
+ transferBlockWrite: vitest_1.vi.fn(),
27
+ drainStaleResponses: vitest_1.vi.fn(),
28
+ };
29
+ const mock = {
30
+ dap: mockDap,
31
+ get isOpen() {
32
+ return true;
33
+ },
34
+ mem32,
35
+ writtenMem32,
36
+ writtenBlocks: [],
37
+ transferSequenceCalls: [],
38
+ readMem32: vitest_1.vi.fn(async (address) => {
39
+ return mem32.get(address) ?? 0;
40
+ }),
41
+ writeMem32: vitest_1.vi.fn(async (address, value) => {
42
+ writtenMem32.push({ address, value });
43
+ mem32.set(address, value);
44
+ }),
45
+ readMem32Ops: vitest_1.vi.fn((address) => [
46
+ { port: 0, mode: 0x02, register: 0, value: address },
47
+ ]),
48
+ writeMem32Ops: vitest_1.vi.fn((address, value) => [
49
+ { port: 0, mode: 0x00, register: 0, value: address },
50
+ { port: 0, mode: 0x00, register: 0, value },
51
+ ]),
52
+ readBlock: vitest_1.vi.fn(),
53
+ writeBlock: vitest_1.vi.fn(async (address, values) => {
54
+ mock.writtenBlocks.push({ address, values });
55
+ }),
56
+ transferSequence: vitest_1.vi.fn(async (groups) => {
57
+ mock.transferSequenceCalls.push(groups);
58
+ // Return S_REGRDY for readCoreRegister/writeCoreRegister
59
+ return new Uint32Array([cortex_m_js_1.S_REGRDY, 0x42]);
60
+ }),
61
+ resetState: vitest_1.vi.fn(),
62
+ connect: vitest_1.vi.fn(),
63
+ disconnect: vitest_1.vi.fn(),
64
+ reinit: vitest_1.vi.fn(),
65
+ };
66
+ return mock;
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Tests
70
+ // ---------------------------------------------------------------------------
71
+ (0, vitest_1.describe)("CortexM", () => {
72
+ let adi;
73
+ let cortex;
74
+ (0, vitest_1.beforeEach)(() => {
75
+ adi = createMockAdi();
76
+ cortex = new cortex_m_js_1.CortexM(adi);
77
+ });
78
+ (0, vitest_1.describe)("isHalted", () => {
79
+ (0, vitest_1.it)("returns true when S_HALT is set", async () => {
80
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT);
81
+ (0, vitest_1.expect)(await cortex.isHalted()).toBe(true);
82
+ });
83
+ (0, vitest_1.it)("returns false when S_HALT is not set", async () => {
84
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0);
85
+ (0, vitest_1.expect)(await cortex.isHalted()).toBe(false);
86
+ });
87
+ });
88
+ (0, vitest_1.describe)("halt", () => {
89
+ (0, vitest_1.it)("writes halt request to DHCSR", async () => {
90
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0); // not halted initially
91
+ // After the write, simulate halted state for the wait
92
+ vitest_1.vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
93
+ adi.writtenMem32.push({ address: addr, value: val });
94
+ if (addr === cortex_m_js_1.DHCSR)
95
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT);
96
+ });
97
+ await cortex.halt();
98
+ const dhcsrWrite = adi.writtenMem32.find((w) => w.address === cortex_m_js_1.DHCSR);
99
+ (0, vitest_1.expect)(dhcsrWrite).toBeDefined();
100
+ // Should have C_DEBUGEN and C_HALT bits set with DBGKEY
101
+ (0, vitest_1.expect)(dhcsrWrite.value & 0x03).toBe(0x03);
102
+ });
103
+ (0, vitest_1.it)("skips if already halted", async () => {
104
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT);
105
+ await cortex.halt();
106
+ (0, vitest_1.expect)(adi.writeMem32).not.toHaveBeenCalled();
107
+ });
108
+ });
109
+ (0, vitest_1.describe)("resume", () => {
110
+ (0, vitest_1.it)("clears halt and enables debug", async () => {
111
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT); // halted initially
112
+ // After writes, simulate running state
113
+ vitest_1.vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
114
+ adi.writtenMem32.push({ address: addr, value: val });
115
+ if (addr === cortex_m_js_1.DHCSR)
116
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0); // now running
117
+ });
118
+ await cortex.resume();
119
+ // Should have written to DFSR and DHCSR
120
+ (0, vitest_1.expect)(adi.writtenMem32.length).toBeGreaterThanOrEqual(2);
121
+ });
122
+ (0, vitest_1.it)("skips if not halted", async () => {
123
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0);
124
+ await cortex.resume();
125
+ (0, vitest_1.expect)(adi.writeMem32).not.toHaveBeenCalled();
126
+ });
127
+ });
128
+ (0, vitest_1.describe)("readCoreRegister", () => {
129
+ (0, vitest_1.it)("reads register via DCRSR/DCRDR sequence", async () => {
130
+ const value = await cortex.readCoreRegister(cortex_m_js_1.CoreRegister.PC);
131
+ (0, vitest_1.expect)(adi.transferSequence).toHaveBeenCalled();
132
+ const groups = adi.transferSequenceCalls[0];
133
+ // First group: write DCRSR with register index
134
+ const dcrsrOps = groups[0];
135
+ (0, vitest_1.expect)(dcrsrOps.some((op) => op.value === cortex_m_js_1.CoreRegister.PC)).toBe(true);
136
+ // Return value comes from the result
137
+ (0, vitest_1.expect)(value).toBe(0x42);
138
+ });
139
+ (0, vitest_1.it)("throws when S_REGRDY is not set", async () => {
140
+ vitest_1.vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0, 0x42]));
141
+ await (0, vitest_1.expect)(cortex.readCoreRegister(cortex_m_js_1.CoreRegister.PC)).rejects.toThrow(cmsis_dap_js_1.DapError);
142
+ });
143
+ });
144
+ (0, vitest_1.describe)("writeCoreRegister", () => {
145
+ (0, vitest_1.it)("writes register via DCRDR/DCRSR sequence", async () => {
146
+ await cortex.writeCoreRegister(cortex_m_js_1.CoreRegister.SP, 0x20001000);
147
+ (0, vitest_1.expect)(adi.transferSequence).toHaveBeenCalled();
148
+ const groups = adi.transferSequenceCalls[0];
149
+ // First group: write DCRDR with value
150
+ const dcrdOps = groups[0];
151
+ (0, vitest_1.expect)(dcrdOps.some((op) => op.value === 0x20001000)).toBe(true);
152
+ // Second group: write DCRSR with register | REGWnR
153
+ const dcrsrOps = groups[1];
154
+ (0, vitest_1.expect)(dcrsrOps.some((op) => op.value === (cortex_m_js_1.CoreRegister.SP | cortex_m_js_1.REGWnR))).toBe(true);
155
+ });
156
+ (0, vitest_1.it)("throws when S_REGRDY is not set", async () => {
157
+ vitest_1.vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0]));
158
+ await (0, vitest_1.expect)(cortex.writeCoreRegister(cortex_m_js_1.CoreRegister.SP, 0x20001000)).rejects.toThrow(cmsis_dap_js_1.DapError);
159
+ });
160
+ });
161
+ (0, vitest_1.describe)("softwareReset", () => {
162
+ (0, vitest_1.it)("writes reset request to NVIC_AIRCR", async () => {
163
+ // After reset, S_RESET_ST should clear
164
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0);
165
+ await cortex.softwareReset();
166
+ const aircrWrite = adi.writtenMem32.find((w) => w.address === cortex_m_js_1.NVIC_AIRCR);
167
+ (0, vitest_1.expect)(aircrWrite).toBeDefined();
168
+ });
169
+ });
170
+ (0, vitest_1.describe)("reset", () => {
171
+ (0, vitest_1.it)("without halt: just does software reset", async () => {
172
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0);
173
+ await cortex.reset(false);
174
+ const aircrWrite = adi.writtenMem32.find((w) => w.address === cortex_m_js_1.NVIC_AIRCR);
175
+ (0, vitest_1.expect)(aircrWrite).toBeDefined();
176
+ // No DEMCR writes for non-halt reset
177
+ const demcrWrite = adi.writtenMem32.find((w) => w.address === cortex_m_js_1.DEMCR);
178
+ (0, vitest_1.expect)(demcrWrite).toBeUndefined();
179
+ });
180
+ (0, vitest_1.it)("with halt: sets vector catch, resets, waits for halt, restores DEMCR", async () => {
181
+ // Start halted so halt() is a no-op
182
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT);
183
+ adi.mem32.set(cortex_m_js_1.DEMCR, 0);
184
+ await cortex.reset(true);
185
+ // Should have written DEMCR with VC_CORERESET
186
+ const demcrWrites = adi.writtenMem32.filter((w) => w.address === cortex_m_js_1.DEMCR);
187
+ (0, vitest_1.expect)(demcrWrites.length).toBeGreaterThanOrEqual(2);
188
+ // First write enables VC_CORERESET (bit 0)
189
+ (0, vitest_1.expect)(demcrWrites[0].value & 1).toBe(1);
190
+ // Last write restores original DEMCR (0)
191
+ (0, vitest_1.expect)(demcrWrites[demcrWrites.length - 1].value).toBe(0);
192
+ });
193
+ });
194
+ (0, vitest_1.describe)("execute", () => {
195
+ (0, vitest_1.it)("uploads code, sets registers, resumes, and waits for halt", async () => {
196
+ // Start not halted, then halt when halt() is called
197
+ adi.mem32.set(cortex_m_js_1.DHCSR, 0);
198
+ vitest_1.vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
199
+ adi.writtenMem32.push({ address: addr, value: val });
200
+ if (addr === cortex_m_js_1.DHCSR)
201
+ adi.mem32.set(cortex_m_js_1.DHCSR, cortex_m_js_1.S_HALT);
202
+ });
203
+ const code = new Uint32Array([0xbe00be00, 0x12345678]);
204
+ await cortex.execute(0x20000000, code, 0x20001000, 0x20000005, 0x20000001);
205
+ // Code uploaded via writeBlock
206
+ (0, vitest_1.expect)(adi.writeBlock).toHaveBeenCalledWith(0x20000000, code);
207
+ // Core registers set via transferSequence (PC, LR, SP, PSR = 4 writes)
208
+ (0, vitest_1.expect)(adi.transferSequence).toHaveBeenCalled();
209
+ });
210
+ (0, vitest_1.it)("throws if too many general purpose registers", async () => {
211
+ const code = new Uint32Array([0]);
212
+ const tooMany = new Array(13).fill(0);
213
+ await (0, vitest_1.expect)(cortex.execute(0x20000000, code, 0, 0, 0, ...tooMany)).rejects.toThrow("Only 12 general purpose registers");
214
+ });
215
+ });
216
+ });
217
+ //# 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,238 @@
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
+ * See arm-debug.ts for the full dapjs license.
12
+ *
13
+ * DAPLink serial and flash access via CMSIS-DAP vendor commands.
14
+ *
15
+ * DAPLink is the interface firmware running on the micro:bit's debug chip
16
+ * (KL27). It extends the standard CMSIS-DAP protocol with vendor-specific
17
+ * commands (0x80+) for:
18
+ *
19
+ * - UART serial pass-through (DapLinkSerial): reading/writing serial data
20
+ * to the target micro:bit's UART, with configurable baud rate and
21
+ * polling-based read loop.
22
+ *
23
+ * - Hex-file flash streaming (dapLinkFlash): streaming Intel HEX data to
24
+ * DAPLink which handles erasing, programming, and verifying flash pages.
25
+ * This is the "full flash" path — as opposed to partial flashing which
26
+ * writes individual pages via SWD.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.DapLinkSerial = exports.DAPLINK_VENDOR_FLASH_WRITE = exports.DAPLINK_VENDOR_FLASH_CLOSE = exports.DAPLINK_VENDOR_FLASH_OPEN = exports.DAPLINK_VENDOR_FLASH_RESET = exports.DAPLINK_VENDOR_SERIAL_WRITE = exports.DAPLINK_VENDOR_SERIAL_READ = exports.DAPLINK_VENDOR_WRITE_SETTINGS = exports.DAPLINK_VENDOR_READ_SETTINGS = exports.DAPLINK_VENDOR_READ_UNIQUE_ID = void 0;
30
+ exports.dapLinkFlash = dapLinkFlash;
31
+ exports.readDaplinkUniqueId = readDaplinkUniqueId;
32
+ exports.readMem32WithRetry = readMem32WithRetry;
33
+ const cmsis_dap_js_1 = require("./cmsis-dap.js");
34
+ // ---------------------------------------------------------------------------
35
+ // Constants
36
+ // ---------------------------------------------------------------------------
37
+ // DAPLink vendor commands
38
+ // https://github.com/ARMmbed/DAPLink/blob/main/source/daplink/cmsis-dap/daplink_vendor_commands.h
39
+ /** Read the DAPLink unique ID (same string as USB serial number). */
40
+ exports.DAPLINK_VENDOR_READ_UNIQUE_ID = 0x80;
41
+ exports.DAPLINK_VENDOR_READ_SETTINGS = 0x81;
42
+ exports.DAPLINK_VENDOR_WRITE_SETTINGS = 0x82;
43
+ exports.DAPLINK_VENDOR_SERIAL_READ = 0x83;
44
+ exports.DAPLINK_VENDOR_SERIAL_WRITE = 0x84;
45
+ exports.DAPLINK_VENDOR_FLASH_RESET = 0x89;
46
+ exports.DAPLINK_VENDOR_FLASH_OPEN = 0x8a;
47
+ exports.DAPLINK_VENDOR_FLASH_CLOSE = 0x8b;
48
+ exports.DAPLINK_VENDOR_FLASH_WRITE = 0x8c;
49
+ // DAPLink stream error codes (error_t in DAPLink's error.h).
50
+ // stream_write returns these to indicate success variants.
51
+ const DAPLINK_ERROR_SUCCESS = 0;
52
+ const DAPLINK_ERROR_SUCCESS_DONE = 18;
53
+ // Default flash page size for DAPLink write chunks
54
+ const DAPLINK_FLASH_PAGE_SIZE = 62;
55
+ // ---------------------------------------------------------------------------
56
+ // DapLinkSerial — vendor commands for UART serial access
57
+ // ---------------------------------------------------------------------------
58
+ class DapLinkSerial {
59
+ constructor(dap, logging) {
60
+ Object.defineProperty(this, "dap", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: dap
65
+ });
66
+ Object.defineProperty(this, "logging", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: logging
71
+ });
72
+ Object.defineProperty(this, "polling", {
73
+ enumerable: true,
74
+ configurable: true,
75
+ writable: true,
76
+ value: false
77
+ });
78
+ }
79
+ async getBaudrate() {
80
+ const result = await this.dap.send(exports.DAPLINK_VENDOR_READ_SETTINGS);
81
+ return result.getUint32(1, true);
82
+ }
83
+ async setBaudrate(baudrate) {
84
+ await this.dap.send(exports.DAPLINK_VENDOR_WRITE_SETTINGS, new Uint8Array(new Uint32Array([baudrate]).buffer));
85
+ }
86
+ async read() {
87
+ const result = await this.dap.send(exports.DAPLINK_VENDOR_SERIAL_READ);
88
+ const length = result.getUint8(1);
89
+ if (length === 0)
90
+ return undefined;
91
+ const bytes = new Uint8Array(result.buffer, 2, length);
92
+ return new TextDecoder().decode(bytes);
93
+ }
94
+ async write(data) {
95
+ const encoded = new TextEncoder().encode(data);
96
+ const payload = new Uint8Array(encoded.length + 1);
97
+ payload[0] = encoded.length;
98
+ payload.set(encoded, 1);
99
+ await this.dap.send(exports.DAPLINK_VENDOR_SERIAL_WRITE, payload);
100
+ }
101
+ async startPolling(onData, serialDelay = 100) {
102
+ this.polling = true;
103
+ try {
104
+ while (this.polling) {
105
+ const data = await this.read();
106
+ if (data !== undefined && this.polling) {
107
+ onData(data);
108
+ }
109
+ await new Promise((resolve) => setTimeout(resolve, serialDelay));
110
+ }
111
+ }
112
+ finally {
113
+ this.polling = false;
114
+ }
115
+ }
116
+ stopPolling() {
117
+ this.polling = false;
118
+ }
119
+ /**
120
+ * Drain any buffered serial data from DAPLink's UART ring buffer.
121
+ * Reads and discards until empty.
122
+ */
123
+ async drain() {
124
+ let totalDrained = 0;
125
+ while (true) {
126
+ const data = await this.read();
127
+ if (!data)
128
+ break;
129
+ totalDrained += data.length;
130
+ }
131
+ if (totalDrained > 0) {
132
+ this.logging.log(`Drained ${totalDrained} bytes of stale serial data`);
133
+ }
134
+ }
135
+ }
136
+ exports.DapLinkSerial = DapLinkSerial;
137
+ // ---------------------------------------------------------------------------
138
+ // dapLinkFlash — vendor commands for flash streaming
139
+ // ---------------------------------------------------------------------------
140
+ async function dapLinkFlash(adi, buffer, onProgress) {
141
+ const { dap } = adi;
142
+ const arrayBuffer = buffer.buffer;
143
+ // Stream type 1 = Intel HEX (the only format we use).
144
+ // DAPLink vendor commands return an error_t status in byte 1:
145
+ // 0 = ERROR_SUCCESS, 18 = ERROR_SUCCESS_DONE, 19 = ERROR_SUCCESS_DONE_OR_CONTINUE
146
+ const openResult = await dap.send(exports.DAPLINK_VENDOR_FLASH_OPEN, new Uint8Array(new Uint32Array([1]).buffer));
147
+ if (openResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
148
+ throw new cmsis_dap_js_1.DapError(`Flash open error (status=${openResult.getUint8(1)})`);
149
+ }
150
+ try {
151
+ // We intentionally don't check FLASH_WRITE status for errors. V1
152
+ // micro:bit DAPLink reports ERROR_ERASE_SECTOR (16) late in the
153
+ // flash but the write still succeeds. dapjs never checked these.
154
+ let offset = 0;
155
+ while (offset < arrayBuffer.byteLength) {
156
+ const end = Math.min(arrayBuffer.byteLength, offset + DAPLINK_FLASH_PAGE_SIZE);
157
+ const page = arrayBuffer.slice(offset, end);
158
+ const data = new Uint8Array(page.byteLength + 1);
159
+ data[0] = page.byteLength;
160
+ data.set(new Uint8Array(page), 1);
161
+ const writeResult = await dap.send(exports.DAPLINK_VENDOR_FLASH_WRITE, data);
162
+ onProgress?.(offset / arrayBuffer.byteLength);
163
+ offset = end;
164
+ // DAPLink signals hex EOF with ERROR_SUCCESS_DONE (18).
165
+ if (writeResult.getUint8(1) === DAPLINK_ERROR_SUCCESS_DONE)
166
+ break;
167
+ }
168
+ onProgress?.(1.0);
169
+ const closeResult = await dap.send(exports.DAPLINK_VENDOR_FLASH_CLOSE);
170
+ if (closeResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
171
+ throw new cmsis_dap_js_1.DapError(`Flash close error (status=${closeResult.getUint8(1)})`);
172
+ }
173
+ await dap.send(exports.DAPLINK_VENDOR_FLASH_RESET);
174
+ }
175
+ catch (error) {
176
+ try {
177
+ await dap.send(exports.DAPLINK_VENDOR_FLASH_CLOSE);
178
+ }
179
+ catch {
180
+ /* ignore */
181
+ }
182
+ throw error;
183
+ }
184
+ finally {
185
+ adi.resetState();
186
+ }
187
+ }
188
+ // ---------------------------------------------------------------------------
189
+ // DAPLink utilities
190
+ // ---------------------------------------------------------------------------
191
+ /**
192
+ * Read the DAPLink unique ID via vendor command 0x80. Returns the same
193
+ * 48-char hex string as the USB serial number but isn't affected by
194
+ * browser anti-fingerprinting.
195
+ */
196
+ async function readDaplinkUniqueId(dap, logging) {
197
+ try {
198
+ const result = await dap.send(exports.DAPLINK_VENDOR_READ_UNIQUE_ID);
199
+ const length = result.getUint8(1);
200
+ if (length === 0) {
201
+ return undefined;
202
+ }
203
+ const bytes = new Uint8Array(result.buffer, 2, length);
204
+ return new TextDecoder().decode(bytes);
205
+ }
206
+ catch (e) {
207
+ logging.log(`Error reading DAPLink unique ID: ${e instanceof Error ? e.message : e}`);
208
+ return undefined;
209
+ }
210
+ }
211
+ /**
212
+ * Read a 32-bit word from memory, retrying on transfer errors.
213
+ * Useful for reads immediately after reset when the target may not
214
+ * be ready to respond.
215
+ */
216
+ async function readMem32WithRetry(adi, address, logging, maxRetries = 20, delayMs = 20) {
217
+ let lastError;
218
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
219
+ try {
220
+ const value = await adi.readMem32(address);
221
+ if (attempt > 0) {
222
+ logging.log(`readMem32(0x${address.toString(16)}) succeeded after ${attempt + 1} attempts`);
223
+ }
224
+ return value;
225
+ }
226
+ catch (e) {
227
+ if (e instanceof cmsis_dap_js_1.DapTransferError) {
228
+ lastError = e;
229
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
230
+ }
231
+ else {
232
+ throw e;
233
+ }
234
+ }
235
+ }
236
+ throw lastError;
237
+ }
238
+ //# sourceMappingURL=daplink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daplink.js","sourceRoot":"","sources":["../../../src/usb/daplink.ts"],"names":[],"mappings":"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"}