@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.
- package/build/cjs/async-util.d.ts +3 -1
- package/build/cjs/async-util.js +5 -1
- package/build/cjs/async-util.js.map +1 -1
- package/build/cjs/bluetooth/ble-error.d.ts +10 -0
- package/build/cjs/bluetooth/ble-error.js +47 -0
- package/build/cjs/bluetooth/ble-error.js.map +1 -0
- package/build/cjs/bluetooth/connection.d.ts +137 -0
- package/build/cjs/{bluetooth.js → bluetooth/connection.js} +158 -106
- package/build/cjs/bluetooth/connection.js.map +1 -0
- package/build/cjs/{bluetooth.test.js → bluetooth/connection.test.js} +9 -9
- package/build/cjs/bluetooth/connection.test.js.map +1 -0
- package/build/cjs/bluetooth/device-bond-state.js.map +1 -0
- package/build/cjs/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +11 -11
- package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +38 -42
- package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.d.ts +2 -2
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
- package/build/cjs/bluetooth/flashing/flashing-full.js.map +1 -0
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.d.ts +1 -1
- package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.test.js +3 -3
- package/build/cjs/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.d.ts +2 -2
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-partial.js +7 -6
- package/build/cjs/bluetooth/flashing/flashing-partial.js.map +1 -0
- package/build/cjs/bluetooth/flashing/flashing-v1.js.map +1 -0
- package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
- package/build/cjs/{flashing → bluetooth/flashing}/nordic-dfu.js +15 -11
- package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -0
- package/build/cjs/bluetooth/flashing/zip.js.map +1 -0
- package/build/cjs/bluetooth/flashing/zip.test.js.map +1 -0
- package/build/cjs/bluetooth/index.d.ts +5 -0
- package/build/cjs/bluetooth/index.js +9 -0
- package/build/cjs/bluetooth/index.js.map +1 -0
- package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +1 -1
- package/build/cjs/bluetooth/profile.js.map +1 -0
- package/build/cjs/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
- package/build/cjs/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +17 -12
- package/build/cjs/bluetooth/services/accelerometer-service.js.map +1 -0
- package/build/{esm → cjs/bluetooth/services}/button-service.d.ts +2 -3
- package/build/cjs/{button-service.js → bluetooth/services/button-service.js} +24 -14
- package/build/cjs/bluetooth/services/button-service.js.map +1 -0
- package/build/{esm → cjs/bluetooth/services}/device-information-service.d.ts +1 -1
- package/build/cjs/bluetooth/services/device-information-service.js +29 -0
- package/build/cjs/bluetooth/services/device-information-service.js.map +1 -0
- package/build/cjs/{dfu-service.js → bluetooth/services/dfu-service.js} +2 -2
- package/build/cjs/bluetooth/services/dfu-service.js.map +1 -0
- package/build/{esm → cjs/bluetooth/services}/led-service.d.ts +2 -3
- package/build/cjs/{led-service.js → bluetooth/services/led-service.js} +10 -7
- package/build/cjs/bluetooth/services/led-service.js.map +1 -0
- package/build/cjs/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
- package/build/cjs/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +19 -14
- package/build/cjs/bluetooth/services/magnetometer-service.js.map +1 -0
- package/build/{esm → cjs/bluetooth/services}/partial-flashing-service.d.ts +1 -1
- package/build/cjs/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +8 -8
- package/build/cjs/bluetooth/services/partial-flashing-service.js.map +1 -0
- package/build/cjs/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
- package/build/cjs/{uart-service.js → bluetooth/services/uart-service.js} +21 -9
- package/build/cjs/bluetooth/services/uart-service.js.map +1 -0
- package/build/cjs/board-id.d.ts +1 -1
- package/build/cjs/board-id.js.map +1 -1
- package/build/cjs/device.d.ts +145 -123
- package/build/cjs/device.js +47 -128
- package/build/cjs/device.js.map +1 -1
- package/build/cjs/events.d.ts +8 -108
- package/build/cjs/events.js +27 -88
- package/build/cjs/events.js.map +1 -1
- package/build/cjs/events.test.js +54 -48
- package/build/cjs/events.test.js.map +1 -1
- package/build/cjs/hex-util.d.ts +1 -0
- package/build/cjs/hex-util.js +15 -0
- package/build/cjs/hex-util.js.map +1 -0
- package/build/cjs/index.d.ts +7 -17
- package/build/cjs/index.js +6 -28
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/radio-bridge/connection.d.ts +52 -0
- package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +69 -37
- package/build/cjs/radio-bridge/connection.js.map +1 -0
- package/build/cjs/radio-bridge/index.d.ts +4 -0
- package/build/cjs/radio-bridge/index.js +9 -0
- package/build/cjs/radio-bridge/index.js.map +1 -0
- package/build/cjs/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
- package/build/cjs/radio-bridge/serial-protocol.js.map +1 -0
- package/build/cjs/service-events.d.ts +43 -14
- package/build/cjs/service-events.js +6 -36
- package/build/cjs/service-events.js.map +1 -1
- package/build/{esm/hex-flash-data-source.d.ts → cjs/universal-hex/flash-data-source.d.ts} +1 -2
- package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +7 -15
- package/build/cjs/universal-hex/flash-data-source.js.map +1 -0
- package/build/cjs/universal-hex/index.d.ts +4 -0
- package/build/cjs/universal-hex/index.js +9 -0
- package/build/cjs/universal-hex/index.js.map +1 -0
- package/build/cjs/usb/arm-debug.d.ts +137 -0
- package/build/cjs/usb/arm-debug.js +414 -0
- package/build/cjs/usb/arm-debug.js.map +1 -0
- package/build/cjs/usb/arm-debug.test.js +333 -0
- package/build/cjs/usb/arm-debug.test.js.map +1 -0
- package/build/{esm → cjs/usb}/board-serial-info.d.ts +2 -1
- package/build/cjs/{board-serial-info.js → usb/board-serial-info.js} +10 -7
- package/build/cjs/usb/board-serial-info.js.map +1 -0
- package/build/cjs/{board-serial-info.test.js → usb/board-serial-info.test.js} +2 -4
- package/build/cjs/usb/board-serial-info.test.js.map +1 -0
- package/build/cjs/usb/cdc-saturation.d.ts +36 -0
- package/build/cjs/usb/cdc-saturation.js +151 -0
- package/build/cjs/usb/cdc-saturation.js.map +1 -0
- package/build/cjs/usb/cmsis-dap.d.ts +113 -0
- package/build/cjs/usb/cmsis-dap.js +349 -0
- package/build/cjs/usb/cmsis-dap.js.map +1 -0
- package/build/cjs/usb/cmsis-dap.test.js +350 -0
- package/build/cjs/usb/cmsis-dap.test.js.map +1 -0
- package/build/cjs/usb/connection.d.ts +96 -0
- package/build/cjs/{usb.js → usb/connection.js} +257 -173
- package/build/cjs/usb/connection.js.map +1 -0
- package/build/cjs/{usb.test.js → usb/connection.test.js} +52 -42
- package/build/cjs/usb/connection.test.js.map +1 -0
- package/build/cjs/usb/cortex-m.d.ts +72 -0
- package/build/cjs/usb/cortex-m.js +165 -0
- package/build/cjs/usb/cortex-m.js.map +1 -0
- package/build/cjs/usb/cortex-m.test.js +217 -0
- package/build/cjs/usb/cortex-m.test.js.map +1 -0
- package/build/cjs/usb/daplink.d.ts +69 -0
- package/build/cjs/usb/daplink.js +238 -0
- package/build/cjs/usb/daplink.js.map +1 -0
- package/build/cjs/usb/daplink.test.js +290 -0
- package/build/cjs/usb/daplink.test.js.map +1 -0
- package/build/cjs/usb/device-wrapper.d.ts +34 -0
- package/build/cjs/usb/device-wrapper.js +102 -0
- package/build/cjs/usb/device-wrapper.js.map +1 -0
- package/build/cjs/usb/index.d.ts +5 -0
- package/build/cjs/usb/index.js +10 -0
- package/build/cjs/usb/index.js.map +1 -0
- package/build/{esm/usb-partial-flashing-utils.d.ts → cjs/usb/partial-flashing-utils.d.ts} +6 -9
- package/build/cjs/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +6 -49
- package/build/cjs/usb/partial-flashing-utils.js.map +1 -0
- package/build/{esm/usb-partial-flashing.d.ts → cjs/usb/partial-flashing.d.ts} +37 -11
- package/build/cjs/{usb-partial-flashing.js → usb/partial-flashing.js} +170 -135
- package/build/cjs/usb/partial-flashing.js.map +1 -0
- package/build/cjs/usb/promise-queue.js.map +1 -0
- package/build/cjs/usb/promise-queue.test.js.map +1 -0
- package/build/cjs/usb/serial-events.d.ts +16 -0
- package/build/cjs/{led.js → usb/serial-events.js} +1 -1
- package/build/cjs/usb/serial-events.js.map +1 -0
- package/build/cjs/usb/transport.d.ts +42 -0
- package/build/cjs/usb/transport.js +155 -0
- package/build/cjs/usb/transport.js.map +1 -0
- package/build/esm/async-util.d.ts +3 -1
- package/build/esm/async-util.js +5 -1
- package/build/esm/async-util.js.map +1 -1
- package/build/esm/bluetooth/ble-error.d.ts +10 -0
- package/build/esm/bluetooth/ble-error.js +42 -0
- package/build/esm/bluetooth/ble-error.js.map +1 -0
- package/build/esm/bluetooth/connection.d.ts +137 -0
- package/build/esm/{bluetooth.js → bluetooth/connection.js} +152 -100
- package/build/esm/bluetooth/connection.js.map +1 -0
- package/build/esm/{bluetooth.test.js → bluetooth/connection.test.js} +9 -9
- package/build/esm/bluetooth/connection.test.js.map +1 -0
- package/build/esm/bluetooth/device-bond-state.js.map +1 -0
- package/build/esm/{bluetooth-device-wrapper.d.ts → bluetooth/device-wrapper.d.ts} +11 -11
- package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +35 -39
- package/build/esm/bluetooth/device-wrapper.js.map +1 -0
- package/build/esm/{flashing → bluetooth/flashing}/flashing-full.d.ts +2 -2
- package/build/esm/{flashing → bluetooth/flashing}/flashing-full.js +6 -5
- package/build/esm/bluetooth/flashing/flashing-full.js.map +1 -0
- package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.d.ts +1 -1
- package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
- package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.test.js +2 -2
- package/build/esm/bluetooth/flashing/flashing-makecode.test.js.map +1 -0
- package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.d.ts +2 -2
- package/build/esm/{flashing → bluetooth/flashing}/flashing-partial.js +6 -5
- package/build/esm/bluetooth/flashing/flashing-partial.js.map +1 -0
- package/build/esm/bluetooth/flashing/flashing-v1.js.map +1 -0
- package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.d.ts +2 -2
- package/build/esm/{flashing → bluetooth/flashing}/nordic-dfu.js +15 -11
- package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -0
- package/build/esm/bluetooth/flashing/zip.js.map +1 -0
- package/build/esm/bluetooth/flashing/zip.test.d.ts +1 -0
- package/build/esm/bluetooth/flashing/zip.test.js.map +1 -0
- package/build/esm/bluetooth/index.d.ts +5 -0
- package/build/esm/bluetooth/index.js +5 -0
- package/build/esm/bluetooth/index.js.map +1 -0
- package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +1 -1
- package/build/{cjs/bluetooth-profile.js.map → esm/bluetooth/profile.js.map} +1 -1
- package/build/esm/{accelerometer-service.d.ts → bluetooth/services/accelerometer-service.d.ts} +2 -3
- package/build/esm/{accelerometer-service.js → bluetooth/services/accelerometer-service.js} +11 -6
- package/build/esm/bluetooth/services/accelerometer-service.js.map +1 -0
- package/build/{cjs → esm/bluetooth/services}/button-service.d.ts +2 -3
- package/build/esm/{button-service.js → bluetooth/services/button-service.js} +20 -10
- package/build/esm/bluetooth/services/button-service.js.map +1 -0
- package/build/{cjs → esm/bluetooth/services}/device-information-service.d.ts +1 -1
- package/build/esm/bluetooth/services/device-information-service.js +25 -0
- package/build/esm/bluetooth/services/device-information-service.js.map +1 -0
- package/build/esm/{dfu-service.js → bluetooth/services/dfu-service.js} +1 -1
- package/build/esm/bluetooth/services/dfu-service.js.map +1 -0
- package/build/{cjs → esm/bluetooth/services}/led-service.d.ts +2 -3
- package/build/esm/{led-service.js → bluetooth/services/led-service.js} +4 -1
- package/build/esm/bluetooth/services/led-service.js.map +1 -0
- package/build/esm/{magnetometer-service.d.ts → bluetooth/services/magnetometer-service.d.ts} +2 -3
- package/build/esm/{magnetometer-service.js → bluetooth/services/magnetometer-service.js} +11 -6
- package/build/esm/bluetooth/services/magnetometer-service.js.map +1 -0
- package/build/{cjs → esm/bluetooth/services}/partial-flashing-service.d.ts +1 -1
- package/build/esm/{partial-flashing-service.js → bluetooth/services/partial-flashing-service.js} +4 -4
- package/build/esm/bluetooth/services/partial-flashing-service.js.map +1 -0
- package/build/esm/{uart-service.d.ts → bluetooth/services/uart-service.d.ts} +2 -2
- package/build/esm/{uart-service.js → bluetooth/services/uart-service.js} +18 -6
- package/build/esm/bluetooth/services/uart-service.js.map +1 -0
- package/build/esm/board-id.d.ts +1 -1
- package/build/esm/board-id.js.map +1 -1
- package/build/esm/device.d.ts +145 -123
- package/build/esm/device.js +45 -122
- package/build/esm/device.js.map +1 -1
- package/build/esm/events.d.ts +8 -108
- package/build/esm/events.js +26 -86
- package/build/esm/events.js.map +1 -1
- package/build/esm/events.test.js +55 -49
- package/build/esm/events.test.js.map +1 -1
- package/build/esm/hex-util.d.ts +1 -0
- package/build/esm/hex-util.js +11 -0
- package/build/esm/hex-util.js.map +1 -0
- package/build/esm/index.d.ts +7 -17
- package/build/esm/index.js +6 -11
- package/build/esm/index.js.map +1 -1
- package/build/esm/radio-bridge/connection.d.ts +52 -0
- package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +69 -37
- package/build/esm/radio-bridge/connection.js.map +1 -0
- package/build/esm/radio-bridge/index.d.ts +4 -0
- package/build/esm/radio-bridge/index.js +5 -0
- package/build/esm/radio-bridge/index.js.map +1 -0
- package/build/esm/{usb-serial-protocol.js → radio-bridge/serial-protocol.js} +1 -1
- package/build/esm/radio-bridge/serial-protocol.js.map +1 -0
- package/build/esm/service-events.d.ts +43 -14
- package/build/esm/service-events.js +5 -34
- package/build/esm/service-events.js.map +1 -1
- package/build/{cjs/hex-flash-data-source.d.ts → esm/universal-hex/flash-data-source.d.ts} +1 -2
- package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -13
- package/build/esm/universal-hex/flash-data-source.js.map +1 -0
- package/build/esm/universal-hex/index.d.ts +4 -0
- package/build/esm/universal-hex/index.js +5 -0
- package/build/esm/universal-hex/index.js.map +1 -0
- package/build/esm/usb/arm-debug.d.ts +137 -0
- package/build/esm/usb/arm-debug.js +409 -0
- package/build/esm/usb/arm-debug.js.map +1 -0
- package/build/esm/usb/arm-debug.test.d.ts +1 -0
- package/build/esm/usb/arm-debug.test.js +331 -0
- package/build/esm/usb/arm-debug.test.js.map +1 -0
- package/build/{cjs → esm/usb}/board-serial-info.d.ts +2 -1
- package/build/esm/{board-serial-info.js → usb/board-serial-info.js} +10 -7
- package/build/esm/usb/board-serial-info.js.map +1 -0
- package/build/esm/usb/board-serial-info.test.d.ts +1 -0
- package/build/esm/{board-serial-info.test.js → usb/board-serial-info.test.js} +2 -4
- package/build/esm/usb/board-serial-info.test.js.map +1 -0
- package/build/esm/usb/cdc-saturation.d.ts +36 -0
- package/build/esm/usb/cdc-saturation.js +148 -0
- package/build/esm/usb/cdc-saturation.js.map +1 -0
- package/build/esm/usb/cmsis-dap.d.ts +113 -0
- package/build/esm/usb/cmsis-dap.js +342 -0
- package/build/esm/usb/cmsis-dap.js.map +1 -0
- package/build/esm/usb/cmsis-dap.test.d.ts +1 -0
- package/build/esm/usb/cmsis-dap.test.js +348 -0
- package/build/esm/usb/cmsis-dap.test.js.map +1 -0
- package/build/esm/usb/connection.d.ts +96 -0
- package/build/esm/{usb.js → usb/connection.js} +253 -168
- package/build/esm/usb/connection.js.map +1 -0
- package/build/esm/usb/connection.test.d.ts +1 -0
- package/build/esm/{usb.test.js → usb/connection.test.js} +47 -37
- package/build/esm/usb/connection.test.js.map +1 -0
- package/build/esm/usb/cortex-m.d.ts +72 -0
- package/build/esm/usb/cortex-m.js +161 -0
- package/build/esm/usb/cortex-m.js.map +1 -0
- package/build/esm/usb/cortex-m.test.d.ts +1 -0
- package/build/esm/usb/cortex-m.test.js +215 -0
- package/build/esm/usb/cortex-m.test.js.map +1 -0
- package/build/esm/usb/daplink.d.ts +69 -0
- package/build/esm/usb/daplink.js +231 -0
- package/build/esm/usb/daplink.js.map +1 -0
- package/build/esm/usb/daplink.test.d.ts +1 -0
- package/build/esm/usb/daplink.test.js +288 -0
- package/build/esm/usb/daplink.test.js.map +1 -0
- package/build/esm/usb/device-wrapper.d.ts +34 -0
- package/build/esm/usb/device-wrapper.js +98 -0
- package/build/esm/usb/device-wrapper.js.map +1 -0
- package/build/esm/usb/index.d.ts +5 -0
- package/build/esm/usb/index.js +5 -0
- package/build/esm/usb/index.js.map +1 -0
- package/build/{cjs/usb-partial-flashing-utils.d.ts → esm/usb/partial-flashing-utils.d.ts} +6 -9
- package/build/esm/{usb-partial-flashing-utils.js → usb/partial-flashing-utils.js} +4 -44
- package/build/esm/usb/partial-flashing-utils.js.map +1 -0
- package/build/{cjs/usb-partial-flashing.d.ts → esm/usb/partial-flashing.d.ts} +37 -11
- package/build/esm/{usb-partial-flashing.js → usb/partial-flashing.js} +169 -111
- package/build/esm/usb/partial-flashing.js.map +1 -0
- package/build/esm/usb/promise-queue.js.map +1 -0
- package/build/esm/usb/promise-queue.test.d.ts +1 -0
- package/build/esm/usb/promise-queue.test.js.map +1 -0
- package/build/esm/usb/serial-events.d.ts +16 -0
- package/build/esm/usb/serial-events.js +2 -0
- package/build/esm/usb/serial-events.js.map +1 -0
- package/build/esm/usb/transport.d.ts +42 -0
- package/build/esm/usb/transport.js +151 -0
- package/build/esm/usb/transport.js.map +1 -0
- package/package.json +43 -2
- package/build/cjs/accelerometer-service.js.map +0 -1
- package/build/cjs/accelerometer.d.ts +0 -9
- package/build/cjs/accelerometer.js +0 -16
- package/build/cjs/accelerometer.js.map +0 -1
- package/build/cjs/bluetooth-device-wrapper.js.map +0 -1
- package/build/cjs/bluetooth.d.ts +0 -114
- package/build/cjs/bluetooth.js.map +0 -1
- package/build/cjs/bluetooth.test.js.map +0 -1
- package/build/cjs/board-serial-info.js.map +0 -1
- package/build/cjs/board-serial-info.test.js.map +0 -1
- package/build/cjs/button-service.js.map +0 -1
- package/build/cjs/buttons.d.ts +0 -10
- package/build/cjs/buttons.js +0 -22
- package/build/cjs/buttons.js.map +0 -1
- package/build/cjs/constants.d.ts +0 -48
- package/build/cjs/constants.js +0 -73
- package/build/cjs/constants.js.map +0 -1
- package/build/cjs/device-bond-state.js.map +0 -1
- package/build/cjs/device-information-service.js +0 -34
- package/build/cjs/device-information-service.js.map +0 -1
- package/build/cjs/dfu-service.js.map +0 -1
- package/build/cjs/flashing/flashing-full.js.map +0 -1
- package/build/cjs/flashing/flashing-makecode.js.map +0 -1
- package/build/cjs/flashing/flashing-makecode.test.js.map +0 -1
- package/build/cjs/flashing/flashing-partial.js.map +0 -1
- package/build/cjs/flashing/flashing-v1.js.map +0 -1
- package/build/cjs/flashing/nordic-dfu.js.map +0 -1
- package/build/cjs/flashing/zip.js.map +0 -1
- package/build/cjs/flashing/zip.test.js.map +0 -1
- package/build/cjs/hex-flash-data-source.js.map +0 -1
- package/build/cjs/led-service.js.map +0 -1
- package/build/cjs/led.d.ts +0 -6
- package/build/cjs/led.js.map +0 -1
- package/build/cjs/magnetometer-service.js.map +0 -1
- package/build/cjs/magnetometer.d.ts +0 -9
- package/build/cjs/magnetometer.js +0 -16
- package/build/cjs/magnetometer.js.map +0 -1
- package/build/cjs/partial-flashing-service.js.map +0 -1
- package/build/cjs/promise-queue.js.map +0 -1
- package/build/cjs/promise-queue.test.js.map +0 -1
- package/build/cjs/serial-events.d.ts +0 -20
- package/build/cjs/serial-events.js +0 -69
- package/build/cjs/serial-events.js.map +0 -1
- package/build/cjs/uart-service.js.map +0 -1
- package/build/cjs/uart.d.ts +0 -4
- package/build/cjs/uart.js +0 -16
- package/build/cjs/uart.js.map +0 -1
- package/build/cjs/usb-device-wrapper.d.ts +0 -47
- package/build/cjs/usb-device-wrapper.js +0 -437
- package/build/cjs/usb-device-wrapper.js.map +0 -1
- package/build/cjs/usb-partial-flashing-utils.js.map +0 -1
- package/build/cjs/usb-partial-flashing.js.map +0 -1
- package/build/cjs/usb-radio-bridge.d.ts +0 -24
- package/build/cjs/usb-radio-bridge.js.map +0 -1
- package/build/cjs/usb-serial-protocol.js.map +0 -1
- package/build/cjs/usb.d.ts +0 -66
- package/build/cjs/usb.js.map +0 -1
- package/build/cjs/usb.test.js.map +0 -1
- package/build/esm/accelerometer-service.js.map +0 -1
- package/build/esm/accelerometer.d.ts +0 -9
- package/build/esm/accelerometer.js +0 -12
- package/build/esm/accelerometer.js.map +0 -1
- package/build/esm/bluetooth-device-wrapper.js.map +0 -1
- package/build/esm/bluetooth-profile.js.map +0 -1
- package/build/esm/bluetooth.d.ts +0 -114
- package/build/esm/bluetooth.js.map +0 -1
- package/build/esm/bluetooth.test.js.map +0 -1
- package/build/esm/board-serial-info.js.map +0 -1
- package/build/esm/board-serial-info.test.js.map +0 -1
- package/build/esm/button-service.js.map +0 -1
- package/build/esm/buttons.d.ts +0 -10
- package/build/esm/buttons.js +0 -18
- package/build/esm/buttons.js.map +0 -1
- package/build/esm/constants.d.ts +0 -48
- package/build/esm/constants.js +0 -70
- package/build/esm/constants.js.map +0 -1
- package/build/esm/device-bond-state.js.map +0 -1
- package/build/esm/device-information-service.js +0 -30
- package/build/esm/device-information-service.js.map +0 -1
- package/build/esm/dfu-service.js.map +0 -1
- package/build/esm/flashing/flashing-full.js.map +0 -1
- package/build/esm/flashing/flashing-makecode.js.map +0 -1
- package/build/esm/flashing/flashing-makecode.test.js.map +0 -1
- package/build/esm/flashing/flashing-partial.js.map +0 -1
- package/build/esm/flashing/flashing-v1.js.map +0 -1
- package/build/esm/flashing/nordic-dfu.js.map +0 -1
- package/build/esm/flashing/zip.js.map +0 -1
- package/build/esm/flashing/zip.test.js.map +0 -1
- package/build/esm/hex-flash-data-source.js.map +0 -1
- package/build/esm/led-service.js.map +0 -1
- package/build/esm/led.d.ts +0 -6
- package/build/esm/led.js +0 -2
- package/build/esm/led.js.map +0 -1
- package/build/esm/magnetometer-service.js.map +0 -1
- package/build/esm/magnetometer.d.ts +0 -9
- package/build/esm/magnetometer.js +0 -12
- package/build/esm/magnetometer.js.map +0 -1
- package/build/esm/partial-flashing-service.js.map +0 -1
- package/build/esm/promise-queue.js.map +0 -1
- package/build/esm/promise-queue.test.js.map +0 -1
- package/build/esm/serial-events.d.ts +0 -20
- package/build/esm/serial-events.js +0 -61
- package/build/esm/serial-events.js.map +0 -1
- package/build/esm/uart-service.js.map +0 -1
- package/build/esm/uart.d.ts +0 -4
- package/build/esm/uart.js +0 -12
- package/build/esm/uart.js.map +0 -1
- package/build/esm/usb-device-wrapper.d.ts +0 -47
- package/build/esm/usb-device-wrapper.js +0 -410
- package/build/esm/usb-device-wrapper.js.map +0 -1
- package/build/esm/usb-partial-flashing-utils.js.map +0 -1
- package/build/esm/usb-partial-flashing.js.map +0 -1
- package/build/esm/usb-radio-bridge.d.ts +0 -24
- package/build/esm/usb-radio-bridge.js.map +0 -1
- package/build/esm/usb-serial-protocol.js.map +0 -1
- package/build/esm/usb.d.ts +0 -66
- package/build/esm/usb.js.map +0 -1
- package/build/esm/usb.test.js.map +0 -1
- /package/build/cjs/{bluetooth.test.d.ts → bluetooth/connection.test.d.ts} +0 -0
- /package/build/cjs/{device-bond-state.d.ts → bluetooth/device-bond-state.d.ts} +0 -0
- /package/build/cjs/{device-bond-state.js → bluetooth/device-bond-state.js} +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.test.d.ts +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/zip.js +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/zip.test.d.ts +0 -0
- /package/build/cjs/{flashing → bluetooth/flashing}/zip.test.js +0 -0
- /package/build/cjs/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +0 -0
- /package/build/cjs/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
- /package/build/cjs/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
- /package/build/cjs/{board-serial-info.test.d.ts → usb/arm-debug.test.d.ts} +0 -0
- /package/build/{esm → cjs/usb}/board-serial-info.test.d.ts +0 -0
- /package/build/cjs/{promise-queue.test.d.ts → usb/cmsis-dap.test.d.ts} +0 -0
- /package/build/cjs/{usb.test.d.ts → usb/connection.test.d.ts} +0 -0
- /package/build/{esm/bluetooth.test.d.ts → cjs/usb/cortex-m.test.d.ts} +0 -0
- /package/build/{esm/flashing/flashing-makecode.test.d.ts → cjs/usb/daplink.test.d.ts} +0 -0
- /package/build/cjs/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
- /package/build/cjs/{promise-queue.js → usb/promise-queue.js} +0 -0
- /package/build/{esm → cjs/usb}/promise-queue.test.d.ts +0 -0
- /package/build/cjs/{promise-queue.test.js → usb/promise-queue.test.js} +0 -0
- /package/build/esm/{flashing/zip.test.d.ts → bluetooth/connection.test.d.ts} +0 -0
- /package/build/esm/{device-bond-state.d.ts → bluetooth/device-bond-state.d.ts} +0 -0
- /package/build/esm/{device-bond-state.js → bluetooth/device-bond-state.js} +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +0 -0
- /package/build/esm/{usb.test.d.ts → bluetooth/flashing/flashing-makecode.test.d.ts} +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.d.ts +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/flashing-v1.js +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/zip.d.ts +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/zip.js +0 -0
- /package/build/esm/{flashing → bluetooth/flashing}/zip.test.js +0 -0
- /package/build/esm/{bluetooth-profile.d.ts → bluetooth/profile.d.ts} +0 -0
- /package/build/esm/{dfu-service.d.ts → bluetooth/services/dfu-service.d.ts} +0 -0
- /package/build/esm/{usb-serial-protocol.d.ts → radio-bridge/serial-protocol.d.ts} +0 -0
- /package/build/esm/{promise-queue.d.ts → usb/promise-queue.d.ts} +0 -0
- /package/build/esm/{promise-queue.js → usb/promise-queue.js} +0 -0
- /package/build/esm/{promise-queue.test.js → usb/promise-queue.test.js} +0 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { DapError } from "./cmsis-dap.js";
|
|
3
|
+
import { CoreRegister, CortexM, DEMCR, DHCSR, NVIC_AIRCR, REGWnR, S_HALT, S_REGRDY, } from "./cortex-m.js";
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Mock ADI
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
function createMockAdi() {
|
|
8
|
+
const mem32 = new Map();
|
|
9
|
+
const writtenMem32 = [];
|
|
10
|
+
const mockDap = {
|
|
11
|
+
isOpen: true,
|
|
12
|
+
blockSize: 59,
|
|
13
|
+
send: vi.fn(),
|
|
14
|
+
clearAbort: vi.fn(),
|
|
15
|
+
swjSequence: vi.fn(),
|
|
16
|
+
swjClock: vi.fn(),
|
|
17
|
+
connect: vi.fn(),
|
|
18
|
+
disconnect: vi.fn(),
|
|
19
|
+
configureTransfer: vi.fn(),
|
|
20
|
+
open: vi.fn(),
|
|
21
|
+
close: vi.fn(),
|
|
22
|
+
transfer: vi.fn(),
|
|
23
|
+
transferBlockRead: vi.fn(),
|
|
24
|
+
transferBlockWrite: vi.fn(),
|
|
25
|
+
drainStaleResponses: vi.fn(),
|
|
26
|
+
};
|
|
27
|
+
const mock = {
|
|
28
|
+
dap: mockDap,
|
|
29
|
+
get isOpen() {
|
|
30
|
+
return true;
|
|
31
|
+
},
|
|
32
|
+
mem32,
|
|
33
|
+
writtenMem32,
|
|
34
|
+
writtenBlocks: [],
|
|
35
|
+
transferSequenceCalls: [],
|
|
36
|
+
readMem32: vi.fn(async (address) => {
|
|
37
|
+
return mem32.get(address) ?? 0;
|
|
38
|
+
}),
|
|
39
|
+
writeMem32: vi.fn(async (address, value) => {
|
|
40
|
+
writtenMem32.push({ address, value });
|
|
41
|
+
mem32.set(address, value);
|
|
42
|
+
}),
|
|
43
|
+
readMem32Ops: vi.fn((address) => [
|
|
44
|
+
{ port: 0, mode: 0x02, register: 0, value: address },
|
|
45
|
+
]),
|
|
46
|
+
writeMem32Ops: vi.fn((address, value) => [
|
|
47
|
+
{ port: 0, mode: 0x00, register: 0, value: address },
|
|
48
|
+
{ port: 0, mode: 0x00, register: 0, value },
|
|
49
|
+
]),
|
|
50
|
+
readBlock: vi.fn(),
|
|
51
|
+
writeBlock: vi.fn(async (address, values) => {
|
|
52
|
+
mock.writtenBlocks.push({ address, values });
|
|
53
|
+
}),
|
|
54
|
+
transferSequence: vi.fn(async (groups) => {
|
|
55
|
+
mock.transferSequenceCalls.push(groups);
|
|
56
|
+
// Return S_REGRDY for readCoreRegister/writeCoreRegister
|
|
57
|
+
return new Uint32Array([S_REGRDY, 0x42]);
|
|
58
|
+
}),
|
|
59
|
+
resetState: vi.fn(),
|
|
60
|
+
connect: vi.fn(),
|
|
61
|
+
disconnect: vi.fn(),
|
|
62
|
+
reinit: vi.fn(),
|
|
63
|
+
};
|
|
64
|
+
return mock;
|
|
65
|
+
}
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Tests
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
describe("CortexM", () => {
|
|
70
|
+
let adi;
|
|
71
|
+
let cortex;
|
|
72
|
+
beforeEach(() => {
|
|
73
|
+
adi = createMockAdi();
|
|
74
|
+
cortex = new CortexM(adi);
|
|
75
|
+
});
|
|
76
|
+
describe("isHalted", () => {
|
|
77
|
+
it("returns true when S_HALT is set", async () => {
|
|
78
|
+
adi.mem32.set(DHCSR, S_HALT);
|
|
79
|
+
expect(await cortex.isHalted()).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("returns false when S_HALT is not set", async () => {
|
|
82
|
+
adi.mem32.set(DHCSR, 0);
|
|
83
|
+
expect(await cortex.isHalted()).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe("halt", () => {
|
|
87
|
+
it("writes halt request to DHCSR", async () => {
|
|
88
|
+
adi.mem32.set(DHCSR, 0); // not halted initially
|
|
89
|
+
// After the write, simulate halted state for the wait
|
|
90
|
+
vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
|
|
91
|
+
adi.writtenMem32.push({ address: addr, value: val });
|
|
92
|
+
if (addr === DHCSR)
|
|
93
|
+
adi.mem32.set(DHCSR, S_HALT);
|
|
94
|
+
});
|
|
95
|
+
await cortex.halt();
|
|
96
|
+
const dhcsrWrite = adi.writtenMem32.find((w) => w.address === DHCSR);
|
|
97
|
+
expect(dhcsrWrite).toBeDefined();
|
|
98
|
+
// Should have C_DEBUGEN and C_HALT bits set with DBGKEY
|
|
99
|
+
expect(dhcsrWrite.value & 0x03).toBe(0x03);
|
|
100
|
+
});
|
|
101
|
+
it("skips if already halted", async () => {
|
|
102
|
+
adi.mem32.set(DHCSR, S_HALT);
|
|
103
|
+
await cortex.halt();
|
|
104
|
+
expect(adi.writeMem32).not.toHaveBeenCalled();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("resume", () => {
|
|
108
|
+
it("clears halt and enables debug", async () => {
|
|
109
|
+
adi.mem32.set(DHCSR, S_HALT); // halted initially
|
|
110
|
+
// After writes, simulate running state
|
|
111
|
+
vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
|
|
112
|
+
adi.writtenMem32.push({ address: addr, value: val });
|
|
113
|
+
if (addr === DHCSR)
|
|
114
|
+
adi.mem32.set(DHCSR, 0); // now running
|
|
115
|
+
});
|
|
116
|
+
await cortex.resume();
|
|
117
|
+
// Should have written to DFSR and DHCSR
|
|
118
|
+
expect(adi.writtenMem32.length).toBeGreaterThanOrEqual(2);
|
|
119
|
+
});
|
|
120
|
+
it("skips if not halted", async () => {
|
|
121
|
+
adi.mem32.set(DHCSR, 0);
|
|
122
|
+
await cortex.resume();
|
|
123
|
+
expect(adi.writeMem32).not.toHaveBeenCalled();
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe("readCoreRegister", () => {
|
|
127
|
+
it("reads register via DCRSR/DCRDR sequence", async () => {
|
|
128
|
+
const value = await cortex.readCoreRegister(CoreRegister.PC);
|
|
129
|
+
expect(adi.transferSequence).toHaveBeenCalled();
|
|
130
|
+
const groups = adi.transferSequenceCalls[0];
|
|
131
|
+
// First group: write DCRSR with register index
|
|
132
|
+
const dcrsrOps = groups[0];
|
|
133
|
+
expect(dcrsrOps.some((op) => op.value === CoreRegister.PC)).toBe(true);
|
|
134
|
+
// Return value comes from the result
|
|
135
|
+
expect(value).toBe(0x42);
|
|
136
|
+
});
|
|
137
|
+
it("throws when S_REGRDY is not set", async () => {
|
|
138
|
+
vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0, 0x42]));
|
|
139
|
+
await expect(cortex.readCoreRegister(CoreRegister.PC)).rejects.toThrow(DapError);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe("writeCoreRegister", () => {
|
|
143
|
+
it("writes register via DCRDR/DCRSR sequence", async () => {
|
|
144
|
+
await cortex.writeCoreRegister(CoreRegister.SP, 0x20001000);
|
|
145
|
+
expect(adi.transferSequence).toHaveBeenCalled();
|
|
146
|
+
const groups = adi.transferSequenceCalls[0];
|
|
147
|
+
// First group: write DCRDR with value
|
|
148
|
+
const dcrdOps = groups[0];
|
|
149
|
+
expect(dcrdOps.some((op) => op.value === 0x20001000)).toBe(true);
|
|
150
|
+
// Second group: write DCRSR with register | REGWnR
|
|
151
|
+
const dcrsrOps = groups[1];
|
|
152
|
+
expect(dcrsrOps.some((op) => op.value === (CoreRegister.SP | REGWnR))).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
it("throws when S_REGRDY is not set", async () => {
|
|
155
|
+
vi.mocked(adi.transferSequence).mockResolvedValueOnce(new Uint32Array([0]));
|
|
156
|
+
await expect(cortex.writeCoreRegister(CoreRegister.SP, 0x20001000)).rejects.toThrow(DapError);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe("softwareReset", () => {
|
|
160
|
+
it("writes reset request to NVIC_AIRCR", async () => {
|
|
161
|
+
// After reset, S_RESET_ST should clear
|
|
162
|
+
adi.mem32.set(DHCSR, 0);
|
|
163
|
+
await cortex.softwareReset();
|
|
164
|
+
const aircrWrite = adi.writtenMem32.find((w) => w.address === NVIC_AIRCR);
|
|
165
|
+
expect(aircrWrite).toBeDefined();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe("reset", () => {
|
|
169
|
+
it("without halt: just does software reset", async () => {
|
|
170
|
+
adi.mem32.set(DHCSR, 0);
|
|
171
|
+
await cortex.reset(false);
|
|
172
|
+
const aircrWrite = adi.writtenMem32.find((w) => w.address === NVIC_AIRCR);
|
|
173
|
+
expect(aircrWrite).toBeDefined();
|
|
174
|
+
// No DEMCR writes for non-halt reset
|
|
175
|
+
const demcrWrite = adi.writtenMem32.find((w) => w.address === DEMCR);
|
|
176
|
+
expect(demcrWrite).toBeUndefined();
|
|
177
|
+
});
|
|
178
|
+
it("with halt: sets vector catch, resets, waits for halt, restores DEMCR", async () => {
|
|
179
|
+
// Start halted so halt() is a no-op
|
|
180
|
+
adi.mem32.set(DHCSR, S_HALT);
|
|
181
|
+
adi.mem32.set(DEMCR, 0);
|
|
182
|
+
await cortex.reset(true);
|
|
183
|
+
// Should have written DEMCR with VC_CORERESET
|
|
184
|
+
const demcrWrites = adi.writtenMem32.filter((w) => w.address === DEMCR);
|
|
185
|
+
expect(demcrWrites.length).toBeGreaterThanOrEqual(2);
|
|
186
|
+
// First write enables VC_CORERESET (bit 0)
|
|
187
|
+
expect(demcrWrites[0].value & 1).toBe(1);
|
|
188
|
+
// Last write restores original DEMCR (0)
|
|
189
|
+
expect(demcrWrites[demcrWrites.length - 1].value).toBe(0);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe("execute", () => {
|
|
193
|
+
it("uploads code, sets registers, resumes, and waits for halt", async () => {
|
|
194
|
+
// Start not halted, then halt when halt() is called
|
|
195
|
+
adi.mem32.set(DHCSR, 0);
|
|
196
|
+
vi.mocked(adi.writeMem32).mockImplementation(async (addr, val) => {
|
|
197
|
+
adi.writtenMem32.push({ address: addr, value: val });
|
|
198
|
+
if (addr === DHCSR)
|
|
199
|
+
adi.mem32.set(DHCSR, S_HALT);
|
|
200
|
+
});
|
|
201
|
+
const code = new Uint32Array([0xbe00be00, 0x12345678]);
|
|
202
|
+
await cortex.execute(0x20000000, code, 0x20001000, 0x20000005, 0x20000001);
|
|
203
|
+
// Code uploaded via writeBlock
|
|
204
|
+
expect(adi.writeBlock).toHaveBeenCalledWith(0x20000000, code);
|
|
205
|
+
// Core registers set via transferSequence (PC, LR, SP, PSR = 4 writes)
|
|
206
|
+
expect(adi.transferSequence).toHaveBeenCalled();
|
|
207
|
+
});
|
|
208
|
+
it("throws if too many general purpose registers", async () => {
|
|
209
|
+
const code = new Uint32Array([0]);
|
|
210
|
+
const tooMany = new Array(13).fill(0);
|
|
211
|
+
await expect(cortex.execute(0x20000000, code, 0, 0, 0, ...tooMany)).rejects.toThrow("Only 12 general purpose registers");
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=cortex-m.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cortex-m.test.js","sourceRoot":"","sources":["../../../src/usb/cortex-m.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2026, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* Derived from dapjs (https://github.com/ARMmbed/dapjs) which is
|
|
5
|
+
* Copyright (c) Arm Limited 2018
|
|
6
|
+
* Copyright (c) Microsoft Corporation
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: MIT
|
|
9
|
+
*
|
|
10
|
+
* See arm-debug.ts for the full dapjs license.
|
|
11
|
+
*
|
|
12
|
+
* DAPLink serial and flash access via CMSIS-DAP vendor commands.
|
|
13
|
+
*
|
|
14
|
+
* DAPLink is the interface firmware running on the micro:bit's debug chip
|
|
15
|
+
* (KL27). It extends the standard CMSIS-DAP protocol with vendor-specific
|
|
16
|
+
* commands (0x80+) for:
|
|
17
|
+
*
|
|
18
|
+
* - UART serial pass-through (DapLinkSerial): reading/writing serial data
|
|
19
|
+
* to the target micro:bit's UART, with configurable baud rate and
|
|
20
|
+
* polling-based read loop.
|
|
21
|
+
*
|
|
22
|
+
* - Hex-file flash streaming (dapLinkFlash): streaming Intel HEX data to
|
|
23
|
+
* DAPLink which handles erasing, programming, and verifying flash pages.
|
|
24
|
+
* This is the "full flash" path — as opposed to partial flashing which
|
|
25
|
+
* writes individual pages via SWD.
|
|
26
|
+
*/
|
|
27
|
+
import { Logging } from "../logging.js";
|
|
28
|
+
import { type ArmDebug } from "./arm-debug.js";
|
|
29
|
+
import { type CmsisDap } from "./cmsis-dap.js";
|
|
30
|
+
/** Read the DAPLink unique ID (same string as USB serial number). */
|
|
31
|
+
export declare const DAPLINK_VENDOR_READ_UNIQUE_ID = 128;
|
|
32
|
+
export declare const DAPLINK_VENDOR_READ_SETTINGS = 129;
|
|
33
|
+
export declare const DAPLINK_VENDOR_WRITE_SETTINGS = 130;
|
|
34
|
+
export declare const DAPLINK_VENDOR_SERIAL_READ = 131;
|
|
35
|
+
export declare const DAPLINK_VENDOR_SERIAL_WRITE = 132;
|
|
36
|
+
export declare const DAPLINK_VENDOR_FLASH_RESET = 137;
|
|
37
|
+
export declare const DAPLINK_VENDOR_FLASH_OPEN = 138;
|
|
38
|
+
export declare const DAPLINK_VENDOR_FLASH_CLOSE = 139;
|
|
39
|
+
export declare const DAPLINK_VENDOR_FLASH_WRITE = 140;
|
|
40
|
+
export declare class DapLinkSerial {
|
|
41
|
+
private dap;
|
|
42
|
+
private logging;
|
|
43
|
+
private polling;
|
|
44
|
+
constructor(dap: CmsisDap, logging: Logging);
|
|
45
|
+
getBaudrate(): Promise<number>;
|
|
46
|
+
setBaudrate(baudrate: number): Promise<void>;
|
|
47
|
+
read(): Promise<string | undefined>;
|
|
48
|
+
write(data: string): Promise<void>;
|
|
49
|
+
startPolling(onData: (data: string) => void, serialDelay?: number): Promise<void>;
|
|
50
|
+
stopPolling(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Drain any buffered serial data from DAPLink's UART ring buffer.
|
|
53
|
+
* Reads and discards until empty.
|
|
54
|
+
*/
|
|
55
|
+
drain(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export declare function dapLinkFlash(adi: ArmDebug, buffer: Uint8Array, onProgress?: (progress: number) => void): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Read the DAPLink unique ID via vendor command 0x80. Returns the same
|
|
60
|
+
* 48-char hex string as the USB serial number but isn't affected by
|
|
61
|
+
* browser anti-fingerprinting.
|
|
62
|
+
*/
|
|
63
|
+
export declare function readDaplinkUniqueId(dap: CmsisDap, logging: Logging): Promise<string | undefined>;
|
|
64
|
+
/**
|
|
65
|
+
* Read a 32-bit word from memory, retrying on transfer errors.
|
|
66
|
+
* Useful for reads immediately after reset when the target may not
|
|
67
|
+
* be ready to respond.
|
|
68
|
+
*/
|
|
69
|
+
export declare function readMem32WithRetry(adi: ArmDebug, address: number, logging: Logging, maxRetries?: number, delayMs?: number): Promise<number>;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2026, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* Derived from dapjs (https://github.com/ARMmbed/dapjs) which is
|
|
5
|
+
* Copyright (c) Arm Limited 2018
|
|
6
|
+
* Copyright (c) Microsoft Corporation
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: MIT
|
|
9
|
+
*
|
|
10
|
+
* See arm-debug.ts for the full dapjs license.
|
|
11
|
+
*
|
|
12
|
+
* DAPLink serial and flash access via CMSIS-DAP vendor commands.
|
|
13
|
+
*
|
|
14
|
+
* DAPLink is the interface firmware running on the micro:bit's debug chip
|
|
15
|
+
* (KL27). It extends the standard CMSIS-DAP protocol with vendor-specific
|
|
16
|
+
* commands (0x80+) for:
|
|
17
|
+
*
|
|
18
|
+
* - UART serial pass-through (DapLinkSerial): reading/writing serial data
|
|
19
|
+
* to the target micro:bit's UART, with configurable baud rate and
|
|
20
|
+
* polling-based read loop.
|
|
21
|
+
*
|
|
22
|
+
* - Hex-file flash streaming (dapLinkFlash): streaming Intel HEX data to
|
|
23
|
+
* DAPLink which handles erasing, programming, and verifying flash pages.
|
|
24
|
+
* This is the "full flash" path — as opposed to partial flashing which
|
|
25
|
+
* writes individual pages via SWD.
|
|
26
|
+
*/
|
|
27
|
+
import { DapError, DapTransferError } from "./cmsis-dap.js";
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Constants
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// DAPLink vendor commands
|
|
32
|
+
// https://github.com/ARMmbed/DAPLink/blob/main/source/daplink/cmsis-dap/daplink_vendor_commands.h
|
|
33
|
+
/** Read the DAPLink unique ID (same string as USB serial number). */
|
|
34
|
+
export const DAPLINK_VENDOR_READ_UNIQUE_ID = 0x80;
|
|
35
|
+
export const DAPLINK_VENDOR_READ_SETTINGS = 0x81;
|
|
36
|
+
export const DAPLINK_VENDOR_WRITE_SETTINGS = 0x82;
|
|
37
|
+
export const DAPLINK_VENDOR_SERIAL_READ = 0x83;
|
|
38
|
+
export const DAPLINK_VENDOR_SERIAL_WRITE = 0x84;
|
|
39
|
+
export const DAPLINK_VENDOR_FLASH_RESET = 0x89;
|
|
40
|
+
export const DAPLINK_VENDOR_FLASH_OPEN = 0x8a;
|
|
41
|
+
export const DAPLINK_VENDOR_FLASH_CLOSE = 0x8b;
|
|
42
|
+
export const DAPLINK_VENDOR_FLASH_WRITE = 0x8c;
|
|
43
|
+
// DAPLink stream error codes (error_t in DAPLink's error.h).
|
|
44
|
+
// stream_write returns these to indicate success variants.
|
|
45
|
+
const DAPLINK_ERROR_SUCCESS = 0;
|
|
46
|
+
const DAPLINK_ERROR_SUCCESS_DONE = 18;
|
|
47
|
+
// Default flash page size for DAPLink write chunks
|
|
48
|
+
const DAPLINK_FLASH_PAGE_SIZE = 62;
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// DapLinkSerial — vendor commands for UART serial access
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
export class DapLinkSerial {
|
|
53
|
+
constructor(dap, logging) {
|
|
54
|
+
Object.defineProperty(this, "dap", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true,
|
|
58
|
+
value: dap
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(this, "logging", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
configurable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
value: logging
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(this, "polling", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
configurable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value: false
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async getBaudrate() {
|
|
74
|
+
const result = await this.dap.send(DAPLINK_VENDOR_READ_SETTINGS);
|
|
75
|
+
return result.getUint32(1, true);
|
|
76
|
+
}
|
|
77
|
+
async setBaudrate(baudrate) {
|
|
78
|
+
await this.dap.send(DAPLINK_VENDOR_WRITE_SETTINGS, new Uint8Array(new Uint32Array([baudrate]).buffer));
|
|
79
|
+
}
|
|
80
|
+
async read() {
|
|
81
|
+
const result = await this.dap.send(DAPLINK_VENDOR_SERIAL_READ);
|
|
82
|
+
const length = result.getUint8(1);
|
|
83
|
+
if (length === 0)
|
|
84
|
+
return undefined;
|
|
85
|
+
const bytes = new Uint8Array(result.buffer, 2, length);
|
|
86
|
+
return new TextDecoder().decode(bytes);
|
|
87
|
+
}
|
|
88
|
+
async write(data) {
|
|
89
|
+
const encoded = new TextEncoder().encode(data);
|
|
90
|
+
const payload = new Uint8Array(encoded.length + 1);
|
|
91
|
+
payload[0] = encoded.length;
|
|
92
|
+
payload.set(encoded, 1);
|
|
93
|
+
await this.dap.send(DAPLINK_VENDOR_SERIAL_WRITE, payload);
|
|
94
|
+
}
|
|
95
|
+
async startPolling(onData, serialDelay = 100) {
|
|
96
|
+
this.polling = true;
|
|
97
|
+
try {
|
|
98
|
+
while (this.polling) {
|
|
99
|
+
const data = await this.read();
|
|
100
|
+
if (data !== undefined && this.polling) {
|
|
101
|
+
onData(data);
|
|
102
|
+
}
|
|
103
|
+
await new Promise((resolve) => setTimeout(resolve, serialDelay));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
this.polling = false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
stopPolling() {
|
|
111
|
+
this.polling = false;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Drain any buffered serial data from DAPLink's UART ring buffer.
|
|
115
|
+
* Reads and discards until empty.
|
|
116
|
+
*/
|
|
117
|
+
async drain() {
|
|
118
|
+
let totalDrained = 0;
|
|
119
|
+
while (true) {
|
|
120
|
+
const data = await this.read();
|
|
121
|
+
if (!data)
|
|
122
|
+
break;
|
|
123
|
+
totalDrained += data.length;
|
|
124
|
+
}
|
|
125
|
+
if (totalDrained > 0) {
|
|
126
|
+
this.logging.log(`Drained ${totalDrained} bytes of stale serial data`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// dapLinkFlash — vendor commands for flash streaming
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
export async function dapLinkFlash(adi, buffer, onProgress) {
|
|
134
|
+
const { dap } = adi;
|
|
135
|
+
const arrayBuffer = buffer.buffer;
|
|
136
|
+
// Stream type 1 = Intel HEX (the only format we use).
|
|
137
|
+
// DAPLink vendor commands return an error_t status in byte 1:
|
|
138
|
+
// 0 = ERROR_SUCCESS, 18 = ERROR_SUCCESS_DONE, 19 = ERROR_SUCCESS_DONE_OR_CONTINUE
|
|
139
|
+
const openResult = await dap.send(DAPLINK_VENDOR_FLASH_OPEN, new Uint8Array(new Uint32Array([1]).buffer));
|
|
140
|
+
if (openResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
|
|
141
|
+
throw new DapError(`Flash open error (status=${openResult.getUint8(1)})`);
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
// We intentionally don't check FLASH_WRITE status for errors. V1
|
|
145
|
+
// micro:bit DAPLink reports ERROR_ERASE_SECTOR (16) late in the
|
|
146
|
+
// flash but the write still succeeds. dapjs never checked these.
|
|
147
|
+
let offset = 0;
|
|
148
|
+
while (offset < arrayBuffer.byteLength) {
|
|
149
|
+
const end = Math.min(arrayBuffer.byteLength, offset + DAPLINK_FLASH_PAGE_SIZE);
|
|
150
|
+
const page = arrayBuffer.slice(offset, end);
|
|
151
|
+
const data = new Uint8Array(page.byteLength + 1);
|
|
152
|
+
data[0] = page.byteLength;
|
|
153
|
+
data.set(new Uint8Array(page), 1);
|
|
154
|
+
const writeResult = await dap.send(DAPLINK_VENDOR_FLASH_WRITE, data);
|
|
155
|
+
onProgress?.(offset / arrayBuffer.byteLength);
|
|
156
|
+
offset = end;
|
|
157
|
+
// DAPLink signals hex EOF with ERROR_SUCCESS_DONE (18).
|
|
158
|
+
if (writeResult.getUint8(1) === DAPLINK_ERROR_SUCCESS_DONE)
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
onProgress?.(1.0);
|
|
162
|
+
const closeResult = await dap.send(DAPLINK_VENDOR_FLASH_CLOSE);
|
|
163
|
+
if (closeResult.getUint8(1) !== DAPLINK_ERROR_SUCCESS) {
|
|
164
|
+
throw new DapError(`Flash close error (status=${closeResult.getUint8(1)})`);
|
|
165
|
+
}
|
|
166
|
+
await dap.send(DAPLINK_VENDOR_FLASH_RESET);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
try {
|
|
170
|
+
await dap.send(DAPLINK_VENDOR_FLASH_CLOSE);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
/* ignore */
|
|
174
|
+
}
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
adi.resetState();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
// DAPLink utilities
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
/**
|
|
185
|
+
* Read the DAPLink unique ID via vendor command 0x80. Returns the same
|
|
186
|
+
* 48-char hex string as the USB serial number but isn't affected by
|
|
187
|
+
* browser anti-fingerprinting.
|
|
188
|
+
*/
|
|
189
|
+
export async function readDaplinkUniqueId(dap, logging) {
|
|
190
|
+
try {
|
|
191
|
+
const result = await dap.send(DAPLINK_VENDOR_READ_UNIQUE_ID);
|
|
192
|
+
const length = result.getUint8(1);
|
|
193
|
+
if (length === 0) {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
const bytes = new Uint8Array(result.buffer, 2, length);
|
|
197
|
+
return new TextDecoder().decode(bytes);
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
logging.log(`Error reading DAPLink unique ID: ${e instanceof Error ? e.message : e}`);
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Read a 32-bit word from memory, retrying on transfer errors.
|
|
206
|
+
* Useful for reads immediately after reset when the target may not
|
|
207
|
+
* be ready to respond.
|
|
208
|
+
*/
|
|
209
|
+
export async function readMem32WithRetry(adi, address, logging, maxRetries = 20, delayMs = 20) {
|
|
210
|
+
let lastError;
|
|
211
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
212
|
+
try {
|
|
213
|
+
const value = await adi.readMem32(address);
|
|
214
|
+
if (attempt > 0) {
|
|
215
|
+
logging.log(`readMem32(0x${address.toString(16)}) succeeded after ${attempt + 1} attempts`);
|
|
216
|
+
}
|
|
217
|
+
return value;
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
if (e instanceof DapTransferError) {
|
|
221
|
+
lastError = e;
|
|
222
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
throw e;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
throw lastError;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=daplink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daplink.js","sourceRoot":"","sources":["../../../src/usb/daplink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|