@microbit/microbit-connection 0.9.0-apps.alpha.2 → 0.9.0-apps.alpha.20

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 (504) 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/async-util.test.d.ts +1 -0
  5. package/build/cjs/async-util.test.js +20 -0
  6. package/build/cjs/async-util.test.js.map +1 -0
  7. package/build/cjs/availability.d.ts +14 -0
  8. package/build/cjs/availability.js +44 -0
  9. package/build/cjs/availability.js.map +1 -0
  10. package/build/cjs/bluetooth/ble-error.d.ts +10 -0
  11. package/build/cjs/bluetooth/ble-error.js +47 -0
  12. package/build/cjs/bluetooth/ble-error.js.map +1 -0
  13. package/build/cjs/bluetooth/connection.d.ts +378 -0
  14. package/build/cjs/bluetooth/connection.js +623 -0
  15. package/build/cjs/bluetooth/connection.js.map +1 -0
  16. package/build/cjs/bluetooth/connection.test.d.ts +1 -0
  17. package/build/cjs/bluetooth/connection.test.js +88 -0
  18. package/build/cjs/bluetooth/connection.test.js.map +1 -0
  19. package/build/cjs/bluetooth/device-bond-state.d.ts +14 -0
  20. package/build/cjs/bluetooth/device-bond-state.js +26 -0
  21. package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
  22. package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  23. package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +169 -101
  24. package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
  25. package/build/{esm → cjs/bluetooth}/flashing/flashing-full.d.ts +2 -2
  26. package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  27. package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
  28. package/build/cjs/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  29. package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  30. package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
  31. package/build/cjs/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  32. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js +253 -0
  33. package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  34. package/build/cjs/bluetooth/flashing/flashing-partial.d.ts +10 -0
  35. package/build/cjs/bluetooth/flashing/flashing-partial.js +145 -0
  36. package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
  37. package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
  38. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  39. package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  40. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
  41. package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
  42. package/build/cjs/bluetooth/flashing/zip.test.d.ts +1 -0
  43. package/build/cjs/bluetooth/flashing/zip.test.js +96 -0
  44. package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
  45. package/build/cjs/bluetooth/index.d.ts +5 -0
  46. package/build/cjs/bluetooth/index.js +9 -0
  47. package/build/cjs/bluetooth/index.js.map +1 -0
  48. package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  49. package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  50. package/build/cjs/bluetooth/profile.js.map +1 -0
  51. package/build/{esm → cjs/bluetooth/services}/accelerometer-service.d.ts +2 -3
  52. package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
  53. package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
  54. package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
  55. package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
  56. package/build/cjs/bluetooth/services/button-service.js.map +1 -0
  57. package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
  58. package/build/cjs/bluetooth/services/device-information-service.js +29 -0
  59. package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
  60. package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
  61. package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
  62. package/build/cjs/bluetooth/services/event-service.d.ts +48 -0
  63. package/build/cjs/bluetooth/services/event-service.js +273 -0
  64. package/build/cjs/bluetooth/services/event-service.js.map +1 -0
  65. package/build/cjs/bluetooth/services/event-service.test.d.ts +1 -0
  66. package/build/cjs/bluetooth/services/event-service.test.js +252 -0
  67. package/build/cjs/bluetooth/services/event-service.test.js.map +1 -0
  68. package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
  69. package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
  70. package/build/cjs/bluetooth/services/io-pin-service.js.map +1 -0
  71. package/build/cjs/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  72. package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
  73. package/build/cjs/bluetooth/services/led-service.js.map +1 -0
  74. package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  75. package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
  76. package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
  77. package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  78. package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
  79. package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
  80. package/build/cjs/bluetooth/services/temperature-service.d.ts +14 -0
  81. package/build/cjs/bluetooth/services/temperature-service.js +80 -0
  82. package/build/cjs/bluetooth/services/temperature-service.js.map +1 -0
  83. package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  84. package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
  85. package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
  86. package/build/cjs/board-id.d.ts +1 -1
  87. package/build/cjs/board-id.js.map +1 -1
  88. package/build/cjs/device.d.ts +214 -97
  89. package/build/cjs/device.js +57 -114
  90. package/build/cjs/device.js.map +1 -1
  91. package/build/cjs/events.d.ts +8 -108
  92. package/build/cjs/events.js +27 -88
  93. package/build/cjs/events.js.map +1 -1
  94. package/build/cjs/events.test.d.ts +1 -0
  95. package/build/cjs/events.test.js +115 -0
  96. package/build/cjs/events.test.js.map +1 -0
  97. package/build/cjs/hex-util.d.ts +1 -0
  98. package/build/cjs/hex-util.js +15 -0
  99. package/build/cjs/hex-util.js.map +1 -0
  100. package/build/cjs/index.d.ts +8 -16
  101. package/build/cjs/index.js +9 -28
  102. package/build/cjs/index.js.map +1 -1
  103. package/build/cjs/logging.js.map +1 -1
  104. package/build/cjs/microbit-events.d.ts +67 -0
  105. package/build/cjs/microbit-events.js +55 -0
  106. package/build/cjs/microbit-events.js.map +1 -0
  107. package/build/cjs/radio-bridge/connection.d.ts +52 -0
  108. package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  109. package/build/cjs/radio-bridge/connection.js.map +1 -0
  110. package/build/cjs/radio-bridge/index.d.ts +4 -0
  111. package/build/cjs/radio-bridge/index.js +9 -0
  112. package/build/cjs/radio-bridge/index.js.map +1 -0
  113. package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  114. package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
  115. package/build/cjs/service-events.d.ts +92 -15
  116. package/build/cjs/service-events.js +6 -36
  117. package/build/cjs/service-events.js.map +1 -1
  118. package/build/cjs/setupTests.js +8 -0
  119. package/build/cjs/setupTests.js.map +1 -1
  120. package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -1
  121. package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  122. package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
  123. package/build/cjs/universal-hex/index.d.ts +4 -0
  124. package/build/cjs/universal-hex/index.js +9 -0
  125. package/build/cjs/universal-hex/index.js.map +1 -0
  126. package/build/cjs/usb/arm-debug.d.ts +137 -0
  127. package/build/cjs/usb/arm-debug.js +414 -0
  128. package/build/cjs/usb/arm-debug.js.map +1 -0
  129. package/build/cjs/usb/arm-debug.test.d.ts +1 -0
  130. package/build/cjs/usb/arm-debug.test.js +333 -0
  131. package/build/cjs/usb/arm-debug.test.js.map +1 -0
  132. package/build/{esm → cjs/usb}/board-serial-info.d.ts +2 -1
  133. package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  134. package/build/cjs/usb/board-serial-info.js.map +1 -0
  135. package/build/cjs/usb/board-serial-info.test.d.ts +1 -0
  136. package/build/cjs/usb/board-serial-info.test.js +46 -0
  137. package/build/cjs/usb/board-serial-info.test.js.map +1 -0
  138. package/build/cjs/usb/cdc-saturation.d.ts +36 -0
  139. package/build/cjs/usb/cdc-saturation.js +151 -0
  140. package/build/cjs/usb/cdc-saturation.js.map +1 -0
  141. package/build/cjs/usb/cmsis-dap.d.ts +113 -0
  142. package/build/cjs/usb/cmsis-dap.js +349 -0
  143. package/build/cjs/usb/cmsis-dap.js.map +1 -0
  144. package/build/cjs/usb/cmsis-dap.test.d.ts +1 -0
  145. package/build/cjs/usb/cmsis-dap.test.js +350 -0
  146. package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
  147. package/build/cjs/usb/connection.d.ts +96 -0
  148. package/build/cjs/{usb.js → usb/connection.js} +274 -193
  149. package/build/cjs/usb/connection.js.map +1 -0
  150. package/build/cjs/usb/connection.test.d.ts +1 -0
  151. package/build/cjs/usb/connection.test.js +266 -0
  152. package/build/cjs/usb/connection.test.js.map +1 -0
  153. package/build/cjs/usb/cortex-m.d.ts +72 -0
  154. package/build/cjs/usb/cortex-m.js +165 -0
  155. package/build/cjs/usb/cortex-m.js.map +1 -0
  156. package/build/cjs/usb/cortex-m.test.d.ts +1 -0
  157. package/build/cjs/usb/cortex-m.test.js +217 -0
  158. package/build/cjs/usb/cortex-m.test.js.map +1 -0
  159. package/build/cjs/usb/daplink.d.ts +69 -0
  160. package/build/cjs/usb/daplink.js +238 -0
  161. package/build/cjs/usb/daplink.js.map +1 -0
  162. package/build/cjs/usb/daplink.test.d.ts +1 -0
  163. package/build/cjs/usb/daplink.test.js +290 -0
  164. package/build/cjs/usb/daplink.test.js.map +1 -0
  165. package/build/cjs/usb/device-wrapper.d.ts +34 -0
  166. package/build/cjs/usb/device-wrapper.js +102 -0
  167. package/build/cjs/usb/device-wrapper.js.map +1 -0
  168. package/build/cjs/usb/index.d.ts +5 -0
  169. package/build/cjs/usb/index.js +10 -0
  170. package/build/cjs/usb/index.js.map +1 -0
  171. package/build/cjs/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  172. package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
  173. package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
  174. package/build/cjs/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  175. package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -134
  176. package/build/cjs/usb/partial-flashing.js.map +1 -0
  177. package/build/cjs/usb/promise-queue.js.map +1 -0
  178. package/build/cjs/usb/promise-queue.test.d.ts +1 -0
  179. package/build/cjs/usb/promise-queue.test.js +68 -0
  180. package/build/cjs/usb/promise-queue.test.js.map +1 -0
  181. package/build/cjs/usb/serial-events.d.ts +16 -0
  182. package/build/cjs/{led.js → usb/serial-events.js} +1 -1
  183. package/build/cjs/usb/serial-events.js.map +1 -0
  184. package/build/cjs/usb/transport.d.ts +42 -0
  185. package/build/cjs/usb/transport.js +155 -0
  186. package/build/cjs/usb/transport.js.map +1 -0
  187. package/build/esm/async-util.d.ts +3 -1
  188. package/build/esm/async-util.js +5 -1
  189. package/build/esm/async-util.js.map +1 -1
  190. package/build/esm/async-util.test.d.ts +1 -0
  191. package/build/esm/async-util.test.js +18 -0
  192. package/build/esm/async-util.test.js.map +1 -0
  193. package/build/esm/availability.d.ts +14 -0
  194. package/build/esm/availability.js +40 -0
  195. package/build/esm/availability.js.map +1 -0
  196. package/build/esm/bluetooth/ble-error.d.ts +10 -0
  197. package/build/esm/bluetooth/ble-error.js +42 -0
  198. package/build/esm/bluetooth/ble-error.js.map +1 -0
  199. package/build/esm/bluetooth/connection.d.ts +378 -0
  200. package/build/esm/bluetooth/connection.js +593 -0
  201. package/build/esm/bluetooth/connection.js.map +1 -0
  202. package/build/esm/bluetooth/connection.test.d.ts +1 -0
  203. package/build/esm/bluetooth/connection.test.js +86 -0
  204. package/build/esm/bluetooth/connection.test.js.map +1 -0
  205. package/build/esm/bluetooth/device-bond-state.d.ts +14 -0
  206. package/build/esm/bluetooth/device-bond-state.js +22 -0
  207. package/build/esm/bluetooth/device-bond-state.js.map +1 -0
  208. package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +35 -19
  209. package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +167 -100
  210. package/build/esm/bluetooth/device-wrapper.js.map +1 -0
  211. package/build/{cjs → esm/bluetooth}/flashing/flashing-full.d.ts +2 -2
  212. package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
  213. package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
  214. package/build/esm/bluetooth/flashing/flashing-makecode.d.ts +10 -0
  215. package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
  216. package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
  217. package/build/esm/bluetooth/flashing/flashing-makecode.test.d.ts +1 -0
  218. package/build/esm/bluetooth/flashing/flashing-makecode.test.js +248 -0
  219. package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
  220. package/build/esm/bluetooth/flashing/flashing-partial.d.ts +10 -0
  221. package/build/esm/bluetooth/flashing/flashing-partial.js +142 -0
  222. package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
  223. package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
  224. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
  225. package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +40 -14
  226. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
  227. package/build/esm/bluetooth/flashing/zip.js.map +1 -0
  228. package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
  229. package/build/esm/bluetooth/flashing/zip.test.js +94 -0
  230. package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
  231. package/build/esm/bluetooth/index.d.ts +5 -0
  232. package/build/esm/bluetooth/index.js +5 -0
  233. package/build/esm/bluetooth/index.js.map +1 -0
  234. package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +8 -0
  235. package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -1
  236. package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
  237. package/build/{cjs → esm/bluetooth/services}/accelerometer-service.d.ts +2 -3
  238. package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
  239. package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
  240. package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
  241. package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
  242. package/build/esm/bluetooth/services/button-service.js.map +1 -0
  243. package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
  244. package/build/esm/bluetooth/services/device-information-service.js +25 -0
  245. package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
  246. package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
  247. package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
  248. package/build/esm/bluetooth/services/event-service.d.ts +48 -0
  249. package/build/esm/bluetooth/services/event-service.js +269 -0
  250. package/build/esm/bluetooth/services/event-service.js.map +1 -0
  251. package/build/esm/bluetooth/services/event-service.test.d.ts +1 -0
  252. package/build/esm/bluetooth/services/event-service.test.js +250 -0
  253. package/build/esm/bluetooth/services/event-service.test.js.map +1 -0
  254. package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
  255. package/build/esm/bluetooth/services/io-pin-service.js +169 -0
  256. package/build/esm/bluetooth/services/io-pin-service.js.map +1 -0
  257. package/build/esm/{led-service.d.ts → bluetooth/services/led-service.d.ts} +2 -3
  258. package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
  259. package/build/esm/bluetooth/services/led-service.js.map +1 -0
  260. package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
  261. package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
  262. package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
  263. package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
  264. package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
  265. package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
  266. package/build/esm/bluetooth/services/temperature-service.d.ts +14 -0
  267. package/build/esm/bluetooth/services/temperature-service.js +76 -0
  268. package/build/esm/bluetooth/services/temperature-service.js.map +1 -0
  269. package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
  270. package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
  271. package/build/esm/bluetooth/services/uart-service.js.map +1 -0
  272. package/build/esm/board-id.d.ts +1 -1
  273. package/build/esm/board-id.js.map +1 -1
  274. package/build/esm/device.d.ts +214 -97
  275. package/build/esm/device.js +55 -108
  276. package/build/esm/device.js.map +1 -1
  277. package/build/esm/events.d.ts +8 -108
  278. package/build/esm/events.js +26 -86
  279. package/build/esm/events.js.map +1 -1
  280. package/build/esm/events.test.d.ts +1 -0
  281. package/build/esm/events.test.js +113 -0
  282. package/build/esm/events.test.js.map +1 -0
  283. package/build/esm/hex-util.d.ts +1 -0
  284. package/build/esm/hex-util.js +11 -0
  285. package/build/esm/hex-util.js.map +1 -0
  286. package/build/esm/index.d.ts +8 -16
  287. package/build/esm/index.js +7 -11
  288. package/build/esm/index.js.map +1 -1
  289. package/build/esm/logging.js.map +1 -1
  290. package/build/esm/microbit-events.d.ts +67 -0
  291. package/build/esm/microbit-events.js +52 -0
  292. package/build/esm/microbit-events.js.map +1 -0
  293. package/build/esm/radio-bridge/connection.d.ts +52 -0
  294. package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +108 -97
  295. package/build/esm/radio-bridge/connection.js.map +1 -0
  296. package/build/esm/radio-bridge/index.d.ts +4 -0
  297. package/build/esm/radio-bridge/index.js +5 -0
  298. package/build/esm/radio-bridge/index.js.map +1 -0
  299. package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
  300. package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
  301. package/build/esm/service-events.d.ts +92 -15
  302. package/build/esm/service-events.js +5 -34
  303. package/build/esm/service-events.js.map +1 -1
  304. package/build/esm/setupTests.js +7 -0
  305. package/build/esm/setupTests.js.map +1 -1
  306. package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -1
  307. package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
  308. package/build/esm/universal-hex/flash-data-source.js.map +1 -0
  309. package/build/esm/universal-hex/index.d.ts +4 -0
  310. package/build/esm/universal-hex/index.js +5 -0
  311. package/build/esm/universal-hex/index.js.map +1 -0
  312. package/build/esm/usb/arm-debug.d.ts +137 -0
  313. package/build/esm/usb/arm-debug.js +409 -0
  314. package/build/esm/usb/arm-debug.js.map +1 -0
  315. package/build/esm/usb/arm-debug.test.d.ts +1 -0
  316. package/build/esm/usb/arm-debug.test.js +331 -0
  317. package/build/esm/usb/arm-debug.test.js.map +1 -0
  318. package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
  319. package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
  320. package/build/esm/usb/board-serial-info.js.map +1 -0
  321. package/build/esm/usb/board-serial-info.test.d.ts +1 -0
  322. package/build/esm/usb/board-serial-info.test.js +44 -0
  323. package/build/esm/usb/board-serial-info.test.js.map +1 -0
  324. package/build/esm/usb/cdc-saturation.d.ts +36 -0
  325. package/build/esm/usb/cdc-saturation.js +148 -0
  326. package/build/esm/usb/cdc-saturation.js.map +1 -0
  327. package/build/esm/usb/cmsis-dap.d.ts +113 -0
  328. package/build/esm/usb/cmsis-dap.js +342 -0
  329. package/build/esm/usb/cmsis-dap.js.map +1 -0
  330. package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
  331. package/build/esm/usb/cmsis-dap.test.js +348 -0
  332. package/build/esm/usb/cmsis-dap.test.js.map +1 -0
  333. package/build/esm/usb/connection.d.ts +96 -0
  334. package/build/esm/{usb.js → usb/connection.js} +270 -188
  335. package/build/esm/usb/connection.js.map +1 -0
  336. package/build/esm/usb/connection.test.d.ts +1 -0
  337. package/build/esm/usb/connection.test.js +264 -0
  338. package/build/esm/usb/connection.test.js.map +1 -0
  339. package/build/esm/usb/cortex-m.d.ts +72 -0
  340. package/build/esm/usb/cortex-m.js +161 -0
  341. package/build/esm/usb/cortex-m.js.map +1 -0
  342. package/build/esm/usb/cortex-m.test.d.ts +1 -0
  343. package/build/esm/usb/cortex-m.test.js +215 -0
  344. package/build/esm/usb/cortex-m.test.js.map +1 -0
  345. package/build/esm/usb/daplink.d.ts +69 -0
  346. package/build/esm/usb/daplink.js +231 -0
  347. package/build/esm/usb/daplink.js.map +1 -0
  348. package/build/esm/usb/daplink.test.d.ts +1 -0
  349. package/build/esm/usb/daplink.test.js +288 -0
  350. package/build/esm/usb/daplink.test.js.map +1 -0
  351. package/build/esm/usb/device-wrapper.d.ts +34 -0
  352. package/build/esm/usb/device-wrapper.js +98 -0
  353. package/build/esm/usb/device-wrapper.js.map +1 -0
  354. package/build/esm/usb/index.d.ts +5 -0
  355. package/build/esm/usb/index.js +5 -0
  356. package/build/esm/usb/index.js.map +1 -0
  357. package/build/esm/{usb-partial-flashing-utils.d.ts → usb/partial-flashing-utils.d.ts} +6 -9
  358. package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
  359. package/build/esm/usb/partial-flashing-utils.js.map +1 -0
  360. package/build/esm/{usb-partial-flashing.d.ts → usb/partial-flashing.d.ts} +37 -11
  361. package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -110
  362. package/build/esm/usb/partial-flashing.js.map +1 -0
  363. package/build/esm/usb/promise-queue.js.map +1 -0
  364. package/build/esm/usb/promise-queue.test.d.ts +1 -0
  365. package/build/esm/usb/promise-queue.test.js +66 -0
  366. package/build/esm/usb/promise-queue.test.js.map +1 -0
  367. package/build/esm/usb/serial-events.d.ts +16 -0
  368. package/build/esm/usb/serial-events.js +2 -0
  369. package/build/esm/usb/serial-events.js.map +1 -0
  370. package/build/esm/usb/transport.d.ts +42 -0
  371. package/build/esm/usb/transport.js +151 -0
  372. package/build/esm/usb/transport.js.map +1 -0
  373. package/package.json +55 -15
  374. package/LICENSE.md +0 -21
  375. package/README.md +0 -125
  376. package/build/cjs/accelerometer-service.js.map +0 -1
  377. package/build/cjs/accelerometer.d.ts +0 -9
  378. package/build/cjs/accelerometer.js +0 -16
  379. package/build/cjs/accelerometer.js.map +0 -1
  380. package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
  381. package/build/cjs/bluetooth.d.ts +0 -112
  382. package/build/cjs/bluetooth.js +0 -458
  383. package/build/cjs/bluetooth.js.map +0 -1
  384. package/build/cjs/board-serial-info.js.map +0 -1
  385. package/build/cjs/button-service.js.map +0 -1
  386. package/build/cjs/buttons.d.ts +0 -10
  387. package/build/cjs/buttons.js +0 -22
  388. package/build/cjs/buttons.js.map +0 -1
  389. package/build/cjs/constants.d.ts +0 -48
  390. package/build/cjs/constants.js +0 -73
  391. package/build/cjs/constants.js.map +0 -1
  392. package/build/cjs/device-information-service.js +0 -34
  393. package/build/cjs/device-information-service.js.map +0 -1
  394. package/build/cjs/dfu-service.js.map +0 -1
  395. package/build/cjs/flashing/flashing-full.js.map +0 -1
  396. package/build/cjs/flashing/flashing-makecode.d.ts +0 -6
  397. package/build/cjs/flashing/flashing-makecode.js.map +0 -1
  398. package/build/cjs/flashing/flashing-partial.d.ts +0 -9
  399. package/build/cjs/flashing/flashing-partial.js +0 -98
  400. package/build/cjs/flashing/flashing-partial.js.map +0 -1
  401. package/build/cjs/flashing/flashing-v1.js.map +0 -1
  402. package/build/cjs/flashing/nordic-dfu.js.map +0 -1
  403. package/build/cjs/flashing/zip.js.map +0 -1
  404. package/build/cjs/hex-flash-data-source.js.map +0 -1
  405. package/build/cjs/led-service.js.map +0 -1
  406. package/build/cjs/led.d.ts +0 -6
  407. package/build/cjs/led.js.map +0 -1
  408. package/build/cjs/magnetometer-service.js.map +0 -1
  409. package/build/cjs/magnetometer.d.ts +0 -9
  410. package/build/cjs/magnetometer.js +0 -16
  411. package/build/cjs/magnetometer.js.map +0 -1
  412. package/build/cjs/partial-flashing-service.js.map +0 -1
  413. package/build/cjs/promise-queue.js.map +0 -1
  414. package/build/cjs/serial-events.d.ts +0 -20
  415. package/build/cjs/serial-events.js +0 -69
  416. package/build/cjs/serial-events.js.map +0 -1
  417. package/build/cjs/uart-service.js.map +0 -1
  418. package/build/cjs/uart.d.ts +0 -4
  419. package/build/cjs/uart.js +0 -16
  420. package/build/cjs/uart.js.map +0 -1
  421. package/build/cjs/usb-device-wrapper.d.ts +0 -47
  422. package/build/cjs/usb-device-wrapper.js +0 -437
  423. package/build/cjs/usb-device-wrapper.js.map +0 -1
  424. package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
  425. package/build/cjs/usb-partial-flashing.js.map +0 -1
  426. package/build/cjs/usb-radio-bridge.d.ts +0 -24
  427. package/build/cjs/usb-radio-bridge.js.map +0 -1
  428. package/build/cjs/usb-serial-protocol.js.map +0 -1
  429. package/build/cjs/usb.d.ts +0 -66
  430. package/build/cjs/usb.js.map +0 -1
  431. package/build/esm/accelerometer-service.js.map +0 -1
  432. package/build/esm/accelerometer.d.ts +0 -9
  433. package/build/esm/accelerometer.js +0 -12
  434. package/build/esm/accelerometer.js.map +0 -1
  435. package/build/esm/bluetooth-device-wrapper.js.map +0 -1
  436. package/build/esm/bluetooth-profile.js.map +0 -1
  437. package/build/esm/bluetooth.d.ts +0 -112
  438. package/build/esm/bluetooth.js +0 -428
  439. package/build/esm/bluetooth.js.map +0 -1
  440. package/build/esm/board-serial-info.js.map +0 -1
  441. package/build/esm/button-service.js.map +0 -1
  442. package/build/esm/buttons.d.ts +0 -10
  443. package/build/esm/buttons.js +0 -18
  444. package/build/esm/buttons.js.map +0 -1
  445. package/build/esm/constants.d.ts +0 -48
  446. package/build/esm/constants.js +0 -70
  447. package/build/esm/constants.js.map +0 -1
  448. package/build/esm/device-information-service.js +0 -30
  449. package/build/esm/device-information-service.js.map +0 -1
  450. package/build/esm/dfu-service.js.map +0 -1
  451. package/build/esm/flashing/flashing-full.js.map +0 -1
  452. package/build/esm/flashing/flashing-makecode.d.ts +0 -6
  453. package/build/esm/flashing/flashing-makecode.js.map +0 -1
  454. package/build/esm/flashing/flashing-partial.d.ts +0 -9
  455. package/build/esm/flashing/flashing-partial.js +0 -95
  456. package/build/esm/flashing/flashing-partial.js.map +0 -1
  457. package/build/esm/flashing/flashing-v1.js.map +0 -1
  458. package/build/esm/flashing/nordic-dfu.js.map +0 -1
  459. package/build/esm/flashing/zip.js.map +0 -1
  460. package/build/esm/hex-flash-data-source.js.map +0 -1
  461. package/build/esm/led-service.js.map +0 -1
  462. package/build/esm/led.d.ts +0 -6
  463. package/build/esm/led.js +0 -2
  464. package/build/esm/led.js.map +0 -1
  465. package/build/esm/magnetometer-service.js.map +0 -1
  466. package/build/esm/magnetometer.d.ts +0 -9
  467. package/build/esm/magnetometer.js +0 -12
  468. package/build/esm/magnetometer.js.map +0 -1
  469. package/build/esm/partial-flashing-service.js.map +0 -1
  470. package/build/esm/promise-queue.js.map +0 -1
  471. package/build/esm/serial-events.d.ts +0 -20
  472. package/build/esm/serial-events.js +0 -61
  473. package/build/esm/serial-events.js.map +0 -1
  474. package/build/esm/uart-service.js.map +0 -1
  475. package/build/esm/uart.d.ts +0 -4
  476. package/build/esm/uart.js +0 -12
  477. package/build/esm/uart.js.map +0 -1
  478. package/build/esm/usb-device-wrapper.d.ts +0 -47
  479. package/build/esm/usb-device-wrapper.js +0 -410
  480. package/build/esm/usb-device-wrapper.js.map +0 -1
  481. package/build/esm/usb-partial-flashing-utils.js.map +0 -1
  482. package/build/esm/usb-partial-flashing.js.map +0 -1
  483. package/build/esm/usb-radio-bridge.d.ts +0 -24
  484. package/build/esm/usb-radio-bridge.js.map +0 -1
  485. package/build/esm/usb-serial-protocol.js.map +0 -1
  486. package/build/esm/usb.d.ts +0 -66
  487. package/build/esm/usb.js.map +0 -1
  488. package/typedoc.json +0 -14
  489. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  490. /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  491. /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  492. /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
  493. /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  494. /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  495. /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  496. /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
  497. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
  498. /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
  499. /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
  500. /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
  501. /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
  502. /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
  503. /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
  504. /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
@@ -1,39 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServiceConnectionEventMap = void 0;
4
- class ServiceConnectionEventMap {
5
- constructor() {
6
- Object.defineProperty(this, "accelerometerdatachanged", {
7
- enumerable: true,
8
- configurable: true,
9
- writable: true,
10
- value: void 0
11
- });
12
- Object.defineProperty(this, "buttonachanged", {
13
- enumerable: true,
14
- configurable: true,
15
- writable: true,
16
- value: void 0
17
- });
18
- Object.defineProperty(this, "buttonbchanged", {
19
- enumerable: true,
20
- configurable: true,
21
- writable: true,
22
- value: void 0
23
- });
24
- Object.defineProperty(this, "magnetometerdatachanged", {
25
- enumerable: true,
26
- configurable: true,
27
- writable: true,
28
- value: void 0
29
- });
30
- Object.defineProperty(this, "uartdata", {
31
- enumerable: true,
32
- configurable: true,
33
- writable: true,
34
- value: void 0
35
- });
36
- }
37
- }
38
- exports.ServiceConnectionEventMap = ServiceConnectionEventMap;
3
+ exports.ButtonState = void 0;
4
+ exports.ButtonState = {
5
+ NotPressed: 0,
6
+ ShortPress: 1,
7
+ LongPress: 2,
8
+ };
39
9
  //# sourceMappingURL=service-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-events.js","sourceRoot":"","sources":["../../lib/service-events.ts"],"names":[],"mappings":";;;AAMA,MAAa,yBAAyB;IAAtC;QACE,4BAAA,0BAA0B;;;;;WAAyB;QACnD,4BAAA,gBAAgB;;;;;WAAc;QAC9B,4BAAA,gBAAgB;;;;;WAAc;QAC9B,4BAAA,yBAAyB;;;;;WAAwB;QACjD,4BAAA,UAAU;;;;;WAAgB;IAC5B,CAAC;CAAA;AAND,8DAMC"}
1
+ {"version":3,"file":"service-events.js","sourceRoot":"","sources":["../../src/service-events.ts"],"names":[],"mappings":";;;AASa,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;CACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * (c) 2024, Micro:bit Educational Foundation and contributors
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ */
8
+ //# sourceMappingURL=setupTests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../lib/setupTests.ts"],"names":[],"mappings":";;AAAA;;;;GAIG"}
1
+ {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../src/setupTests.ts"],"names":[],"mappings":";;AAAA;;;;GAIG"}
@@ -1,4 +1,4 @@
1
- import { FlashDataSource } from "./device.js";
1
+ import { FlashDataSource } from "../device.js";
2
2
  /**
3
3
  * A flash data source that converts universal hex files as needed.
4
4
  *
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createUniversalHexFlashDataSource = void 0;
4
- const board_id_js_1 = require("./board-id.js");
5
- const device_js_1 = require("./device.js");
4
+ // This module is deliberately kept separate so that
5
+ // @microbit/microbit-universal-hex can be tree-shaken by bundlers
6
+ // when consumers don't use createUniversalHexFlashDataSource.
7
+ const board_id_js_1 = require("../board-id.js");
8
+ const device_js_1 = require("../device.js");
6
9
  const microbit_universal_hex_1 = require("@microbit/microbit-universal-hex");
7
10
  /**
8
11
  * A flash data source that converts universal hex files as needed.
@@ -23,4 +26,4 @@ const createUniversalHexFlashDataSource = (universalHex) => {
23
26
  };
24
27
  };
25
28
  exports.createUniversalHexFlashDataSource = createUniversalHexFlashDataSource;
26
- //# sourceMappingURL=hex-flash-data-source.js.map
29
+ //# sourceMappingURL=flash-data-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flash-data-source.js","sourceRoot":"","sources":["../../../src/universal-hex/flash-data-source.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AACpD,kEAAkE;AAClE,8DAA8D;AAC9D,gDAAyC;AACzC,4CAIsB;AACtB,6EAG0C;AAE1C;;;;GAIG;AACI,MAAM,iCAAiC,GAAG,CAC/C,YAAoB,EACH,EAAE;IACnB,OAAO,CAAC,YAA0B,EAAE,EAAE;QACpC,IAAI,IAAA,uCAAc,EAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAA,6CAAoB,EAAC,YAAY,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,qBAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CACxD,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,0BAAc,CAAC,kBAAkB,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,iCAAiC,qCAgB5C"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @module @microbit/microbit-connection/universal-hex
3
+ */
4
+ export { createUniversalHexFlashDataSource } from "./flash-data-source.js";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUniversalHexFlashDataSource = void 0;
4
+ /**
5
+ * @module @microbit/microbit-connection/universal-hex
6
+ */
7
+ var flash_data_source_js_1 = require("./flash-data-source.js");
8
+ Object.defineProperty(exports, "createUniversalHexFlashDataSource", { enumerable: true, get: function () { return flash_data_source_js_1.createUniversalHexFlashDataSource; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/universal-hex/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,+DAA2E;AAAlE,yIAAA,iCAAiC,OAAA"}
@@ -0,0 +1,137 @@
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
+ * ARM Debug Interface (ADI) layer for SWD access to a Cortex-M target,
11
+ * derived from dapjs (https://github.com/ARMmbed/dapjs). This file and
12
+ * its siblings (transport.ts, cmsis-dap.ts, cortex-m.ts, daplink.ts)
13
+ * are a minimal reimplementation covering only the features needed for
14
+ * micro:bit.
15
+ *
16
+ * ArmDebugSwd manages the SWD connection lifecycle and provides
17
+ * register-level access to the Debug Port (DP) and Access Port (AP).
18
+ * It sits between CmsisDapUsb (command framing) and higher-level consumers
19
+ * like CortexM (processor control) and DAPLink (flash/serial).
20
+ *
21
+ * Key responsibilities:
22
+ * - SWD initialisation sequence (JTAG-to-SWD switch, power-up, ID read)
23
+ * - Automatic drain-and-retry on stale USB responses after page reload
24
+ * - DP_SELECT and AP_CSW register caching to reduce redundant writes
25
+ * - Memory read/write via AP_TAR + AP_DRW, handling page boundaries
26
+ * and block-transfer size limits
27
+ *
28
+ * Protocol references:
29
+ * - ARM ADI: https://developer.arm.com/documentation/ihi0031/a/
30
+ * - DAPLink: https://github.com/ARMmbed/DAPLink
31
+ *
32
+ * The dapjs license is included below:
33
+ *
34
+ * DAPjs
35
+ * Copyright (c) Arm Limited 2018
36
+ * Copyright (c) Microsoft Corporation
37
+ *
38
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
39
+ * of this software and associated documentation files (the "Software"), to deal
40
+ * in the Software without restriction, including without limitation the rights
41
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42
+ * copies of the Software, and to permit persons to whom the Software is
43
+ * furnished to do so, subject to the following conditions:
44
+ *
45
+ * The above copyright notice and this permission notice shall be included in
46
+ * all copies or substantial portions of the Software.
47
+ *
48
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
53
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
54
+ * IN THE SOFTWARE.
55
+ */
56
+ import { Logging } from "../logging.js";
57
+ import { type CmsisDap, DapOperation } from "./cmsis-dap.js";
58
+ export declare function waitFor(fn: () => Promise<boolean>, timeout?: number, delay?: number): Promise<void>;
59
+ export interface ArmDebug {
60
+ readonly dap: CmsisDap;
61
+ readonly isOpen: boolean;
62
+ /** Read a 32-bit word from a memory-mapped address. */
63
+ readMem32(address: number): Promise<number>;
64
+ /** Write a 32-bit word to a memory-mapped address. */
65
+ writeMem32(address: number, value: number): Promise<void>;
66
+ /** Build DAP operations for reading a 32-bit word (for use with transferSequence). */
67
+ readMem32Ops(address: number): DapOperation[];
68
+ /** Build DAP operations for writing a 32-bit word (for use with transferSequence). */
69
+ writeMem32Ops(address: number, value: number): DapOperation[];
70
+ /**
71
+ * Read a block of 32-bit words from memory.
72
+ * Handles TAR auto-increment page boundaries and block size limits.
73
+ */
74
+ readBlock(address: number, count: number): Promise<Uint32Array>;
75
+ /**
76
+ * Write a block of 32-bit words to memory.
77
+ * Handles TAR auto-increment page boundaries and block size limits.
78
+ */
79
+ writeBlock(address: number, values: Uint32Array): Promise<void>;
80
+ /**
81
+ * Execute a sequence of operation groups as individual transfers.
82
+ * Each group is sent as a separate DAP_TRANSFER to guarantee that
83
+ * all operations within a group execute atomically on the wire.
84
+ */
85
+ transferSequence(groups: DapOperation[][]): Promise<Uint32Array>;
86
+ /**
87
+ * Reset cached protocol state without closing the transport.
88
+ * Call after operations that reset the target (e.g. DAPLink flash reset).
89
+ */
90
+ resetState(): void;
91
+ /**
92
+ * Connect to the target with automatic drain-and-retry on stale responses.
93
+ */
94
+ connect(maxRetries?: number): Promise<void>;
95
+ disconnect(): Promise<void>;
96
+ /**
97
+ * Reset cached state and reconnect without closing the transport.
98
+ * Use after operations like DAPLink flash that leave the protocol state
99
+ * stale but don't require full re-enumeration.
100
+ */
101
+ reinit(): Promise<void>;
102
+ }
103
+ export declare class ArmDebugSwd implements ArmDebug {
104
+ readonly dap: CmsisDap;
105
+ private logging;
106
+ private swdConnected;
107
+ private selectedAddress?;
108
+ private cswValue?;
109
+ constructor(dap: CmsisDap, logging: Logging);
110
+ get isOpen(): boolean;
111
+ /**
112
+ * Initialize SWD: connect to the target, set up the debug port,
113
+ * and power up the debug and system domains.
114
+ */
115
+ private connectOnce;
116
+ connect(maxRetries?: number): Promise<void>;
117
+ resetState(): void;
118
+ disconnect(): Promise<void>;
119
+ reinit(): Promise<void>;
120
+ private readDPOps;
121
+ private writeDPOps;
122
+ private readAPOps;
123
+ private writeAPOps;
124
+ readMem32Ops(address: number): DapOperation[];
125
+ writeMem32Ops(address: number, value: number): DapOperation[];
126
+ /**
127
+ * Execute a batch of DAP transfer operations, deduplicating writes
128
+ * to DP_SELECT and AP_CSW that match cached state.
129
+ */
130
+ private transfer;
131
+ transferSequence(groups: DapOperation[][]): Promise<Uint32Array>;
132
+ private readDP;
133
+ readMem32(address: number): Promise<number>;
134
+ writeMem32(address: number, value: number): Promise<void>;
135
+ readBlock(address: number, count: number): Promise<Uint32Array>;
136
+ writeBlock(address: number, values: Uint32Array): Promise<void>;
137
+ }
@@ -0,0 +1,414 @@
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
+ * ARM Debug Interface (ADI) layer for SWD access to a Cortex-M target,
12
+ * derived from dapjs (https://github.com/ARMmbed/dapjs). This file and
13
+ * its siblings (transport.ts, cmsis-dap.ts, cortex-m.ts, daplink.ts)
14
+ * are a minimal reimplementation covering only the features needed for
15
+ * micro:bit.
16
+ *
17
+ * ArmDebugSwd manages the SWD connection lifecycle and provides
18
+ * register-level access to the Debug Port (DP) and Access Port (AP).
19
+ * It sits between CmsisDapUsb (command framing) and higher-level consumers
20
+ * like CortexM (processor control) and DAPLink (flash/serial).
21
+ *
22
+ * Key responsibilities:
23
+ * - SWD initialisation sequence (JTAG-to-SWD switch, power-up, ID read)
24
+ * - Automatic drain-and-retry on stale USB responses after page reload
25
+ * - DP_SELECT and AP_CSW register caching to reduce redundant writes
26
+ * - Memory read/write via AP_TAR + AP_DRW, handling page boundaries
27
+ * and block-transfer size limits
28
+ *
29
+ * Protocol references:
30
+ * - ARM ADI: https://developer.arm.com/documentation/ihi0031/a/
31
+ * - DAPLink: https://github.com/ARMmbed/DAPLink
32
+ *
33
+ * The dapjs license is included below:
34
+ *
35
+ * DAPjs
36
+ * Copyright (c) Arm Limited 2018
37
+ * Copyright (c) Microsoft Corporation
38
+ *
39
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
40
+ * of this software and associated documentation files (the "Software"), to deal
41
+ * in the Software without restriction, including without limitation the rights
42
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
43
+ * copies of the Software, and to permit persons to whom the Software is
44
+ * furnished to do so, subject to the following conditions:
45
+ *
46
+ * The above copyright notice and this permission notice shall be included in
47
+ * all copies or substantial portions of the Software.
48
+ *
49
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
53
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
54
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
55
+ * IN THE SOFTWARE.
56
+ */
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.ArmDebugSwd = void 0;
59
+ exports.waitFor = waitFor;
60
+ const device_js_1 = require("../device.js");
61
+ const cmsis_dap_js_1 = require("./cmsis-dap.js");
62
+ // ---------------------------------------------------------------------------
63
+ // Constants
64
+ // ---------------------------------------------------------------------------
65
+ // DP registers
66
+ const DP_ABORT = 0x0;
67
+ const DP_DPIDR = 0x0;
68
+ const DP_CTRL_STAT = 0x4;
69
+ const DP_SELECT = 0x8;
70
+ // AP registers (values are byte addresses, pre-shifted to match the DAP
71
+ // transfer operation encoding where bits [3:2] carry A[3:2])
72
+ const AP_CSW = 0x00;
73
+ const AP_TAR = 0x04;
74
+ const AP_DRW = 0x0c;
75
+ // CSW mask values
76
+ const CSW_SIZE32 = 1 << 1;
77
+ const CSW_ADDRINC_SINGLE = 1 << 4;
78
+ const CSW_DBGSTATUS = 1 << 6;
79
+ const CSW_RESERVED = 1 << 24;
80
+ const CSW_HPROT1 = 1 << 25;
81
+ const CSW_MASTERTYPE = 1 << 29;
82
+ const CSW_VALUE = CSW_ADDRINC_SINGLE |
83
+ CSW_DBGSTATUS |
84
+ CSW_RESERVED |
85
+ CSW_HPROT1 |
86
+ CSW_MASTERTYPE;
87
+ // Bank select masks
88
+ const APSEL = 0xff000000;
89
+ const APBANKSEL = 0x000000f0;
90
+ // CTRL/STAT register bits
91
+ const CSYSPWRUPREQ = 1 << 30;
92
+ const CDBGPWRUPREQ = 1 << 28;
93
+ const CSYSPWRUPACK = 1 << 31;
94
+ const CDBGPWRUPACK = 1 << 29;
95
+ // TAR auto-increment page size (1KB, implementation-defined minimum)
96
+ const AUTOINC_PAGESIZE = 1 << 10;
97
+ // Clock frequency (10 MHz)
98
+ const CLOCK_FREQUENCY = 10_000_000;
99
+ // Wait delay for polling loops
100
+ const WAIT_DELAY = 100;
101
+ // ---------------------------------------------------------------------------
102
+ // Utilities
103
+ // ---------------------------------------------------------------------------
104
+ async function waitFor(fn, timeout = 10_000, delay = WAIT_DELAY) {
105
+ const deadline = timeout > 0 ? Date.now() + timeout : 0;
106
+ while (true) {
107
+ if (await fn())
108
+ return;
109
+ if (deadline && Date.now() > deadline) {
110
+ throw new device_js_1.DeviceError({
111
+ code: "timeout",
112
+ message: "Wait timed out",
113
+ });
114
+ }
115
+ await new Promise((resolve) => setTimeout(resolve, delay));
116
+ }
117
+ }
118
+ function concatUint32Arrays(arrays) {
119
+ if (arrays.length === 1)
120
+ return arrays[0];
121
+ let length = 0;
122
+ for (const a of arrays)
123
+ length += a.length;
124
+ const result = new Uint32Array(length);
125
+ let offset = 0;
126
+ for (const a of arrays) {
127
+ result.set(a, offset);
128
+ offset += a.length;
129
+ }
130
+ return result;
131
+ }
132
+ class ArmDebugSwd {
133
+ constructor(dap, logging) {
134
+ Object.defineProperty(this, "dap", {
135
+ enumerable: true,
136
+ configurable: true,
137
+ writable: true,
138
+ value: dap
139
+ });
140
+ Object.defineProperty(this, "logging", {
141
+ enumerable: true,
142
+ configurable: true,
143
+ writable: true,
144
+ value: logging
145
+ });
146
+ Object.defineProperty(this, "swdConnected", {
147
+ enumerable: true,
148
+ configurable: true,
149
+ writable: true,
150
+ value: false
151
+ });
152
+ // ADI state (register caching)
153
+ Object.defineProperty(this, "selectedAddress", {
154
+ enumerable: true,
155
+ configurable: true,
156
+ writable: true,
157
+ value: void 0
158
+ });
159
+ Object.defineProperty(this, "cswValue", {
160
+ enumerable: true,
161
+ configurable: true,
162
+ writable: true,
163
+ value: void 0
164
+ });
165
+ }
166
+ get isOpen() {
167
+ return this.dap.isOpen;
168
+ }
169
+ // ---- SWD lifecycle ----
170
+ /**
171
+ * Initialize SWD: connect to the target, set up the debug port,
172
+ * and power up the debug and system domains.
173
+ */
174
+ async connectOnce() {
175
+ if (this.swdConnected)
176
+ return;
177
+ await this.dap.open();
178
+ // SWD protocol setup. On failure the transport is left open so the
179
+ // caller can drain stale responses and retry without re-opening.
180
+ try {
181
+ await this.dap.swjClock(CLOCK_FREQUENCY);
182
+ await this.dap.connect();
183
+ }
184
+ catch (error) {
185
+ try {
186
+ await this.dap.clearAbort();
187
+ }
188
+ catch {
189
+ /* ignore */
190
+ }
191
+ throw error;
192
+ }
193
+ await this.dap.configureTransfer(0, 100, 0);
194
+ // Select SWD protocol
195
+ await this.dap.swjSequence(new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]));
196
+ await this.dap.swjSequence(new Uint8Array([0x9e, 0xe7]));
197
+ await this.dap.swjSequence(new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]));
198
+ await this.dap.swjSequence(new Uint8Array([0x00]));
199
+ this.swdConnected = true;
200
+ // Initialize debug port and power up
201
+ try {
202
+ await this.readDP(DP_DPIDR);
203
+ await this.transferSequence([
204
+ this.writeDPOps(DP_ABORT, cmsis_dap_js_1.ABORT_ALL),
205
+ this.writeDPOps(DP_SELECT, AP_CSW),
206
+ this.writeDPOps(DP_CTRL_STAT, CSYSPWRUPREQ | CDBGPWRUPREQ),
207
+ ]);
208
+ const mask = CDBGPWRUPACK | CSYSPWRUPACK;
209
+ await waitFor(async () => {
210
+ const status = await this.readDP(DP_CTRL_STAT);
211
+ return (status & mask) === mask;
212
+ }, 5000);
213
+ }
214
+ catch (error) {
215
+ await this.disconnect();
216
+ throw error;
217
+ }
218
+ this.logging.log("SWD connected");
219
+ }
220
+ async connect(maxRetries = 3) {
221
+ let lastError;
222
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
223
+ try {
224
+ if (attempt > 0) {
225
+ this.logging.log(`Connection retry attempt ${attempt + 1}/${maxRetries}`);
226
+ await this.dap.drainStaleResponses();
227
+ }
228
+ await this.connectOnce();
229
+ return;
230
+ }
231
+ catch (e) {
232
+ if (e instanceof cmsis_dap_js_1.DapResponseMismatchError) {
233
+ lastError = e;
234
+ this.logging.log(`Stale response during connect: ${e.message}`);
235
+ continue;
236
+ }
237
+ throw e;
238
+ }
239
+ }
240
+ throw lastError || new Error("Connection failed after retries");
241
+ }
242
+ resetState() {
243
+ this.swdConnected = false;
244
+ this.selectedAddress = undefined;
245
+ this.cswValue = undefined;
246
+ }
247
+ async disconnect() {
248
+ if (!this.swdConnected)
249
+ return;
250
+ try {
251
+ await this.dap.disconnect();
252
+ }
253
+ catch {
254
+ this.logging.log("Disconnect failed, clearing abort");
255
+ try {
256
+ await this.dap.clearAbort();
257
+ }
258
+ catch {
259
+ /* ignore */
260
+ }
261
+ }
262
+ await this.dap.close();
263
+ this.resetState();
264
+ this.logging.log("SWD disconnected");
265
+ }
266
+ async reinit() {
267
+ this.logging.log("Reinitialising SWD");
268
+ this.resetState();
269
+ await this.connectOnce();
270
+ }
271
+ // ---- DP/AP register helpers ----
272
+ readDPOps(register) {
273
+ return [{ mode: cmsis_dap_js_1.READ, port: cmsis_dap_js_1.DP, register }];
274
+ }
275
+ writeDPOps(register, value) {
276
+ return [{ mode: cmsis_dap_js_1.WRITE, port: cmsis_dap_js_1.DP, register, value }];
277
+ }
278
+ readAPOps(register) {
279
+ const address = (register & APSEL) | (register & APBANKSEL);
280
+ return [
281
+ ...this.writeDPOps(DP_SELECT, address),
282
+ { mode: cmsis_dap_js_1.READ, port: cmsis_dap_js_1.AP, register },
283
+ ];
284
+ }
285
+ writeAPOps(register, value) {
286
+ const address = (register & APSEL) | (register & APBANKSEL);
287
+ return [
288
+ ...this.writeDPOps(DP_SELECT, address),
289
+ { mode: cmsis_dap_js_1.WRITE, port: cmsis_dap_js_1.AP, register, value },
290
+ ];
291
+ }
292
+ readMem32Ops(address) {
293
+ return [
294
+ ...this.writeAPOps(AP_CSW, CSW_VALUE | CSW_SIZE32),
295
+ ...this.writeAPOps(AP_TAR, address),
296
+ ...this.readAPOps(AP_DRW),
297
+ ];
298
+ }
299
+ writeMem32Ops(address, value) {
300
+ return [
301
+ ...this.writeAPOps(AP_CSW, CSW_VALUE | CSW_SIZE32),
302
+ ...this.writeAPOps(AP_TAR, address),
303
+ ...this.writeAPOps(AP_DRW, value),
304
+ ];
305
+ }
306
+ // ---- Transfer with register caching ----
307
+ /**
308
+ * Execute a batch of DAP transfer operations, deduplicating writes
309
+ * to DP_SELECT and AP_CSW that match cached state.
310
+ */
311
+ async transfer(operations) {
312
+ const filtered = operations.filter((op) => {
313
+ if (op.mode !== cmsis_dap_js_1.WRITE)
314
+ return true;
315
+ if (op.port === cmsis_dap_js_1.DP && op.register === DP_SELECT) {
316
+ return op.value !== this.selectedAddress;
317
+ }
318
+ if (op.port === cmsis_dap_js_1.AP && op.register === AP_CSW) {
319
+ return op.value !== this.cswValue;
320
+ }
321
+ return true;
322
+ });
323
+ if (filtered.length === 0) {
324
+ return new Uint32Array(0);
325
+ }
326
+ try {
327
+ const result = await this.dap.transfer(filtered);
328
+ // Update cache on success
329
+ for (const op of filtered) {
330
+ if (op.mode !== cmsis_dap_js_1.WRITE)
331
+ continue;
332
+ if (op.port === cmsis_dap_js_1.DP && op.register === DP_SELECT) {
333
+ this.selectedAddress = op.value;
334
+ }
335
+ else if (op.port === cmsis_dap_js_1.AP && op.register === AP_CSW) {
336
+ this.cswValue = op.value;
337
+ }
338
+ }
339
+ return result;
340
+ }
341
+ catch (error) {
342
+ // Transfer failed — invalidate the cache
343
+ this.selectedAddress = undefined;
344
+ this.cswValue = undefined;
345
+ throw error;
346
+ }
347
+ }
348
+ async transferSequence(groups) {
349
+ const results = [];
350
+ for (const group of groups) {
351
+ const result = await this.transfer(group);
352
+ results.push(result);
353
+ }
354
+ return concatUint32Arrays(results);
355
+ }
356
+ // ---- Memory operations ----
357
+ async readDP(register) {
358
+ const result = await this.transfer(this.readDPOps(register));
359
+ return result[0];
360
+ }
361
+ async readMem32(address) {
362
+ const result = await this.transfer(this.readMem32Ops(address));
363
+ return result[0];
364
+ }
365
+ async writeMem32(address, value) {
366
+ await this.transfer(this.writeMem32Ops(address, value));
367
+ }
368
+ async readBlock(address, count) {
369
+ const results = [];
370
+ let remaining = count;
371
+ let addr = address;
372
+ while (remaining > 0) {
373
+ const nextPageOffset = AUTOINC_PAGESIZE - (addr % AUTOINC_PAGESIZE);
374
+ const chunkWords = Math.min(remaining, nextPageOffset / 4);
375
+ await this.transferSequence([
376
+ this.writeAPOps(AP_CSW, CSW_VALUE | CSW_SIZE32),
377
+ this.writeAPOps(AP_TAR, addr),
378
+ ]);
379
+ let subRemaining = chunkWords;
380
+ while (subRemaining > 0) {
381
+ const subChunk = Math.min(subRemaining, Math.floor(this.dap.blockSize / 4));
382
+ const result = await this.dap.transferBlockRead(cmsis_dap_js_1.AP, AP_DRW, subChunk);
383
+ results.push(result);
384
+ subRemaining -= subChunk;
385
+ }
386
+ addr += chunkWords * 4;
387
+ remaining -= chunkWords;
388
+ }
389
+ return concatUint32Arrays(results);
390
+ }
391
+ async writeBlock(address, values) {
392
+ let index = 0;
393
+ let addr = address;
394
+ while (index < values.length) {
395
+ const nextPageOffset = AUTOINC_PAGESIZE - (addr % AUTOINC_PAGESIZE);
396
+ const chunkWords = Math.min(values.length - index, nextPageOffset / 4);
397
+ const chunk = values.slice(index, index + chunkWords);
398
+ await this.transferSequence([
399
+ this.writeAPOps(AP_CSW, CSW_VALUE | CSW_SIZE32),
400
+ this.writeAPOps(AP_TAR, addr),
401
+ ]);
402
+ let subIndex = 0;
403
+ while (subIndex < chunk.length) {
404
+ const subChunk = chunk.slice(subIndex, subIndex + Math.floor(this.dap.blockSize / 4));
405
+ await this.dap.transferBlockWrite(cmsis_dap_js_1.AP, AP_DRW, subChunk);
406
+ subIndex += Math.floor(this.dap.blockSize / 4);
407
+ }
408
+ addr += chunkWords * 4;
409
+ index += chunkWords;
410
+ }
411
+ }
412
+ }
413
+ exports.ArmDebugSwd = ArmDebugSwd;
414
+ //# sourceMappingURL=arm-debug.js.map