@microbit/microbit-connection 0.9.0-apps.alpha.9 → 1.0.0-beta.1
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/README.md +106 -27
- 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/availability.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 +378 -0
- package/build/cjs/bluetooth/connection.js +623 -0
- package/build/cjs/bluetooth/connection.js.map +1 -0
- package/build/cjs/bluetooth/device-bond-state.d.ts +14 -0
- package/build/cjs/bluetooth/device-bond-state.js +26 -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} +36 -21
- package/build/cjs/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +174 -147
- package/build/cjs/bluetooth/device-wrapper.js.map +1 -0
- package/build/{esm → cjs/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/bluetooth/flashing/flashing-makecode.d.ts +10 -0
- package/build/cjs/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
- package/build/cjs/bluetooth/flashing/flashing-makecode.js.map +1 -0
- package/build/cjs/bluetooth/flashing/flashing-partial.d.ts +10 -0
- package/build/cjs/bluetooth/flashing/flashing-partial.js +145 -0
- 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 +41 -15
- 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/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.d.ts → bluetooth/profile.d.ts} +8 -0
- package/build/cjs/{bluetooth-profile.js → bluetooth/profile.js} +7 -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/cjs/bluetooth/services/event-service.d.ts +48 -0
- package/build/cjs/bluetooth/services/event-service.js +273 -0
- package/build/cjs/bluetooth/services/event-service.js.map +1 -0
- package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
- package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
- package/build/cjs/bluetooth/services/io-pin-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/bluetooth/services/temperature-service.d.ts +14 -0
- package/build/cjs/bluetooth/services/temperature-service.js +80 -0
- package/build/cjs/bluetooth/services/temperature-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 +191 -101
- package/build/cjs/device.js +47 -110
- 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/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 +8 -16
- package/build/cjs/index.js +9 -28
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/logging.js.map +1 -1
- package/build/cjs/microbit-events.d.ts +67 -0
- package/build/cjs/microbit-events.js +55 -0
- package/build/cjs/microbit-events.js.map +1 -0
- package/build/cjs/radio-bridge/connection.d.ts +52 -0
- package/build/cjs/{usb-radio-bridge.js → radio-bridge/connection.js} +84 -96
- 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 +92 -15
- 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 -1
- package/build/cjs/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
- 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/{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/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/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/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/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/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 -134
- package/build/cjs/usb/partial-flashing.js.map +1 -0
- package/build/cjs/usb/promise-queue.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/availability.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 +378 -0
- package/build/esm/bluetooth/connection.js +593 -0
- package/build/esm/bluetooth/connection.js.map +1 -0
- package/build/esm/bluetooth/device-bond-state.d.ts +14 -0
- package/build/esm/bluetooth/device-bond-state.js +22 -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} +36 -21
- package/build/esm/{bluetooth-device-wrapper.js → bluetooth/device-wrapper.js} +172 -146
- package/build/esm/bluetooth/device-wrapper.js.map +1 -0
- package/build/{cjs → esm/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/bluetooth/flashing/flashing-makecode.d.ts +10 -0
- package/build/esm/{flashing → bluetooth/flashing}/flashing-makecode.js +5 -2
- package/build/esm/bluetooth/flashing/flashing-makecode.js.map +1 -0
- package/build/esm/bluetooth/flashing/flashing-partial.d.ts +10 -0
- package/build/esm/bluetooth/flashing/flashing-partial.js +142 -0
- 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 +41 -15
- 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/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.d.ts → bluetooth/profile.d.ts} +8 -0
- package/build/esm/{bluetooth-profile.js → bluetooth/profile.js} +7 -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/esm/bluetooth/services/event-service.d.ts +48 -0
- package/build/esm/bluetooth/services/event-service.js +269 -0
- package/build/esm/bluetooth/services/event-service.js.map +1 -0
- package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
- package/build/esm/bluetooth/services/io-pin-service.js +169 -0
- package/build/esm/bluetooth/services/io-pin-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/bluetooth/services/temperature-service.d.ts +14 -0
- package/build/esm/bluetooth/services/temperature-service.js +76 -0
- package/build/esm/bluetooth/services/temperature-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 +191 -101
- package/build/esm/device.js +45 -104
- 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/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 +8 -16
- package/build/esm/index.js +7 -11
- package/build/esm/index.js.map +1 -1
- package/build/esm/logging.js.map +1 -1
- package/build/esm/microbit-events.d.ts +67 -0
- package/build/esm/microbit-events.js +52 -0
- package/build/esm/microbit-events.js.map +1 -0
- package/build/esm/radio-bridge/connection.d.ts +52 -0
- package/build/esm/{usb-radio-bridge.js → radio-bridge/connection.js} +84 -96
- 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 +92 -15
- 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 -1
- package/build/esm/{hex-flash-data-source.js → universal-hex/flash-data-source.js} +6 -3
- 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/{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/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/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/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/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/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 -110
- package/build/esm/usb/partial-flashing.js.map +1 -0
- package/build/esm/usb/promise-queue.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 +61 -14
- 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 -112
- package/build/cjs/bluetooth.js +0 -457
- package/build/cjs/bluetooth.js.map +0 -1
- package/build/cjs/board-serial-info.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-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.d.ts +0 -6
- package/build/cjs/flashing/flashing-makecode.js.map +0 -1
- package/build/cjs/flashing/flashing-partial.d.ts +0 -9
- package/build/cjs/flashing/flashing-partial.js +0 -98
- 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/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/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/setupTests.d.ts +0 -6
- package/build/cjs/setupTests.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/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 -112
- package/build/esm/bluetooth.js +0 -427
- package/build/esm/bluetooth.js.map +0 -1
- package/build/esm/board-serial-info.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-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.d.ts +0 -6
- package/build/esm/flashing/flashing-makecode.js.map +0 -1
- package/build/esm/flashing/flashing-partial.d.ts +0 -9
- package/build/esm/flashing/flashing-partial.js +0 -95
- 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/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/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/setupTests.d.ts +0 -6
- package/build/esm/setupTests.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/typedoc.json +0 -14
- /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/{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/{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/{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/{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
|
@@ -38,47 +38,18 @@
|
|
|
38
38
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
39
39
|
* SOFTWARE.
|
|
40
40
|
*/
|
|
41
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
42
|
-
if (k2 === undefined) k2 = k;
|
|
43
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
44
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
45
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
46
|
-
}
|
|
47
|
-
Object.defineProperty(o, k2, desc);
|
|
48
|
-
}) : (function(o, m, k, k2) {
|
|
49
|
-
if (k2 === undefined) k2 = k;
|
|
50
|
-
o[k2] = m[k];
|
|
51
|
-
}));
|
|
52
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
53
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
54
|
-
}) : function(o, v) {
|
|
55
|
-
o["default"] = v;
|
|
56
|
-
});
|
|
57
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
58
|
-
if (mod && mod.__esModule) return mod;
|
|
59
|
-
var result = {};
|
|
60
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
61
|
-
__setModuleDefault(result, mod);
|
|
62
|
-
return result;
|
|
63
|
-
};
|
|
64
41
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
65
42
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
66
43
|
};
|
|
67
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
45
|
exports.PartialFlashing = void 0;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
* Latest Microsoft implementation is here:
|
|
73
|
-
* https://github.com/microsoft/pxt-microbit/blob/master/editor/flash.ts
|
|
74
|
-
*/
|
|
75
|
-
// dapjs import faff needed for Vitest https://github.com/ARMmbed/dapjs/issues/118
|
|
76
|
-
const dapjs = __importStar(require("dapjs"));
|
|
77
|
-
const { DAPLink: DAPLinkValue } = dapjs;
|
|
78
|
-
const async_util_js_1 = require("./async-util.js");
|
|
79
|
-
const usb_partial_flashing_utils_js_1 = require("./usb-partial-flashing-utils.js");
|
|
80
|
-
const device_js_1 = require("./device.js");
|
|
46
|
+
const arm_debug_js_1 = require("./arm-debug.js");
|
|
47
|
+
const device_js_1 = require("../device.js");
|
|
48
|
+
const hex_util_js_1 = require("../hex-util.js");
|
|
81
49
|
const nrf_intel_hex_1 = __importDefault(require("nrf-intel-hex"));
|
|
50
|
+
const cortex_m_js_1 = require("./cortex-m.js");
|
|
51
|
+
const daplink_js_1 = require("./daplink.js");
|
|
52
|
+
const partial_flashing_utils_js_1 = require("./partial-flashing-utils.js");
|
|
82
53
|
// Source code for binaries in can be found at https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/external/sha/source/main.c
|
|
83
54
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L243
|
|
84
55
|
// Update from https://github.com/microsoft/pxt-microbit/commit/a35057717222b8e48335144f497b55e29e9b0f25
|
|
@@ -109,18 +80,31 @@ const membase = 0x20000000;
|
|
|
109
80
|
const loadAddr = membase;
|
|
110
81
|
const dataAddr = 0x20002000;
|
|
111
82
|
const stackAddr = 0x20001000;
|
|
83
|
+
// UICR (User Information Configuration Registers) — non-volatile registers
|
|
84
|
+
// for chip config (bootloader address, NFC pin mode, etc). Bits can only be
|
|
85
|
+
// cleared (1→0); restoring a bit to 1 requires erasing the entire UICR region.
|
|
86
|
+
// https://docs.nordicsemi.com/bundle/ps_nrf52833/page/uicr.html
|
|
87
|
+
const UICR_BASE = 0x10001000;
|
|
88
|
+
const UICR_LIMIT = 0x10002000;
|
|
89
|
+
// nRF52 NVMC registers for UICR erase/write
|
|
90
|
+
const NVMC_CONFIG = 0x4001e504;
|
|
91
|
+
const NVMC_ERASEUICR = 0x4001e514;
|
|
92
|
+
const NVMC_READY = 0x4001e400;
|
|
93
|
+
const NVMC_CONFIG_WEN = 1; // Write enable
|
|
94
|
+
const NVMC_CONFIG_EEN = 2; // Erase enable
|
|
95
|
+
const NVMC_CONFIG_REN = 0; // Read only
|
|
112
96
|
/**
|
|
113
|
-
* Uses a
|
|
97
|
+
* Uses a USBDeviceWrapper to flash the micro:bit.
|
|
114
98
|
*
|
|
115
|
-
*
|
|
99
|
+
* Intended to be used for a single flash with a pre-connected USBDeviceWrapper.
|
|
116
100
|
*/
|
|
117
101
|
class PartialFlashing {
|
|
118
|
-
constructor(
|
|
119
|
-
Object.defineProperty(this, "
|
|
102
|
+
constructor(device, logging, boardVersion, pageSize, numPages) {
|
|
103
|
+
Object.defineProperty(this, "device", {
|
|
120
104
|
enumerable: true,
|
|
121
105
|
configurable: true,
|
|
122
106
|
writable: true,
|
|
123
|
-
value:
|
|
107
|
+
value: device
|
|
124
108
|
});
|
|
125
109
|
Object.defineProperty(this, "logging", {
|
|
126
110
|
enumerable: true,
|
|
@@ -134,6 +118,18 @@ class PartialFlashing {
|
|
|
134
118
|
writable: true,
|
|
135
119
|
value: boardVersion
|
|
136
120
|
});
|
|
121
|
+
Object.defineProperty(this, "pageSize", {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
configurable: true,
|
|
124
|
+
writable: true,
|
|
125
|
+
value: pageSize
|
|
126
|
+
});
|
|
127
|
+
Object.defineProperty(this, "numPages", {
|
|
128
|
+
enumerable: true,
|
|
129
|
+
configurable: true,
|
|
130
|
+
writable: true,
|
|
131
|
+
value: numPages
|
|
132
|
+
});
|
|
137
133
|
}
|
|
138
134
|
log(v) {
|
|
139
135
|
this.logging.log(v);
|
|
@@ -141,56 +137,55 @@ class PartialFlashing {
|
|
|
141
137
|
// Runs the checksum algorithm on the micro:bit's whole flash memory, and returns the results.
|
|
142
138
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L365
|
|
143
139
|
async getFlashChecksumsAsync() {
|
|
144
|
-
await this.
|
|
145
|
-
return this.
|
|
140
|
+
await this.device.cortexM.execute(loadAddr, computeChecksums2, stackAddr, loadAddr + 1, 0xffffffff, dataAddr, 0, this.pageSize, this.numPages);
|
|
141
|
+
return this.device.adi.readBlock(dataAddr, this.numPages * 2);
|
|
146
142
|
}
|
|
147
143
|
// Runs the code on the micro:bit to copy a single page of data from RAM address addr to the ROM address specified by the page.
|
|
148
144
|
// Does not wait for execution to halt.
|
|
149
145
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L340
|
|
150
146
|
async runFlash(page, addr) {
|
|
151
|
-
await this.
|
|
152
|
-
await
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
]);
|
|
160
|
-
return this.dapwrapper.cortexM.resume(false);
|
|
147
|
+
await this.device.cortexM.halt(true);
|
|
148
|
+
await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.PC, loadAddr + 4 + 1);
|
|
149
|
+
await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.LR, loadAddr + 1);
|
|
150
|
+
await this.device.cortexM.writeCoreRegister(cortex_m_js_1.CoreRegister.SP, stackAddr);
|
|
151
|
+
await this.device.cortexM.writeCoreRegister(0, page.targetAddr);
|
|
152
|
+
await this.device.cortexM.writeCoreRegister(1, addr);
|
|
153
|
+
await this.device.cortexM.writeCoreRegister(2, this.pageSize >> 2);
|
|
154
|
+
return this.device.cortexM.resume(false);
|
|
161
155
|
}
|
|
162
156
|
// Write a single page of data to micro:bit ROM by writing it to micro:bit RAM and copying to ROM.
|
|
163
157
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L385
|
|
164
158
|
async partialFlashPageAsync(page, nextPage, i) {
|
|
165
|
-
//
|
|
159
|
+
// UICR pages are handled separately by checkUicr/repairUicr.
|
|
166
160
|
if (page.targetAddr >= 0x10000000) {
|
|
167
161
|
return;
|
|
168
162
|
}
|
|
169
163
|
// Use two slots in RAM to allow parallelisation of the following two tasks.
|
|
170
164
|
// 1. DAPjs writes a page to one slot.
|
|
171
165
|
// 2. flashPageBIN copies a page to flash from the other slot.
|
|
172
|
-
let thisAddr = i & 1 ? dataAddr : dataAddr + this.
|
|
173
|
-
let nextAddr = i & 1 ? dataAddr + this.
|
|
166
|
+
let thisAddr = i & 1 ? dataAddr : dataAddr + this.pageSize;
|
|
167
|
+
let nextAddr = i & 1 ? dataAddr + this.pageSize : dataAddr;
|
|
174
168
|
// Write first page to slot in RAM.
|
|
175
169
|
// All subsequent pages will have already been written to RAM.
|
|
176
170
|
if (i === 0) {
|
|
177
171
|
let u32data = new Uint32Array(page.data.length / 4);
|
|
178
172
|
for (let j = 0; j < page.data.length; j += 4) {
|
|
179
|
-
u32data[j >> 2] = (0,
|
|
173
|
+
u32data[j >> 2] = (0, partial_flashing_utils_js_1.read32FromUInt8Array)(page.data, j);
|
|
180
174
|
}
|
|
181
|
-
await this.
|
|
175
|
+
await this.device.adi.writeBlock(thisAddr, u32data);
|
|
182
176
|
}
|
|
183
177
|
await this.runFlash(page, thisAddr);
|
|
184
178
|
// Write next page to micro:bit RAM if it exists.
|
|
185
179
|
if (nextPage) {
|
|
186
180
|
let buf = new Uint32Array(nextPage.data.buffer);
|
|
187
|
-
await this.
|
|
181
|
+
await this.device.adi.writeBlock(nextAddr, buf);
|
|
188
182
|
}
|
|
189
|
-
return this.
|
|
183
|
+
return this.device.cortexM.waitForHalt();
|
|
190
184
|
}
|
|
191
185
|
// Write pages of data to micro:bit ROM.
|
|
192
186
|
async partialFlashCoreAsync(pages, updateProgress) {
|
|
193
187
|
this.log("Partial flash");
|
|
188
|
+
await this.device.adi.writeBlock(loadAddr, flashPageBIN);
|
|
194
189
|
for (let i = 0; i < pages.length; ++i) {
|
|
195
190
|
updateProgress(device_js_1.ProgressStage.PartialFlashing, i / pages.length);
|
|
196
191
|
await this.partialFlashPageAsync(pages[i], pages[i + 1], i);
|
|
@@ -201,13 +196,13 @@ class PartialFlashing {
|
|
|
201
196
|
// Falls back to a full flash if partial flashing fails.
|
|
202
197
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L335
|
|
203
198
|
async partialFlashAsync(data, updateProgress) {
|
|
204
|
-
const
|
|
199
|
+
const memoryMap = this.toMemoryMap(data);
|
|
200
|
+
const { flashBytes, uicrEntries } = this.extractFlashAndUicr(memoryMap);
|
|
205
201
|
const checksums = await this.getFlashChecksumsAsync();
|
|
206
|
-
|
|
207
|
-
let aligned = (0, usb_partial_flashing_utils_js_1.pageAlignBlocks)(flashBytes, 0, this.dapwrapper.pageSize);
|
|
202
|
+
let aligned = (0, partial_flashing_utils_js_1.pageAlignBlocks)(flashBytes, 0, this.pageSize);
|
|
208
203
|
const totalPages = aligned.length;
|
|
209
204
|
this.log("Total pages: " + totalPages);
|
|
210
|
-
aligned = (0,
|
|
205
|
+
aligned = (0, partial_flashing_utils_js_1.onlyChanged)(aligned, checksums, this.pageSize);
|
|
211
206
|
this.log("Changed pages: " + aligned.length);
|
|
212
207
|
let partial;
|
|
213
208
|
if (aligned.length > totalPages / 2) {
|
|
@@ -218,6 +213,10 @@ class PartialFlashing {
|
|
|
218
213
|
catch (e) {
|
|
219
214
|
this.log(e);
|
|
220
215
|
this.log("Full flash failed, attempting partial flash.");
|
|
216
|
+
// FLASH_CLOSE (called during full flash cleanup) disables SWD,
|
|
217
|
+
// so we must reconnect before partial flash can use it.
|
|
218
|
+
await this.device.adi.reinit();
|
|
219
|
+
await this.device.cortexM.reset(true);
|
|
221
220
|
await this.partialFlashCoreAsync(aligned, updateProgress);
|
|
222
221
|
partial = true;
|
|
223
222
|
}
|
|
@@ -234,109 +233,146 @@ class PartialFlashing {
|
|
|
234
233
|
partial = false;
|
|
235
234
|
}
|
|
236
235
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
// Allow errors on resetting, user can always manually reset if necessary.
|
|
236
|
+
// After partial flash, check UICR. Full flash writes UICR as part of
|
|
237
|
+
// the hex stream so doesn't need this.
|
|
238
|
+
if (partial && uicrEntries.length > 0) {
|
|
239
|
+
partial = await this.ensureUicr(data, uicrEntries, updateProgress);
|
|
242
240
|
}
|
|
243
241
|
this.log("Flashing complete");
|
|
244
242
|
return partial;
|
|
245
243
|
}
|
|
246
|
-
// Perform full flash of micro:bit's ROM using
|
|
244
|
+
// Perform full flash of micro:bit's ROM using DAPLink vendor commands.
|
|
247
245
|
async fullFlashAsync(data, updateProgress) {
|
|
248
246
|
this.log("Full flash");
|
|
249
247
|
const fullFlashProgress = (progress) => {
|
|
250
248
|
updateProgress(device_js_1.ProgressStage.FullFlashing, progress);
|
|
251
249
|
};
|
|
252
|
-
this.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
type: "WebUSB-info",
|
|
259
|
-
message: "full-flash-successful",
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
finally {
|
|
263
|
-
this.dapwrapper.daplink.removeListener(DAPLinkValue.EVENT_PROGRESS, fullFlashProgress);
|
|
264
|
-
}
|
|
250
|
+
const hexData = this.convertDataToHexString(data);
|
|
251
|
+
await (0, daplink_js_1.dapLinkFlash)(this.device.adi, new TextEncoder().encode(hexData), fullFlashProgress);
|
|
252
|
+
this.logging.event({
|
|
253
|
+
type: "WebUSB-info",
|
|
254
|
+
message: "full-flash-successful",
|
|
255
|
+
});
|
|
265
256
|
}
|
|
266
257
|
// Flash the micro:bit's ROM with the provided image, resetting the micro:bit first.
|
|
267
258
|
// Drawn from https://github.com/microsoft/pxt-microbit/blob/dec5b8ce72d5c2b4b0b20aafefce7474a6f0c7b2/editor/extension.tsx#L439
|
|
268
259
|
async flashAsync(data, updateProgress) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
try {
|
|
273
|
-
await this.dapwrapper.reset(true);
|
|
274
|
-
}
|
|
275
|
-
catch (e) {
|
|
276
|
-
this.log("Retrying reset");
|
|
277
|
-
await this.dapwrapper.reconnectAsync();
|
|
278
|
-
await this.dapwrapper.reset(true);
|
|
279
|
-
}
|
|
280
|
-
})();
|
|
260
|
+
// Reset into halted state so partial flash can execute code from a clean
|
|
261
|
+
// state.
|
|
262
|
+
this.log("Begin reset");
|
|
281
263
|
try {
|
|
282
|
-
|
|
283
|
-
await (0, async_util_js_1.withTimeout)(resetPromise, 1000);
|
|
284
|
-
this.log("Begin flashing");
|
|
285
|
-
return await this.partialFlashAsync(data, updateProgress);
|
|
286
|
-
}
|
|
287
|
-
catch (e) {
|
|
288
|
-
if (e instanceof async_util_js_1.TimeoutError) {
|
|
289
|
-
this.log("Resetting micro:bit timed out");
|
|
290
|
-
this.log("Partial flashing failed. Attempting full flash");
|
|
291
|
-
this.logging.event({
|
|
292
|
-
type: "WebUSB-info",
|
|
293
|
-
message: "flash-failed/attempting-full-flash",
|
|
294
|
-
});
|
|
295
|
-
await this.fullFlashAsync(data, updateProgress);
|
|
296
|
-
return false;
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
throw e;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
264
|
+
await this.device.cortexM.reset(true);
|
|
302
265
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
await this.
|
|
266
|
+
catch (e) {
|
|
267
|
+
this.log("Retrying reset");
|
|
268
|
+
await this.device.reconnect();
|
|
269
|
+
await this.device.cortexM.reset(true);
|
|
306
270
|
}
|
|
271
|
+
this.log("Begin flashing");
|
|
272
|
+
return this.partialFlashAsync(data, updateProgress);
|
|
307
273
|
}
|
|
308
274
|
convertDataToHexString(data) {
|
|
309
275
|
if (typeof data === "string") {
|
|
310
276
|
return data;
|
|
311
277
|
}
|
|
312
278
|
if (data instanceof Uint8Array) {
|
|
313
|
-
return
|
|
279
|
+
return nrf_intel_hex_1.default.fromPaddedUint8Array(data).asHexString();
|
|
314
280
|
}
|
|
315
281
|
return data.asHexString();
|
|
316
282
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
283
|
+
/**
|
|
284
|
+
* Parse the flash data into a MemoryMap (if not already one).
|
|
285
|
+
*/
|
|
286
|
+
toMemoryMap(data) {
|
|
321
287
|
if (typeof data === "string") {
|
|
322
|
-
return
|
|
288
|
+
return nrf_intel_hex_1.default.fromHex((0, hex_util_js_1.truncateHexAfterEof)(data));
|
|
323
289
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
return this.memoryMapToPaddedBytes(m);
|
|
329
|
-
}
|
|
330
|
-
paddedBytesToHexString(data) {
|
|
331
|
-
return nrf_intel_hex_1.default.fromPaddedUint8Array(data).asHexString();
|
|
290
|
+
if (data instanceof Uint8Array) {
|
|
291
|
+
return nrf_intel_hex_1.default.fromPaddedUint8Array(data);
|
|
292
|
+
}
|
|
293
|
+
return data;
|
|
332
294
|
}
|
|
333
|
-
|
|
295
|
+
/**
|
|
296
|
+
* Extract padded flash bytes (main flash only) and UICR entries from a
|
|
297
|
+
* MemoryMap. Parses the data once for both.
|
|
298
|
+
*/
|
|
299
|
+
extractFlashAndUicr(memoryMap) {
|
|
334
300
|
const flashSize = {
|
|
335
301
|
V1: 256 * 1024,
|
|
336
302
|
V2: 512 * 1024,
|
|
337
303
|
}[this.boardVersion];
|
|
338
|
-
|
|
304
|
+
const flashBytes = memoryMap.slicePad(0, flashSize);
|
|
305
|
+
const uicrEntries = [];
|
|
306
|
+
for (const [addr, block] of memoryMap) {
|
|
307
|
+
if (addr < UICR_BASE || addr >= UICR_LIMIT)
|
|
308
|
+
continue;
|
|
309
|
+
for (let i = 0; i < block.length; i += 4) {
|
|
310
|
+
uicrEntries.push({
|
|
311
|
+
address: addr + i,
|
|
312
|
+
value: (0, partial_flashing_utils_js_1.read32FromUInt8Array)(block, i),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return { flashBytes, uicrEntries };
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Check UICR and repair if needed after a partial flash.
|
|
320
|
+
*
|
|
321
|
+
* UICR bits can only be cleared (1→0) without erasing. If all mismatched
|
|
322
|
+
* bits only need 1→0, we can write directly on both V1 and V2.
|
|
323
|
+
* If any bit needs 0→1, an erase is required first:
|
|
324
|
+
* - V2: erase via NVMC.ERASEUICR, then write
|
|
325
|
+
* - V1: no independent UICR erase, fall back to full flash
|
|
326
|
+
*
|
|
327
|
+
* Returns true if we stayed on the partial flash path, false if we had
|
|
328
|
+
* to fall back to full flash.
|
|
329
|
+
*/
|
|
330
|
+
async ensureUicr(data, entries, updateProgress) {
|
|
331
|
+
let needsErase = false;
|
|
332
|
+
let hasMismatch = false;
|
|
333
|
+
for (const { address, value } of entries) {
|
|
334
|
+
const actual = await this.device.adi.readMem32(address);
|
|
335
|
+
if (actual === value)
|
|
336
|
+
continue;
|
|
337
|
+
hasMismatch = true;
|
|
338
|
+
// Check if any bit needs to go from 0→1 (requires erase)
|
|
339
|
+
const canWriteInPlace = (actual & value) >>> 0 === value >>> 0;
|
|
340
|
+
this.log(`UICR mismatch at 0x${address.toString(16)}: ` +
|
|
341
|
+
`device=0x${(actual >>> 0).toString(16)} ` +
|
|
342
|
+
`expected=0x${(value >>> 0).toString(16)}` +
|
|
343
|
+
(canWriteInPlace ? "" : " (needs erase)"));
|
|
344
|
+
if (!canWriteInPlace) {
|
|
345
|
+
needsErase = true;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (!hasMismatch) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
if (needsErase && this.boardVersion === "V1") {
|
|
352
|
+
// V1 has no ERASEUICR — must do a full flash (chip erase).
|
|
353
|
+
this.log("UICR requires erase on V1, falling back to full flash.");
|
|
354
|
+
await this.fullFlashAsync(data, updateProgress);
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
const waitNvmcReady = () => (0, arm_debug_js_1.waitFor)(async () => ((await this.device.adi.readMem32(NVMC_READY)) & 1) === 1, 10_000, 5);
|
|
358
|
+
if (needsErase) {
|
|
359
|
+
// V2: erase UICR via dedicated NVMC register
|
|
360
|
+
this.log("Erasing UICR");
|
|
361
|
+
await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_EEN);
|
|
362
|
+
await this.device.adi.writeMem32(NVMC_ERASEUICR, 1);
|
|
363
|
+
await waitNvmcReady();
|
|
364
|
+
}
|
|
365
|
+
// Write UICR words
|
|
366
|
+
this.log("Writing UICR");
|
|
367
|
+
await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_WEN);
|
|
368
|
+
for (const { address, value } of entries) {
|
|
369
|
+
await this.device.adi.writeMem32(address, value);
|
|
370
|
+
await waitNvmcReady();
|
|
371
|
+
}
|
|
372
|
+
await this.device.adi.writeMem32(NVMC_CONFIG, NVMC_CONFIG_REN);
|
|
373
|
+
this.log("UICR repair complete");
|
|
374
|
+
return true;
|
|
339
375
|
}
|
|
340
376
|
}
|
|
341
377
|
exports.PartialFlashing = PartialFlashing;
|
|
342
|
-
//# sourceMappingURL=
|
|
378
|
+
//# sourceMappingURL=partial-flashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-flashing.js","sourceRoot":"","sources":["../../../src/usb/partial-flashing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise-queue.js","sourceRoot":"","sources":["../../../src/usb/promise-queue.ts"],"names":[],"mappings":";;;AAcA,MAAa,YAAY;IAKvB,YAAY,UAAmB,EAAE;QAJzB;;;;mBAAgB,KAAK;WAAC;QACtB;;;;mBAA6B,EAAE;WAAC;QAChC;;;;;WAA4C;QAGlD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAI,MAAwB;QACpC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAkB;gBAC3B,OAAO;gBACP,MAAM;gBACN,MAAM;aACP,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA5DD,oCA4DC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface SerialData {
|
|
2
|
+
data: string;
|
|
3
|
+
}
|
|
4
|
+
export interface SerialConnectionEventMap {
|
|
5
|
+
/** Fired when serial data is received from the micro:bit. */
|
|
6
|
+
serialdata: SerialData;
|
|
7
|
+
/**
|
|
8
|
+
* Fired when the serial session ends, indicating that subsequent serial
|
|
9
|
+
* output may be from a different program (e.g. after flashing or a full
|
|
10
|
+
* disconnect). Consumers typically use this to clear the terminal.
|
|
11
|
+
*
|
|
12
|
+
* Not fired when the connection is paused (tab hidden) because the same
|
|
13
|
+
* program continues running and serial resumes when the tab becomes visible.
|
|
14
|
+
*/
|
|
15
|
+
serialreset: void;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-events.js","sourceRoot":"","sources":["../../../src/usb/serial-events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
* WebUSB transport layer. Handles opening/closing the USB interface,
|
|
13
|
+
* finding the correct CMSIS-DAP endpoints, and reading/writing raw packets.
|
|
14
|
+
*
|
|
15
|
+
* This is the lowest layer in the USB stack, sitting beneath the CMSIS-DAP
|
|
16
|
+
* protocol layer. It knows nothing about DAP commands — it just moves
|
|
17
|
+
* fixed-size packets between the host and the USB device.
|
|
18
|
+
*
|
|
19
|
+
* micro:bit V2 uses CMSIS-DAP v2 (bulk endpoints). micro:bit V1 uses
|
|
20
|
+
* CMSIS-DAP v1 (HID) which has no bulk endpoints — we fall back to
|
|
21
|
+
* control transfers (SET_REPORT/GET_REPORT) in that case.
|
|
22
|
+
*/
|
|
23
|
+
export declare const PACKET_SIZE = 64;
|
|
24
|
+
export interface Transport {
|
|
25
|
+
readonly isOpen: boolean;
|
|
26
|
+
open(): Promise<void>;
|
|
27
|
+
close(): Promise<void>;
|
|
28
|
+
read(): Promise<DataView>;
|
|
29
|
+
write(data: Uint8Array): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare class UsbTransport implements Transport {
|
|
32
|
+
private device;
|
|
33
|
+
private interfaceNumber?;
|
|
34
|
+
private endpointIn?;
|
|
35
|
+
private endpointOut?;
|
|
36
|
+
constructor(device: USBDevice);
|
|
37
|
+
get isOpen(): boolean;
|
|
38
|
+
open(): Promise<void>;
|
|
39
|
+
close(): Promise<void>;
|
|
40
|
+
read(): Promise<DataView>;
|
|
41
|
+
write(data: Uint8Array): Promise<void>;
|
|
42
|
+
}
|