@microbit/microbit-connection 0.0.0-tab.change.177 → 0.9.0-apps.alpha.0
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/LICENSE.md +21 -0
- package/README.md +94 -5
- package/build/cjs/accelerometer-service.d.ts +18 -0
- package/build/cjs/accelerometer-service.js +105 -0
- package/build/cjs/accelerometer-service.js.map +1 -0
- package/build/cjs/accelerometer.js +16 -0
- package/build/cjs/accelerometer.js.map +1 -0
- package/build/{async-util.d.ts → cjs/async-util.d.ts} +9 -0
- package/build/cjs/async-util.js +47 -0
- package/build/cjs/async-util.js.map +1 -0
- package/build/cjs/bluetooth-device-wrapper.d.ts +97 -0
- package/build/cjs/bluetooth-device-wrapper.js +486 -0
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
- package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +43 -35
- package/build/cjs/bluetooth-profile.js +92 -0
- package/build/cjs/bluetooth-profile.js.map +1 -0
- package/build/cjs/bluetooth.d.ts +112 -0
- package/build/cjs/bluetooth.js +458 -0
- package/build/cjs/bluetooth.js.map +1 -0
- package/build/cjs/board-id.js +81 -0
- package/build/cjs/board-id.js.map +1 -0
- package/build/cjs/board-serial-info.js +51 -0
- package/build/cjs/board-serial-info.js.map +1 -0
- package/build/cjs/button-service.d.ts +13 -0
- package/build/cjs/button-service.js +66 -0
- package/build/cjs/button-service.js.map +1 -0
- package/build/cjs/buttons.js +22 -0
- package/build/cjs/buttons.js.map +1 -0
- package/build/cjs/constants.js +73 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/cjs/device-information-service.d.ts +6 -0
- package/build/cjs/device-information-service.js +34 -0
- package/build/cjs/device-information-service.js.map +1 -0
- package/build/{device.d.ts → cjs/device.d.ts} +71 -39
- package/build/cjs/device.js +147 -0
- package/build/cjs/device.js.map +1 -0
- package/build/cjs/dfu-service.d.ts +9 -0
- package/build/cjs/dfu-service.js +26 -0
- package/build/cjs/dfu-service.js.map +1 -0
- package/build/{events.d.ts → cjs/events.d.ts} +1 -2
- package/build/cjs/events.js +109 -0
- package/build/cjs/events.js.map +1 -0
- package/build/cjs/flashing/flashing-full.d.ts +14 -0
- package/build/cjs/flashing/flashing-full.js +87 -0
- package/build/cjs/flashing/flashing-full.js.map +1 -0
- package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
- package/build/cjs/flashing/flashing-makecode.js +48 -0
- package/build/cjs/flashing/flashing-makecode.js.map +1 -0
- package/build/cjs/flashing/flashing-partial.d.ts +9 -0
- package/build/cjs/flashing/flashing-partial.js +98 -0
- package/build/cjs/flashing/flashing-partial.js.map +1 -0
- package/build/cjs/flashing/flashing-v1.d.ts +11 -0
- package/build/cjs/flashing/flashing-v1.js +24 -0
- package/build/cjs/flashing/flashing-v1.js.map +1 -0
- package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
- package/build/cjs/flashing/nordic-dfu.js +214 -0
- package/build/cjs/flashing/nordic-dfu.js.map +1 -0
- package/build/cjs/flashing/zip.d.ts +12 -0
- package/build/cjs/flashing/zip.js +177 -0
- package/build/cjs/flashing/zip.js.map +1 -0
- package/build/cjs/hex-flash-data-source.js +26 -0
- package/build/cjs/hex-flash-data-source.js.map +1 -0
- package/build/cjs/index.d.ts +17 -0
- package/build/cjs/index.js +37 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/led-service.d.ts +18 -0
- package/build/cjs/led-service.js +89 -0
- package/build/cjs/led-service.js.map +1 -0
- package/build/cjs/led.js +3 -0
- package/build/cjs/led.js.map +1 -0
- package/build/{logging.d.ts → cjs/logging.d.ts} +4 -4
- package/build/cjs/logging.js +16 -0
- package/build/cjs/logging.js.map +1 -0
- package/build/cjs/magnetometer-service.d.ts +18 -0
- package/build/cjs/magnetometer-service.js +94 -0
- package/build/cjs/magnetometer-service.js.map +1 -0
- package/build/cjs/magnetometer.d.ts +9 -0
- package/build/cjs/magnetometer.js +16 -0
- package/build/cjs/magnetometer.js.map +1 -0
- package/build/cjs/package.json +1 -0
- package/build/cjs/partial-flashing-service.d.ts +45 -0
- package/build/cjs/partial-flashing-service.js +110 -0
- package/build/cjs/partial-flashing-service.js.map +1 -0
- package/build/cjs/promise-queue.js +78 -0
- package/build/cjs/promise-queue.js.map +1 -0
- package/build/cjs/serial-events.d.ts +20 -0
- package/build/cjs/serial-events.js +69 -0
- package/build/cjs/serial-events.js.map +1 -0
- package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
- package/build/cjs/service-events.js +39 -0
- package/build/cjs/service-events.js.map +1 -0
- package/build/cjs/setupTests.js.map +1 -0
- package/build/cjs/uart-service.d.ts +12 -0
- package/build/cjs/uart-service.js +55 -0
- package/build/cjs/uart-service.js.map +1 -0
- package/build/cjs/uart.d.ts +4 -0
- package/build/cjs/uart.js +16 -0
- package/build/cjs/uart.js.map +1 -0
- package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
- package/build/cjs/usb-device-wrapper.js +437 -0
- package/build/cjs/usb-device-wrapper.js.map +1 -0
- package/build/cjs/usb-partial-flashing-utils.js +133 -0
- package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
- package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -5
- package/build/cjs/usb-partial-flashing.js +342 -0
- package/build/cjs/usb-partial-flashing.js.map +1 -0
- package/build/cjs/usb-radio-bridge.d.ts +24 -0
- package/build/cjs/usb-radio-bridge.js +515 -0
- package/build/cjs/usb-radio-bridge.js.map +1 -0
- package/build/cjs/usb-serial-protocol.js +183 -0
- package/build/cjs/usb-serial-protocol.js.map +1 -0
- package/build/cjs/usb.d.ts +66 -0
- package/build/cjs/usb.js +662 -0
- package/build/cjs/usb.js.map +1 -0
- package/build/esm/accelerometer-service.d.ts +18 -0
- package/build/esm/accelerometer-service.js +101 -0
- package/build/esm/accelerometer-service.js.map +1 -0
- package/build/esm/accelerometer.d.ts +9 -0
- package/build/esm/accelerometer.js.map +1 -0
- package/build/esm/async-util.d.ts +22 -0
- package/build/esm/async-util.js +38 -0
- package/build/esm/async-util.js.map +1 -0
- package/build/esm/bluetooth-device-wrapper.d.ts +97 -0
- package/build/esm/bluetooth-device-wrapper.js +481 -0
- package/build/esm/bluetooth-device-wrapper.js.map +1 -0
- package/build/esm/bluetooth-profile.d.ts +147 -0
- package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +35 -29
- package/build/esm/bluetooth-profile.js.map +1 -0
- package/build/esm/bluetooth.d.ts +112 -0
- package/build/esm/bluetooth.js +428 -0
- package/build/esm/bluetooth.js.map +1 -0
- package/build/esm/board-id.d.ts +36 -0
- package/build/esm/board-id.js.map +1 -0
- package/build/esm/board-serial-info.d.ts +14 -0
- package/build/esm/board-serial-info.js.map +1 -0
- package/build/esm/button-service.d.ts +13 -0
- package/build/esm/button-service.js +62 -0
- package/build/esm/button-service.js.map +1 -0
- package/build/esm/buttons.d.ts +10 -0
- package/build/esm/buttons.js.map +1 -0
- package/build/esm/constants.d.ts +48 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/device-information-service.d.ts +6 -0
- package/build/esm/device-information-service.js +30 -0
- package/build/esm/device-information-service.js.map +1 -0
- package/build/esm/device.d.ts +238 -0
- package/build/{device.js → esm/device.js} +16 -58
- package/build/esm/device.js.map +1 -0
- package/build/esm/dfu-service.d.ts +9 -0
- package/build/esm/dfu-service.js +22 -0
- package/build/esm/dfu-service.js.map +1 -0
- package/build/esm/events.d.ts +110 -0
- package/build/esm/events.js.map +1 -0
- package/build/esm/flashing/flashing-full.d.ts +14 -0
- package/build/esm/flashing/flashing-full.js +84 -0
- package/build/esm/flashing/flashing-full.js.map +1 -0
- package/build/esm/flashing/flashing-makecode.d.ts +6 -0
- package/build/esm/flashing/flashing-makecode.js +44 -0
- package/build/esm/flashing/flashing-makecode.js.map +1 -0
- package/build/esm/flashing/flashing-partial.d.ts +9 -0
- package/build/esm/flashing/flashing-partial.js +95 -0
- package/build/esm/flashing/flashing-partial.js.map +1 -0
- package/build/esm/flashing/flashing-v1.d.ts +11 -0
- package/build/esm/flashing/flashing-v1.js +20 -0
- package/build/esm/flashing/flashing-v1.js.map +1 -0
- package/build/esm/flashing/nordic-dfu.d.ts +3 -0
- package/build/esm/flashing/nordic-dfu.js +211 -0
- package/build/esm/flashing/nordic-dfu.js.map +1 -0
- package/build/esm/flashing/zip.d.ts +12 -0
- package/build/esm/flashing/zip.js +174 -0
- package/build/esm/flashing/zip.js.map +1 -0
- package/build/esm/hex-flash-data-source.d.ts +7 -0
- package/build/esm/hex-flash-data-source.js.map +1 -0
- package/build/esm/index.d.ts +17 -0
- package/build/esm/index.js +12 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/led-service.d.ts +18 -0
- package/build/esm/led-service.js +85 -0
- package/build/esm/led-service.js.map +1 -0
- package/build/esm/led.d.ts +6 -0
- package/build/esm/led.js.map +1 -0
- package/build/esm/logging.d.ts +21 -0
- package/build/{logging.js → esm/logging.js} +1 -1
- package/build/esm/logging.js.map +1 -0
- package/build/esm/magnetometer-service.d.ts +18 -0
- package/build/esm/magnetometer-service.js +90 -0
- package/build/esm/magnetometer-service.js.map +1 -0
- package/build/esm/magnetometer.d.ts +9 -0
- package/build/esm/magnetometer.js +12 -0
- package/build/esm/magnetometer.js.map +1 -0
- package/build/esm/package.json +1 -0
- package/build/esm/partial-flashing-service.d.ts +45 -0
- package/build/esm/partial-flashing-service.js +106 -0
- package/build/esm/partial-flashing-service.js.map +1 -0
- package/build/esm/promise-queue.d.ts +27 -0
- package/build/esm/promise-queue.js.map +1 -0
- package/build/esm/serial-events.d.ts +20 -0
- package/build/esm/serial-events.js +61 -0
- package/build/esm/serial-events.js.map +1 -0
- package/build/esm/service-events.d.ts +17 -0
- package/build/{service-events.js → esm/service-events.js} +12 -0
- package/build/esm/service-events.js.map +1 -0
- package/build/esm/setupTests.d.ts +6 -0
- package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
- package/build/esm/uart-service.d.ts +12 -0
- package/build/esm/uart-service.js +51 -0
- package/build/esm/uart-service.js.map +1 -0
- package/build/esm/uart.d.ts +4 -0
- package/build/esm/uart.js +12 -0
- package/build/esm/uart.js.map +1 -0
- package/build/esm/usb-device-wrapper.d.ts +47 -0
- package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +43 -17
- package/build/esm/usb-device-wrapper.js.map +1 -0
- package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
- package/build/esm/usb-partial-flashing-utils.js.map +1 -0
- package/build/esm/usb-partial-flashing.d.ts +67 -0
- package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +12 -13
- package/build/esm/usb-partial-flashing.js.map +1 -0
- package/build/esm/usb-radio-bridge.d.ts +24 -0
- package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +13 -7
- package/build/esm/usb-radio-bridge.js.map +1 -0
- package/build/esm/usb-serial-protocol.d.ts +66 -0
- package/build/esm/usb-serial-protocol.js.map +1 -0
- package/build/esm/usb.d.ts +66 -0
- package/build/{usb.js → esm/usb.js} +257 -49
- package/build/esm/usb.js.map +1 -0
- package/package.json +25 -8
- package/typedoc.json +14 -0
- package/build/accelerometer-service.d.ts +0 -18
- package/build/accelerometer-service.js +0 -102
- package/build/accelerometer-service.js.map +0 -1
- package/build/accelerometer.js.map +0 -1
- package/build/async-util.js +0 -22
- package/build/async-util.js.map +0 -1
- package/build/bluetooth-device-wrapper.d.ts +0 -57
- package/build/bluetooth-device-wrapper.js +0 -433
- package/build/bluetooth-device-wrapper.js.map +0 -1
- package/build/bluetooth-profile.js.map +0 -1
- package/build/bluetooth.d.ts +0 -54
- package/build/bluetooth.js +0 -243
- package/build/bluetooth.js.map +0 -1
- package/build/board-id.js.map +0 -1
- package/build/board-serial-info.js.map +0 -1
- package/build/button-service.d.ts +0 -13
- package/build/button-service.js +0 -76
- package/build/button-service.js.map +0 -1
- package/build/buttons.js.map +0 -1
- package/build/constants.js.map +0 -1
- package/build/device.js.map +0 -1
- package/build/events.js.map +0 -1
- package/build/hex-flash-data-source.js.map +0 -1
- package/build/index.d.ts +0 -10
- package/build/index.js +0 -8
- package/build/index.js.map +0 -1
- package/build/led-service.d.ts +0 -20
- package/build/led-service.js +0 -116
- package/build/led-service.js.map +0 -1
- package/build/led.js.map +0 -1
- package/build/logging.js.map +0 -1
- package/build/promise-queue.js.map +0 -1
- package/build/service-events.js.map +0 -1
- package/build/usb-device-wrapper.js.map +0 -1
- package/build/usb-partial-flashing-utils.js.map +0 -1
- package/build/usb-partial-flashing.js.map +0 -1
- package/build/usb-radio-bridge.d.ts +0 -41
- package/build/usb-radio-bridge.js.map +0 -1
- package/build/usb-serial-protocol.js.map +0 -1
- package/build/usb.d.ts +0 -54
- package/build/usb.js.map +0 -1
- package/vite.config.ts +0 -34
- /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
- /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
- /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
- /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
- /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
- /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
- /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
- /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
- /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
- /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
- /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
- /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
- /package/build/{board-id.js → esm/board-id.js} +0 -0
- /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
- /package/build/{buttons.js → esm/buttons.js} +0 -0
- /package/build/{constants.js → esm/constants.js} +0 -0
- /package/build/{events.js → esm/events.js} +0 -0
- /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
- /package/build/{led.js → esm/led.js} +0 -0
- /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
- /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
- /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { BoardVersion } from "./device.js";
|
|
7
|
+
/**
|
|
8
|
+
* Validates micro:bit board IDs.
|
|
9
|
+
*/
|
|
10
|
+
export declare class BoardId {
|
|
11
|
+
id: number;
|
|
12
|
+
private static v1Normalized;
|
|
13
|
+
private static v2Normalized;
|
|
14
|
+
constructor(id: number);
|
|
15
|
+
toBoardVersion(): BoardVersion;
|
|
16
|
+
isV1(): boolean;
|
|
17
|
+
isV2(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Return the board ID using the default ID for the board type.
|
|
20
|
+
* Used to integrate with MicropythonFsHex.
|
|
21
|
+
*/
|
|
22
|
+
normalize(): BoardId;
|
|
23
|
+
/**
|
|
24
|
+
* toString matches the input to parse.
|
|
25
|
+
*
|
|
26
|
+
* @returns the ID as a string.
|
|
27
|
+
*/
|
|
28
|
+
toString(): string;
|
|
29
|
+
/**
|
|
30
|
+
* @param value The ID as a hex string with no 0x prefix (e.g. 9900).
|
|
31
|
+
* @returns the valid board ID
|
|
32
|
+
* @throws if the ID isn't known.
|
|
33
|
+
*/
|
|
34
|
+
static parse(value: string): BoardId;
|
|
35
|
+
static forVersion(boardVersion: BoardVersion): BoardId;
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-id.js","sourceRoot":"","sources":["../../lib/board-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA0B;QAC1C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;;AA3Dc;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { BoardId } from "./board-id.js";
|
|
7
|
+
export declare class BoardSerialInfo {
|
|
8
|
+
id: BoardId;
|
|
9
|
+
familyId: string;
|
|
10
|
+
hic: string;
|
|
11
|
+
constructor(id: BoardId, familyId: string, hic: string);
|
|
12
|
+
static parse(device: USBDevice, log: (msg: string) => void): BoardSerialInfo;
|
|
13
|
+
eq(other: BoardSerialInfo): boolean;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-serial-info.js","sourceRoot":"","sources":["../../lib/board-serial-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,eAAe;IAC1B,YACS,EAAW,EACX,QAAgB,EAChB,GAAW;QAFlB;;;;mBAAO,EAAE;WAAS;QAClB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,GAAG;WAAQ;IACjB,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,GAA0B;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAsB;QACvB,OAAO,CACL,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACpB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAChC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CACvB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Service } from "./bluetooth-device-wrapper.js";
|
|
2
|
+
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
3
|
+
export declare class ButtonService implements Service {
|
|
4
|
+
private deviceId;
|
|
5
|
+
private dispatchTypedEvent;
|
|
6
|
+
uuid: string;
|
|
7
|
+
constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
|
|
8
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
9
|
+
private dataViewToButtonState;
|
|
10
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
11
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
12
|
+
private characteristicForButtonEventType;
|
|
13
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BleClient } from "@capacitor-community/bluetooth-le";
|
|
2
|
+
import { profile } from "./bluetooth-profile.js";
|
|
3
|
+
import { ButtonEvent } from "./buttons.js";
|
|
4
|
+
import { BackgroundErrorEvent } from "./device.js";
|
|
5
|
+
export class ButtonService {
|
|
6
|
+
constructor(deviceId, dispatchTypedEvent) {
|
|
7
|
+
Object.defineProperty(this, "deviceId", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: deviceId
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(this, "dispatchTypedEvent", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: dispatchTypedEvent
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(this, "uuid", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true,
|
|
23
|
+
value: profile.button.id
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
getRelevantEvents() {
|
|
27
|
+
return ["buttonachanged", "buttonbchanged"];
|
|
28
|
+
}
|
|
29
|
+
dataViewToButtonState(dataView) {
|
|
30
|
+
return dataView.getUint8(0);
|
|
31
|
+
}
|
|
32
|
+
async startNotifications(type) {
|
|
33
|
+
switch (type) {
|
|
34
|
+
case "buttonachanged":
|
|
35
|
+
case "buttonbchanged": {
|
|
36
|
+
try {
|
|
37
|
+
await BleClient.startNotifications(this.deviceId, profile.button.id, this.characteristicForButtonEventType(type).id, (value) => {
|
|
38
|
+
const data = this.dataViewToButtonState(value);
|
|
39
|
+
this.dispatchTypedEvent(type, new ButtonEvent(type, data));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
this.dispatchTypedEvent("backgrounderror", new BackgroundErrorEvent("Failed to start notifications", e));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async stopNotifications(type) {
|
|
49
|
+
switch (type) {
|
|
50
|
+
case "buttonachanged":
|
|
51
|
+
case "buttonbchanged": {
|
|
52
|
+
await BleClient.stopNotifications(this.deviceId, profile.button.id, this.characteristicForButtonEventType(type).id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
characteristicForButtonEventType(type) {
|
|
57
|
+
return type === "buttonachanged"
|
|
58
|
+
? profile.button.characteristics.a
|
|
59
|
+
: profile.button.characteristics.b;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=button-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button-service.js","sourceRoot":"","sources":["../../lib/button-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAKxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,OAAO,aAAa;IAGxB,YACU,QAAgB,EAChB,kBAA+C;QADvD;;;;mBAAQ,QAAQ;WAAQ;QACxB;;;;mBAAQ,kBAAkB;WAA6B;QAJzD;;;;mBAAO,OAAO,CAAC,MAAM,CAAC,EAAE;WAAC;IAKtB,CAAC;IAEJ,iBAAiB;QACf,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAEO,qBAAqB,CAAC,QAAkB;QAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,kBAAkB,CAChC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,EAAE,EAC9C,CAAC,KAAK,EAAE,EAAE;wBACR,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;wBAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7D,CAAC,CACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,kBAAkB,CACrB,iBAAiB,EACjB,IAAI,oBAAoB,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAC7D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,CAAC,iBAAiB,CAC/B,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gCAAgC,CACtC,IAAyC;QAEzC,OAAO,IAAI,KAAK,gBAAgB;YAC9B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum ButtonState {
|
|
2
|
+
NotPressed = 0,
|
|
3
|
+
ShortPress = 1,
|
|
4
|
+
LongPress = 2
|
|
5
|
+
}
|
|
6
|
+
export type ButtonEventType = "buttonachanged" | "buttonbchanged";
|
|
7
|
+
export declare class ButtonEvent extends Event {
|
|
8
|
+
readonly state: ButtonState;
|
|
9
|
+
constructor(type: ButtonEventType, state: ButtonState);
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../lib/buttons.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,uDAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAID,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YACE,IAAqB,EACL,KAAkB;QAElC,KAAK,CAAC,IAAI,CAAC,CAAC;QAFZ;;;;mBAAgB,KAAK;WAAa;IAGpC,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
export declare const FICR: {
|
|
7
|
+
CODEPAGESIZE: number;
|
|
8
|
+
CODESIZE: number;
|
|
9
|
+
DEVICE_ID_1: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const DapCmd: {
|
|
12
|
+
DAP_INFO: number;
|
|
13
|
+
DAP_CONNECT: number;
|
|
14
|
+
DAP_DISCONNECT: number;
|
|
15
|
+
DAP_TRANSFER: number;
|
|
16
|
+
DAP_TRANSFER_BLOCK: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const Csw: {
|
|
19
|
+
CSW_SIZE: number;
|
|
20
|
+
CSW_SIZE32: number;
|
|
21
|
+
CSW_ADDRINC: number;
|
|
22
|
+
CSW_SADDRINC: number;
|
|
23
|
+
CSW_DBGSTAT: number;
|
|
24
|
+
CSW_HPROT: number;
|
|
25
|
+
CSW_MSTRDBG: number;
|
|
26
|
+
CSW_RESERVED: number;
|
|
27
|
+
CSW_VALUE: number;
|
|
28
|
+
};
|
|
29
|
+
export declare const DapVal: {
|
|
30
|
+
AP_ACC: number;
|
|
31
|
+
READ: number;
|
|
32
|
+
WRITE: number;
|
|
33
|
+
};
|
|
34
|
+
export declare const ApReg: {
|
|
35
|
+
CSW: number;
|
|
36
|
+
TAR: number;
|
|
37
|
+
DRW: number;
|
|
38
|
+
};
|
|
39
|
+
export declare const CortexSpecialReg: {
|
|
40
|
+
DEMCR: number;
|
|
41
|
+
DEMCR_VC_CORERESET: number;
|
|
42
|
+
CPUID: number;
|
|
43
|
+
DHCSR: number;
|
|
44
|
+
S_RESET_ST: number;
|
|
45
|
+
NVIC_AIRCR: number;
|
|
46
|
+
NVIC_AIRCR_VECTKEY: number;
|
|
47
|
+
NVIC_AIRCR_SYSRESETREQ: number;
|
|
48
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACjB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;IAE3B,WAAW,EAAE,UAAU,GAAG,IAAI;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;IAC3B,aAAa;CACd,CAAC;AACF,GAAG,CAAC,SAAS;IACX,GAAG,CAAC,YAAY;QAChB,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,SAAS;QACb,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,YAAY,CAAC;AAEnB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,IAAI,CAAC;IACb,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,UAAU;IACjB,gDAAgD;IAChD,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAE1B,iBAAiB;IACjB,KAAK,EAAE,UAAU;IAEjB,4CAA4C;IAC5C,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAC/B,sBAAsB,EAAE,CAAC,IAAI,CAAC;IAE9B,aAAa;CACd,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BleClient } from "@capacitor-community/bluetooth-le";
|
|
2
|
+
import { profile } from "./bluetooth-profile";
|
|
3
|
+
export class DeviceInformationService {
|
|
4
|
+
constructor(deviceId) {
|
|
5
|
+
Object.defineProperty(this, "deviceId", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: deviceId
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async getBoardVersion() {
|
|
13
|
+
const serviceMeta = profile.deviceInformation;
|
|
14
|
+
try {
|
|
15
|
+
const modelNumberBytes = await BleClient.read(this.deviceId, serviceMeta.id, serviceMeta.characteristics.modelNumber.id);
|
|
16
|
+
const modelNumber = new TextDecoder().decode(modelNumberBytes);
|
|
17
|
+
if (modelNumber.toLowerCase() === "BBC micro:bit".toLowerCase()) {
|
|
18
|
+
return "V1";
|
|
19
|
+
}
|
|
20
|
+
if (modelNumber.toLowerCase().includes("BBC micro:bit v2".toLowerCase())) {
|
|
21
|
+
return "V2";
|
|
22
|
+
}
|
|
23
|
+
throw new Error(`Unexpected model number ${modelNumber}`);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
throw new Error(`Could not read model number: ${e instanceof Error ? e.message : e}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=device-information-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-information-service.js","sourceRoot":"","sources":["../../lib/device-information-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,OAAO,wBAAwB;IACnC,YAAoB,QAAgB;QAAxB;;;;mBAAQ,QAAQ;WAAQ;IAAG,CAAC;IAExC,KAAK,CAAC,eAAe;QACnB,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,IAAI,CAC3C,IAAI,CAAC,QAAQ,EACb,WAAW,CAAC,EAAE,EACd,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAC3C,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC/D,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IACE,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,EACpE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,gCAAgC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { TypedEventTarget, ValueIsEvent } from "./events.js";
|
|
7
|
+
/**
|
|
8
|
+
* Specific identified error types.
|
|
9
|
+
*
|
|
10
|
+
* New members may be added over time.
|
|
11
|
+
*/
|
|
12
|
+
export type DeviceErrorCode =
|
|
13
|
+
/**
|
|
14
|
+
* Device not selected, e.g. because the user cancelled the dialog.
|
|
15
|
+
*/
|
|
16
|
+
"no-device-selected"
|
|
17
|
+
/**
|
|
18
|
+
* Device not found, perhaps because it doesn't have new enough firmware (for V1).
|
|
19
|
+
*/
|
|
20
|
+
| "update-req"
|
|
21
|
+
/**
|
|
22
|
+
* Unable to claim the interface, usually because it's in use in another tab/window.
|
|
23
|
+
*/
|
|
24
|
+
| "clear-connect"
|
|
25
|
+
/**
|
|
26
|
+
* The device was found to be disconnected.
|
|
27
|
+
*/
|
|
28
|
+
| "device-disconnected"
|
|
29
|
+
/**
|
|
30
|
+
* A communication timeout occurred.
|
|
31
|
+
*/
|
|
32
|
+
| "timeout-error"
|
|
33
|
+
/**
|
|
34
|
+
* This is the fallback error case suggesting that the user reconnects their device.
|
|
35
|
+
*/
|
|
36
|
+
| "reconnect-microbit"
|
|
37
|
+
/**
|
|
38
|
+
* Error occured during serial or bluetooth communication.
|
|
39
|
+
*/
|
|
40
|
+
| "background-comms-error"
|
|
41
|
+
/**
|
|
42
|
+
* Bluetooth service is missing on device.
|
|
43
|
+
*/
|
|
44
|
+
| "service-missing"
|
|
45
|
+
/**
|
|
46
|
+
* Failed to establish Bluetooth connection.
|
|
47
|
+
*/
|
|
48
|
+
| "bluetooth-connection-failed"
|
|
49
|
+
/**
|
|
50
|
+
* Bluetooth is disabled on the device.
|
|
51
|
+
*/
|
|
52
|
+
| "bluetooth-disabled"
|
|
53
|
+
/**
|
|
54
|
+
* Missing required Bluetooth permissions.
|
|
55
|
+
*/
|
|
56
|
+
| "bluetooth-missing-permissions"
|
|
57
|
+
/**
|
|
58
|
+
* Partial flash operation failed.
|
|
59
|
+
*/
|
|
60
|
+
| "flash-partial-failed"
|
|
61
|
+
/**
|
|
62
|
+
* Full flash operation failed.
|
|
63
|
+
*/
|
|
64
|
+
| "flash-full-failed"
|
|
65
|
+
/**
|
|
66
|
+
* Flash operation was cancelled.
|
|
67
|
+
*/
|
|
68
|
+
| "flash-cancelled";
|
|
69
|
+
export declare enum ProgressStage {
|
|
70
|
+
Initializing = "Initializing",
|
|
71
|
+
FindingDevice = "FindingDevice",
|
|
72
|
+
Connecting = "Connecting",
|
|
73
|
+
PartialFlashing = "PartialFlashing",
|
|
74
|
+
FullFlashing = "FullFlashing"
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Progress callback for tracking operation stages (connection and flashing).
|
|
78
|
+
*
|
|
79
|
+
* @param stage - The current stage of the operation
|
|
80
|
+
* @param progress - Optional progress value (0-1) for PartialFlashing and FullFlashing stages.
|
|
81
|
+
* Initializing, FindingDevice, and Connecting stages are called once
|
|
82
|
+
* without progress values to indicate stage entry.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* const progressCallback = (stage, progress) => {
|
|
86
|
+
* if (progress !== undefined) {
|
|
87
|
+
* console.log(`${stage}: ${Math.round(progress * 100)}%`);
|
|
88
|
+
* } else {
|
|
89
|
+
* console.log(`Stage: ${stage}`);
|
|
90
|
+
* }
|
|
91
|
+
* };
|
|
92
|
+
*/
|
|
93
|
+
export type ProgressCallback = (stage: ProgressStage, progress?: number) => void;
|
|
94
|
+
/**
|
|
95
|
+
* Error type used for all interactions with this module.
|
|
96
|
+
*
|
|
97
|
+
* The code indicates the error type and may be suitable for providing
|
|
98
|
+
* translated error messages.
|
|
99
|
+
*
|
|
100
|
+
* The message is the underlying message text and will usually be in
|
|
101
|
+
* English.
|
|
102
|
+
*/
|
|
103
|
+
export declare class DeviceError extends Error {
|
|
104
|
+
code: DeviceErrorCode;
|
|
105
|
+
constructor({ code, message }: {
|
|
106
|
+
code: DeviceErrorCode;
|
|
107
|
+
message?: string;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Tracks connection status,
|
|
112
|
+
*/
|
|
113
|
+
export declare enum ConnectionStatus {
|
|
114
|
+
/**
|
|
115
|
+
* Determining whether the connection type is supported requires
|
|
116
|
+
* initialize() to complete.
|
|
117
|
+
*/
|
|
118
|
+
SUPPORT_NOT_KNOWN = "SUPPORT_NOT_KNOWN",
|
|
119
|
+
/**
|
|
120
|
+
* Not supported.
|
|
121
|
+
*/
|
|
122
|
+
NOT_SUPPORTED = "NOT_SUPPORTED",
|
|
123
|
+
/**
|
|
124
|
+
* Supported but no device available.
|
|
125
|
+
*
|
|
126
|
+
* This will be the case even when a device is physically connected
|
|
127
|
+
* but has not been connected via the browser security UI.
|
|
128
|
+
*/
|
|
129
|
+
NO_AUTHORIZED_DEVICE = "NO_AUTHORIZED_DEVICE",
|
|
130
|
+
/**
|
|
131
|
+
* Authorized device available but we haven't connected to it.
|
|
132
|
+
*/
|
|
133
|
+
DISCONNECTED = "DISCONNECTED",
|
|
134
|
+
/**
|
|
135
|
+
* Connected.
|
|
136
|
+
*/
|
|
137
|
+
CONNECTED = "CONNECTED",
|
|
138
|
+
/**
|
|
139
|
+
* Connecting.
|
|
140
|
+
*/
|
|
141
|
+
CONNECTING = "CONNECTING",
|
|
142
|
+
/**
|
|
143
|
+
* Reconnecting. When there is unexpected disruption in the connection,
|
|
144
|
+
* a reconnection is attempted.
|
|
145
|
+
*/
|
|
146
|
+
RECONNECTING = "RECONNECTING"
|
|
147
|
+
}
|
|
148
|
+
export interface ConnectOptions {
|
|
149
|
+
/**
|
|
150
|
+
* Optional progress callback for tracking connection stages.
|
|
151
|
+
*/
|
|
152
|
+
progress?: ProgressCallback;
|
|
153
|
+
}
|
|
154
|
+
export interface FlashOptions {
|
|
155
|
+
/**
|
|
156
|
+
* True to use a partial flash where possible, false to force a full flash.
|
|
157
|
+
* Default: true.
|
|
158
|
+
*/
|
|
159
|
+
partial?: boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Optional progress callback for tracking connection and flash stages.
|
|
162
|
+
*
|
|
163
|
+
* Requesting a partial flash doesn't guarantee one is performed. Partial flashes are avoided
|
|
164
|
+
* if too many blocks have changed and failed partial flashes are retried as full flashes.
|
|
165
|
+
* The partial parameter reports the flash type currently in progress.
|
|
166
|
+
*/
|
|
167
|
+
progress?: ProgressCallback;
|
|
168
|
+
/**
|
|
169
|
+
* Smallest possible progress increment to limit callback rate.
|
|
170
|
+
*/
|
|
171
|
+
minimumProgressIncrement?: number;
|
|
172
|
+
}
|
|
173
|
+
export declare class FlashDataError extends Error {
|
|
174
|
+
}
|
|
175
|
+
export type FlashDataSource = (boardVersion: BoardVersion) => Promise<string | Uint8Array>;
|
|
176
|
+
export type BoardVersion = "V1" | "V2";
|
|
177
|
+
export declare class ConnectionStatusEvent extends Event {
|
|
178
|
+
readonly status: ConnectionStatus;
|
|
179
|
+
constructor(status: ConnectionStatus);
|
|
180
|
+
}
|
|
181
|
+
export declare class BeforeRequestDevice extends Event {
|
|
182
|
+
constructor();
|
|
183
|
+
}
|
|
184
|
+
export declare class AfterRequestDevice extends Event {
|
|
185
|
+
constructor();
|
|
186
|
+
}
|
|
187
|
+
export declare class BackgroundErrorEvent extends Event {
|
|
188
|
+
readonly errorMessage: string;
|
|
189
|
+
readonly error?: unknown | undefined;
|
|
190
|
+
constructor(errorMessage: string, error?: unknown | undefined);
|
|
191
|
+
}
|
|
192
|
+
export declare class DeviceConnectionEventMap {
|
|
193
|
+
"status": ConnectionStatusEvent;
|
|
194
|
+
"backgrounderror": BackgroundErrorEvent;
|
|
195
|
+
"beforerequestdevice": Event;
|
|
196
|
+
"afterrequestdevice": Event;
|
|
197
|
+
}
|
|
198
|
+
export interface DeviceConnection<M extends ValueIsEvent<M>> extends TypedEventTarget<DeviceConnectionEventMap & M> {
|
|
199
|
+
status: ConnectionStatus;
|
|
200
|
+
/**
|
|
201
|
+
* Initializes the device.
|
|
202
|
+
*/
|
|
203
|
+
initialize(): Promise<void>;
|
|
204
|
+
/**
|
|
205
|
+
* Removes all listeners.
|
|
206
|
+
*/
|
|
207
|
+
dispose(): void;
|
|
208
|
+
/**
|
|
209
|
+
* Connects to a currently paired device or requests pairing.
|
|
210
|
+
*
|
|
211
|
+
* @param options Optional connection options including progress callback.
|
|
212
|
+
* @throws {DeviceError} On connection failure. The error.code property indicates the failure type.
|
|
213
|
+
*/
|
|
214
|
+
connect(options?: ConnectOptions): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* Get the board version.
|
|
217
|
+
*
|
|
218
|
+
* @returns the board version or undefined if there is no connection.
|
|
219
|
+
*/
|
|
220
|
+
getBoardVersion(): BoardVersion | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* Disconnect from the device.
|
|
223
|
+
*/
|
|
224
|
+
disconnect(): Promise<void>;
|
|
225
|
+
/**
|
|
226
|
+
* Write serial data to the device.
|
|
227
|
+
*
|
|
228
|
+
* Does nothing if there is no connection.
|
|
229
|
+
*
|
|
230
|
+
* @param data The data to write.
|
|
231
|
+
* @returns A promise that resolves when the write is complete.
|
|
232
|
+
*/
|
|
233
|
+
serialWrite(data: string): Promise<void>;
|
|
234
|
+
/**
|
|
235
|
+
* Clear device to enable chooseDevice.
|
|
236
|
+
*/
|
|
237
|
+
clearDevice(): Promise<void> | void;
|
|
238
|
+
}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
export var ProgressStage;
|
|
2
|
+
(function (ProgressStage) {
|
|
3
|
+
ProgressStage["Initializing"] = "Initializing";
|
|
4
|
+
ProgressStage["FindingDevice"] = "FindingDevice";
|
|
5
|
+
ProgressStage["Connecting"] = "Connecting";
|
|
6
|
+
ProgressStage["PartialFlashing"] = "PartialFlashing";
|
|
7
|
+
ProgressStage["FullFlashing"] = "FullFlashing";
|
|
8
|
+
})(ProgressStage || (ProgressStage = {}));
|
|
1
9
|
/**
|
|
2
10
|
* Error type used for all interactions with this module.
|
|
3
11
|
*
|
|
@@ -71,38 +79,6 @@ export class ConnectionStatusEvent extends Event {
|
|
|
71
79
|
});
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
|
-
export class SerialDataEvent extends Event {
|
|
75
|
-
constructor(data) {
|
|
76
|
-
super("serialdata");
|
|
77
|
-
Object.defineProperty(this, "data", {
|
|
78
|
-
enumerable: true,
|
|
79
|
-
configurable: true,
|
|
80
|
-
writable: true,
|
|
81
|
-
value: data
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export class SerialResetEvent extends Event {
|
|
86
|
-
constructor() {
|
|
87
|
-
super("serialreset");
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export class SerialErrorEvent extends Event {
|
|
91
|
-
constructor(error) {
|
|
92
|
-
super("serialerror");
|
|
93
|
-
Object.defineProperty(this, "error", {
|
|
94
|
-
enumerable: true,
|
|
95
|
-
configurable: true,
|
|
96
|
-
writable: true,
|
|
97
|
-
value: error
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
export class FlashEvent extends Event {
|
|
102
|
-
constructor() {
|
|
103
|
-
super("flash");
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
82
|
export class BeforeRequestDevice extends Event {
|
|
107
83
|
constructor() {
|
|
108
84
|
super("beforerequestdevice");
|
|
@@ -114,7 +90,7 @@ export class AfterRequestDevice extends Event {
|
|
|
114
90
|
}
|
|
115
91
|
}
|
|
116
92
|
export class BackgroundErrorEvent extends Event {
|
|
117
|
-
constructor(errorMessage) {
|
|
93
|
+
constructor(errorMessage, error) {
|
|
118
94
|
super("backgrounderror");
|
|
119
95
|
Object.defineProperty(this, "errorMessage", {
|
|
120
96
|
enumerable: true,
|
|
@@ -122,6 +98,12 @@ export class BackgroundErrorEvent extends Event {
|
|
|
122
98
|
writable: true,
|
|
123
99
|
value: errorMessage
|
|
124
100
|
});
|
|
101
|
+
Object.defineProperty(this, "error", {
|
|
102
|
+
enumerable: true,
|
|
103
|
+
configurable: true,
|
|
104
|
+
writable: true,
|
|
105
|
+
value: error
|
|
106
|
+
});
|
|
125
107
|
}
|
|
126
108
|
}
|
|
127
109
|
export class DeviceConnectionEventMap {
|
|
@@ -132,25 +114,7 @@ export class DeviceConnectionEventMap {
|
|
|
132
114
|
writable: true,
|
|
133
115
|
value: void 0
|
|
134
116
|
});
|
|
135
|
-
Object.defineProperty(this, "
|
|
136
|
-
enumerable: true,
|
|
137
|
-
configurable: true,
|
|
138
|
-
writable: true,
|
|
139
|
-
value: void 0
|
|
140
|
-
});
|
|
141
|
-
Object.defineProperty(this, "serialreset", {
|
|
142
|
-
enumerable: true,
|
|
143
|
-
configurable: true,
|
|
144
|
-
writable: true,
|
|
145
|
-
value: void 0
|
|
146
|
-
});
|
|
147
|
-
Object.defineProperty(this, "serialerror", {
|
|
148
|
-
enumerable: true,
|
|
149
|
-
configurable: true,
|
|
150
|
-
writable: true,
|
|
151
|
-
value: void 0
|
|
152
|
-
});
|
|
153
|
-
Object.defineProperty(this, "flash", {
|
|
117
|
+
Object.defineProperty(this, "backgrounderror", {
|
|
154
118
|
enumerable: true,
|
|
155
119
|
configurable: true,
|
|
156
120
|
writable: true,
|
|
@@ -168,12 +132,6 @@ export class DeviceConnectionEventMap {
|
|
|
168
132
|
writable: true,
|
|
169
133
|
value: void 0
|
|
170
134
|
});
|
|
171
|
-
Object.defineProperty(this, "backgrounderror", {
|
|
172
|
-
enumerable: true,
|
|
173
|
-
configurable: true,
|
|
174
|
-
writable: true,
|
|
175
|
-
value: void 0
|
|
176
|
-
});
|
|
177
135
|
}
|
|
178
136
|
}
|
|
179
137
|
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../lib/device.ts"],"names":[],"mappings":"AAsEA,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;IAC/B,0CAAyB,CAAA;IACzB,oDAAmC,CAAA;IACnC,8CAA6B,CAAA;AAC/B,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAwBD;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAEpC,YAAY,EAAE,IAAI,EAAE,OAAO,EAA+C;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFjB;;;;;WAAsB;QAGpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAkCX;AAlCD,WAAY,gBAAgB;IAC1B;;;OAGG;IACH,2DAAuC,CAAA;IACvC;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;;;;OAKG;IACH,iEAA6C,CAAA;IAC7C;;OAEG;IACH,iDAA6B,CAAA;IAC7B;;OAEG;IACH,2CAAuB,CAAA;IACvB;;OAEG;IACH,6CAAyB,CAAA;IACzB;;;OAGG;IACH,iDAA6B,CAAA;AAC/B,CAAC,EAlCW,gBAAgB,KAAhB,gBAAgB,QAkC3B;AA6BD,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAQ5C,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAA4B,MAAwB;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QADN;;;;mBAAgB,MAAM;WAAkB;IAEpD,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YACkB,YAAoB,EACpB,KAAe;QAE/B,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAHzB;;;;mBAAgB,YAAY;WAAQ;QACpC;;;;mBAAgB,KAAK;WAAU;IAGjC,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IAArC;QACE,4BAAA,QAAQ;;;;;WAAwB;QAChC,4BAAA,iBAAiB;;;;;WAAuB;QACxC,4BAAA,qBAAqB;;;;;WAAQ;QAC7B,4BAAA,oBAAoB;;;;;WAAQ;IAC9B,CAAC;CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BleClient, numbersToDataView, } from "@capacitor-community/bluetooth-le";
|
|
2
|
+
import { profile } from "./bluetooth-profile";
|
|
3
|
+
// This is the service that should be available on V1 after the reboot.
|
|
4
|
+
// We don't use it directly (the Nordic DFU library does) but we check it's there.
|
|
5
|
+
export const NORDIC_DFU_SERVICE = "00001530-1212-EFDE-1523-785FEABCD123";
|
|
6
|
+
export class DfuService {
|
|
7
|
+
constructor(deviceId) {
|
|
8
|
+
Object.defineProperty(this, "deviceId", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: deviceId
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* We do this for V1 only.
|
|
17
|
+
*/
|
|
18
|
+
async requestRebootToBootloader() {
|
|
19
|
+
await BleClient.write(this.deviceId, profile.dfuControl.id, profile.dfuControl.characteristics.control.id, numbersToDataView([0x01]));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=dfu-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dfu-service.js","sourceRoot":"","sources":["../../lib/dfu-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,uEAAuE;AACvE,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAEzE,MAAM,OAAO,UAAU;IACrB,YAAoB,QAAgB;QAAxB;;;;mBAAQ,QAAQ;WAAQ;IAAG,CAAC;IAExC;;OAEG;IACH,KAAK,CAAC,yBAAyB;QAC7B,MAAM,SAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,UAAU,CAAC,EAAE,EACrB,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAC7C,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1B,CAAC;IACJ,CAAC;CACF"}
|