@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,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { BleClient, } from "@capacitor-community/bluetooth-le";
|
|
7
|
+
import { Capacitor } from "@capacitor/core";
|
|
8
|
+
import { AccelerometerService } from "./accelerometer-service.js";
|
|
9
|
+
import { delay, DisconnectError, disconnectErrorCallback, TimeoutError, timeoutErrorAfter, } from "./async-util.js";
|
|
10
|
+
import { ButtonService } from "./button-service.js";
|
|
11
|
+
import { DeviceInformationService } from "./device-information-service.js";
|
|
12
|
+
import { DeviceError } from "./device.js";
|
|
13
|
+
import { LedService } from "./led-service.js";
|
|
14
|
+
import { ConsoleLogging } from "./logging.js";
|
|
15
|
+
import { MagnetometerService } from "./magnetometer-service.js";
|
|
16
|
+
import { MicroBitMode, PartialFlashingService, } from "./partial-flashing-service.js";
|
|
17
|
+
import { UARTService } from "./uart-service.js";
|
|
18
|
+
export const bondingTimeoutInMs = 40_000;
|
|
19
|
+
export const connectTimeoutInMs = 10_000;
|
|
20
|
+
export const scanningTimeoutInMs = 10_000;
|
|
21
|
+
export const isAndroid = () => Capacitor.getPlatform() === "android";
|
|
22
|
+
// TODO: We've removed the support for these behaviours as we need to
|
|
23
|
+
// re-evaluate how best to support then via capacitor-ble (or reinstate
|
|
24
|
+
// the direct Web Bluetooth connection code.
|
|
25
|
+
//
|
|
26
|
+
// On ChromeOS and Mac there's no timeout and no clear way to abort
|
|
27
|
+
// device.gatt.connect(), so we accept that sometimes we'll still
|
|
28
|
+
// be trying to connect when we'd rather not be. If it succeeds when
|
|
29
|
+
// we no longer intend to be connected then we disconnect at that
|
|
30
|
+
// point. If we try to connect when a previous connection attempt is
|
|
31
|
+
// still around then we wait for it for our timeout period.
|
|
32
|
+
//
|
|
33
|
+
// On Windows it times out after 7s.
|
|
34
|
+
// https://bugs.chromium.org/p/chromium/issues/detail?id=684073
|
|
35
|
+
//
|
|
36
|
+
// Additionally we've remove the delay before trying to connect again
|
|
37
|
+
// on Windows.
|
|
38
|
+
//
|
|
39
|
+
// We also used to have a timeout around requestDevice that reloaded the page.
|
|
40
|
+
//
|
|
41
|
+
// > In some situations the Chrome device prompt simply doesn't appear so we time
|
|
42
|
+
// > this out after 30 seconds and reload the page
|
|
43
|
+
export class BluetoothDeviceWrapper {
|
|
44
|
+
constructor(device, logging = new ConsoleLogging(), dispatchTypedEvent, currentEvents, callbacks) {
|
|
45
|
+
Object.defineProperty(this, "device", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: device
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(this, "logging", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: logging
|
|
56
|
+
});
|
|
57
|
+
Object.defineProperty(this, "currentEvents", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
writable: true,
|
|
61
|
+
value: currentEvents
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(this, "callbacks", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: callbacks
|
|
68
|
+
});
|
|
69
|
+
// Used to avoid automatic reconnection during user triggered connect/disconnect
|
|
70
|
+
// or reconnection itself.
|
|
71
|
+
Object.defineProperty(this, "duringExplicitConnectDisconnect", {
|
|
72
|
+
enumerable: true,
|
|
73
|
+
configurable: true,
|
|
74
|
+
writable: true,
|
|
75
|
+
value: 0
|
|
76
|
+
});
|
|
77
|
+
Object.defineProperty(this, "connected", {
|
|
78
|
+
enumerable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true,
|
|
81
|
+
value: false
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(this, "isReconnect", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
configurable: true,
|
|
86
|
+
writable: true,
|
|
87
|
+
value: false
|
|
88
|
+
});
|
|
89
|
+
// Only updated after the full connection flow completes not during bond handling.
|
|
90
|
+
Object.defineProperty(this, "serviceIds", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
configurable: true,
|
|
93
|
+
writable: true,
|
|
94
|
+
value: new Set()
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(this, "accelerometer", {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
configurable: true,
|
|
99
|
+
writable: true,
|
|
100
|
+
value: void 0
|
|
101
|
+
});
|
|
102
|
+
Object.defineProperty(this, "buttons", {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
configurable: true,
|
|
105
|
+
writable: true,
|
|
106
|
+
value: void 0
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(this, "deviceInformation", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
configurable: true,
|
|
111
|
+
writable: true,
|
|
112
|
+
value: void 0
|
|
113
|
+
});
|
|
114
|
+
Object.defineProperty(this, "led", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
configurable: true,
|
|
117
|
+
writable: true,
|
|
118
|
+
value: void 0
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(this, "magnetometer", {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
configurable: true,
|
|
123
|
+
writable: true,
|
|
124
|
+
value: void 0
|
|
125
|
+
});
|
|
126
|
+
Object.defineProperty(this, "uart", {
|
|
127
|
+
enumerable: true,
|
|
128
|
+
configurable: true,
|
|
129
|
+
writable: true,
|
|
130
|
+
value: void 0
|
|
131
|
+
});
|
|
132
|
+
/**
|
|
133
|
+
* Only defined after connection.
|
|
134
|
+
*/
|
|
135
|
+
Object.defineProperty(this, "boardVersion", {
|
|
136
|
+
enumerable: true,
|
|
137
|
+
configurable: true,
|
|
138
|
+
writable: true,
|
|
139
|
+
value: void 0
|
|
140
|
+
});
|
|
141
|
+
Object.defineProperty(this, "services", {
|
|
142
|
+
enumerable: true,
|
|
143
|
+
configurable: true,
|
|
144
|
+
writable: true,
|
|
145
|
+
value: void 0
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(this, "waitingForDisconnectEventCallbacks", {
|
|
148
|
+
enumerable: true,
|
|
149
|
+
configurable: true,
|
|
150
|
+
writable: true,
|
|
151
|
+
value: []
|
|
152
|
+
});
|
|
153
|
+
Object.defineProperty(this, "internalNotificationListeners", {
|
|
154
|
+
enumerable: true,
|
|
155
|
+
configurable: true,
|
|
156
|
+
writable: true,
|
|
157
|
+
value: new Map()
|
|
158
|
+
});
|
|
159
|
+
Object.defineProperty(this, "handleDisconnectEvent", {
|
|
160
|
+
enumerable: true,
|
|
161
|
+
configurable: true,
|
|
162
|
+
writable: true,
|
|
163
|
+
value: async () => {
|
|
164
|
+
this.waitingForDisconnectEventCallbacks.forEach((cb) => cb());
|
|
165
|
+
this.waitingForDisconnectEventCallbacks.length = 0;
|
|
166
|
+
this.connected = false;
|
|
167
|
+
try {
|
|
168
|
+
if (!this.duringExplicitConnectDisconnect) {
|
|
169
|
+
this.logging.log("Bluetooth disconnected... automatically trying reconnect");
|
|
170
|
+
await this.reconnect();
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.logging.log("Bluetooth disconnect ignored during explicit disconnect");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
this.logging.error("Bluetooth connect triggered by disconnect listener failed", e);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
this.accelerometer = new AccelerometerService(device.deviceId, dispatchTypedEvent);
|
|
182
|
+
this.buttons = new ButtonService(device.deviceId, dispatchTypedEvent);
|
|
183
|
+
this.deviceInformation = new DeviceInformationService(device.deviceId);
|
|
184
|
+
this.led = new LedService(device.deviceId);
|
|
185
|
+
this.magnetometer = new MagnetometerService(device.deviceId, dispatchTypedEvent);
|
|
186
|
+
this.uart = new UARTService(device.deviceId, dispatchTypedEvent);
|
|
187
|
+
this.services = [
|
|
188
|
+
this.accelerometer,
|
|
189
|
+
this.buttons,
|
|
190
|
+
this.led,
|
|
191
|
+
this.magnetometer,
|
|
192
|
+
this.uart,
|
|
193
|
+
];
|
|
194
|
+
}
|
|
195
|
+
async connect() {
|
|
196
|
+
this.logging.event({
|
|
197
|
+
type: this.isReconnect ? "Reconnect" : "Connect",
|
|
198
|
+
message: "Bluetooth connect start",
|
|
199
|
+
});
|
|
200
|
+
if (this.isReconnect) {
|
|
201
|
+
this.callbacks.onReconnecting();
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.callbacks.onConnecting();
|
|
205
|
+
}
|
|
206
|
+
this.duringExplicitConnectDisconnect++;
|
|
207
|
+
try {
|
|
208
|
+
if (Capacitor.isNativePlatform()) {
|
|
209
|
+
await this.connectHandlingBond();
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
await this.connectInternal();
|
|
213
|
+
}
|
|
214
|
+
await this.getBoardVersion();
|
|
215
|
+
const events = this.currentEvents();
|
|
216
|
+
const services = await BleClient.getServices(this.device.deviceId);
|
|
217
|
+
this.serviceIds = new Set(services.map((s) => s.uuid));
|
|
218
|
+
this.logging.log(`Starting notifications for current events ${events}`);
|
|
219
|
+
events.forEach((e) => this.startNotifications(e));
|
|
220
|
+
this.logging.event({
|
|
221
|
+
type: this.isReconnect ? "Reconnect" : "Connect",
|
|
222
|
+
message: "Bluetooth connect success",
|
|
223
|
+
});
|
|
224
|
+
this.callbacks.onSuccess();
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
this.logging.error("Bluetooth connect error", e);
|
|
228
|
+
this.logging.event({
|
|
229
|
+
type: this.isReconnect ? "Reconnect" : "Connect",
|
|
230
|
+
message: "Bluetooth connect failed",
|
|
231
|
+
});
|
|
232
|
+
await this.disconnectInternal(false);
|
|
233
|
+
this.callbacks.onFail();
|
|
234
|
+
if (e instanceof DeviceError) {
|
|
235
|
+
throw e;
|
|
236
|
+
}
|
|
237
|
+
if (e instanceof TimeoutError) {
|
|
238
|
+
throw new DeviceError({
|
|
239
|
+
code: "timeout-error",
|
|
240
|
+
message: e instanceof Error ? e.message : String(e),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
throw new DeviceError({
|
|
244
|
+
code: "bluetooth-connection-failed",
|
|
245
|
+
message: e instanceof Error ? e.message : String(e),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
this.duringExplicitConnectDisconnect--;
|
|
250
|
+
// Reset isReconnect for next time
|
|
251
|
+
this.isReconnect = false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async connectInternal() {
|
|
255
|
+
this.waitingForDisconnectEventCallbacks.length = 0;
|
|
256
|
+
await BleClient.connect(this.device.deviceId, this.handleDisconnectEvent, {
|
|
257
|
+
timeout: connectTimeoutInMs,
|
|
258
|
+
});
|
|
259
|
+
this.connected = true;
|
|
260
|
+
}
|
|
261
|
+
async disconnect() {
|
|
262
|
+
return this.disconnectInternal(true);
|
|
263
|
+
}
|
|
264
|
+
async disconnectInternal(userTriggered) {
|
|
265
|
+
this.logging.log(`Bluetooth disconnect ${userTriggered ? "(user triggered)" : "(programmatic)"}`);
|
|
266
|
+
this.duringExplicitConnectDisconnect++;
|
|
267
|
+
try {
|
|
268
|
+
if (this.connected) {
|
|
269
|
+
await BleClient.disconnect(this.device.deviceId);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
this.logging.error("Bluetooth GATT disconnect error (ignored)", e);
|
|
274
|
+
// We might have already lost the connection.
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
this.duringExplicitConnectDisconnect--;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async reconnect() {
|
|
281
|
+
this.logging.log("Bluetooth reconnect");
|
|
282
|
+
this.isReconnect = true;
|
|
283
|
+
await this.connect();
|
|
284
|
+
}
|
|
285
|
+
async getBoardVersion() {
|
|
286
|
+
// We read this when we connect and it won't change.
|
|
287
|
+
if (this.boardVersion) {
|
|
288
|
+
return this.boardVersion;
|
|
289
|
+
}
|
|
290
|
+
this.boardVersion = await this.deviceInformation.getBoardVersion();
|
|
291
|
+
return this.boardVersion;
|
|
292
|
+
}
|
|
293
|
+
async startNotifications(type) {
|
|
294
|
+
await this.getServicesForEvent(type)?.startNotifications(type);
|
|
295
|
+
}
|
|
296
|
+
async stopNotifications(type) {
|
|
297
|
+
await this.getServicesForEvent(type)?.stopNotifications(type);
|
|
298
|
+
}
|
|
299
|
+
getServicesForEvent(type) {
|
|
300
|
+
return this.services.find((s) => this.serviceIds.has(s.uuid) && s.getRelevantEvents().includes(type));
|
|
301
|
+
}
|
|
302
|
+
async startInternalNotifications(serviceId, characteristicId, options) {
|
|
303
|
+
const key = this.getNotificationKey(serviceId, characteristicId);
|
|
304
|
+
await this.raceDisconnectAndTimeout(BleClient.startNotifications(this.device.deviceId, serviceId, characteristicId, (value) => {
|
|
305
|
+
const bytes = new Uint8Array(value.buffer);
|
|
306
|
+
// Notify all registered callbacks.
|
|
307
|
+
this.internalNotificationListeners
|
|
308
|
+
.get(key)
|
|
309
|
+
?.forEach((cb) => cb(bytes));
|
|
310
|
+
}, options), { actionName: "start notifications" });
|
|
311
|
+
}
|
|
312
|
+
subscribe(serviceId, characteristicId, callback) {
|
|
313
|
+
const key = this.getNotificationKey(serviceId, characteristicId);
|
|
314
|
+
if (!this.internalNotificationListeners.has(key)) {
|
|
315
|
+
this.internalNotificationListeners.set(key, new Set());
|
|
316
|
+
}
|
|
317
|
+
this.internalNotificationListeners.get(key).add(callback);
|
|
318
|
+
}
|
|
319
|
+
unsubscribe(serviceId, characteristicId, callback) {
|
|
320
|
+
const key = this.getNotificationKey(serviceId, characteristicId);
|
|
321
|
+
this.internalNotificationListeners.get(key)?.delete(callback);
|
|
322
|
+
}
|
|
323
|
+
async stopInternalNotifications(serviceId, characteristicId) {
|
|
324
|
+
await BleClient.stopNotifications(this.device.deviceId, serviceId, characteristicId);
|
|
325
|
+
const key = this.getNotificationKey(serviceId, characteristicId);
|
|
326
|
+
this.internalNotificationListeners.delete(key);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Write to characteristic and wait for a notification response.
|
|
330
|
+
*
|
|
331
|
+
* It is the responsibility of the caller to have started notifications
|
|
332
|
+
* for the characteristic.
|
|
333
|
+
*/
|
|
334
|
+
async writeForNotification(serviceId, characteristicId, value, notificationId, isFinalNotification = () => true) {
|
|
335
|
+
let notificationListener;
|
|
336
|
+
const notificationPromise = new Promise((resolve) => {
|
|
337
|
+
notificationListener = (bytes) => {
|
|
338
|
+
if (bytes[0] === notificationId && isFinalNotification(bytes)) {
|
|
339
|
+
resolve(bytes);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
this.subscribe(serviceId, characteristicId, notificationListener);
|
|
343
|
+
});
|
|
344
|
+
try {
|
|
345
|
+
await BleClient.writeWithoutResponse(this.device.deviceId, serviceId, characteristicId, value);
|
|
346
|
+
return await this.raceDisconnectAndTimeout(notificationPromise, {
|
|
347
|
+
timeout: 3_000,
|
|
348
|
+
actionName: "flash notification wait",
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
finally {
|
|
352
|
+
if (notificationListener) {
|
|
353
|
+
this.unsubscribe(serviceId, characteristicId, notificationListener);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
async waitForDisconnect(timeout) {
|
|
358
|
+
if (!this.connected) {
|
|
359
|
+
this.log("Waiting for disconnect but not connected");
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
this.log(`Waiting for disconnect (timeout ${timeout})`);
|
|
363
|
+
try {
|
|
364
|
+
await Promise.race([
|
|
365
|
+
this.disconnectErrorPromise("wait"),
|
|
366
|
+
timeoutErrorAfter(timeout),
|
|
367
|
+
]);
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
if (e instanceof TimeoutError) {
|
|
371
|
+
this.error("Timeout waiting for disconnect");
|
|
372
|
+
}
|
|
373
|
+
if (!(e instanceof DisconnectError)) {
|
|
374
|
+
throw e;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Suitable for running a series of BLE interactions with an overall timeout
|
|
380
|
+
* and general disconnection
|
|
381
|
+
*/
|
|
382
|
+
async raceDisconnectAndTimeout(promise, options = {}) {
|
|
383
|
+
if (!this.connected) {
|
|
384
|
+
throw new DisconnectError();
|
|
385
|
+
}
|
|
386
|
+
const actionName = options.actionName ?? "action";
|
|
387
|
+
const errorOnDisconnectPromise = this.disconnectErrorPromise(actionName);
|
|
388
|
+
return await Promise.race([
|
|
389
|
+
promise,
|
|
390
|
+
errorOnDisconnectPromise,
|
|
391
|
+
...(options.timeout ? [timeoutErrorAfter(options.timeout)] : []),
|
|
392
|
+
]);
|
|
393
|
+
}
|
|
394
|
+
disconnectErrorPromise(actionName) {
|
|
395
|
+
const { promise, callback } = disconnectErrorCallback(`Disconnected during ${actionName}`);
|
|
396
|
+
this.waitingForDisconnectEventCallbacks.push(callback);
|
|
397
|
+
return promise;
|
|
398
|
+
}
|
|
399
|
+
event(event) {
|
|
400
|
+
this.logging.event(event);
|
|
401
|
+
}
|
|
402
|
+
log(message) {
|
|
403
|
+
this.logging.log(message);
|
|
404
|
+
}
|
|
405
|
+
error(message, e) {
|
|
406
|
+
this.logging.error(message, e);
|
|
407
|
+
}
|
|
408
|
+
getNotificationKey(serviceId, characteristicId) {
|
|
409
|
+
return `${serviceId}:${characteristicId}`;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Bonds with device and handles the post-bond device state only returning
|
|
413
|
+
* when we can reattempt a connection with the device.
|
|
414
|
+
*/
|
|
415
|
+
async connectHandlingBond() {
|
|
416
|
+
const startTime = Date.now();
|
|
417
|
+
const maybeJustBonded = await this.bondConnectDeviceInternal();
|
|
418
|
+
if (maybeJustBonded) {
|
|
419
|
+
// If we did just bond then the device disconnects after 2_000 and then
|
|
420
|
+
// resets after a further 13_000 In future we'd like a firmware change
|
|
421
|
+
// that means it doesn't reset when partial flashing is in progress.
|
|
422
|
+
this.log(isAndroid() ? "New bond" : "Potential new bond");
|
|
423
|
+
// On Android with micro:bit V1 we don't see this disconnect (just the 15s
|
|
424
|
+
// reboot) so we hit the timeout and then continue to reset into pairing
|
|
425
|
+
// mode.
|
|
426
|
+
// TODO: document what happens with iOS micro:bit V1 in the new bond case.
|
|
427
|
+
try {
|
|
428
|
+
await this.waitForDisconnect(3000);
|
|
429
|
+
}
|
|
430
|
+
catch (e) {
|
|
431
|
+
if (e instanceof TimeoutError) {
|
|
432
|
+
this.log("No disconnect after bond, assuming connection is stable");
|
|
433
|
+
if (!isAndroid()) {
|
|
434
|
+
// We never knew for sure whether this was a new bond. Assume we
|
|
435
|
+
// were already bonded on the basis we didn't get disconnected.
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
throw e;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
await this.connectInternal();
|
|
444
|
+
// TODO: check this is needed, potentially inline into connect if always needed
|
|
445
|
+
await delay(500);
|
|
446
|
+
this.log("Resetting to pairing mode");
|
|
447
|
+
const pf = new PartialFlashingService(this);
|
|
448
|
+
await pf.resetToMode(MicroBitMode.Pairing);
|
|
449
|
+
await this.waitForDisconnect(10_000);
|
|
450
|
+
await this.connectInternal();
|
|
451
|
+
this.log(`Connection ready; took ${Date.now() - startTime}`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
async bondConnectDeviceInternal() {
|
|
455
|
+
const { deviceId } = this.device;
|
|
456
|
+
if (isAndroid()) {
|
|
457
|
+
let justBonded = false;
|
|
458
|
+
// This gets us a nicer pairing dialog than just going straight for the characteristic.
|
|
459
|
+
if (!(await BleClient.isBonded(deviceId))) {
|
|
460
|
+
await BleClient.createBond(deviceId, { timeout: bondingTimeoutInMs });
|
|
461
|
+
justBonded = true;
|
|
462
|
+
}
|
|
463
|
+
await this.connectInternal();
|
|
464
|
+
return justBonded;
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
// Long timeout as this is the point that the pairing dialog will show.
|
|
468
|
+
// If this responds very quickly maybe we could assume there was a bond?
|
|
469
|
+
// At the moment we always do the disconnect dance so subsequent code will
|
|
470
|
+
// need to call startNotifications again. We need to be connected to
|
|
471
|
+
// startNotifications.
|
|
472
|
+
await this.connectInternal();
|
|
473
|
+
const pf = new PartialFlashingService(this);
|
|
474
|
+
await pf.startNotifications({ timeout: bondingTimeoutInMs });
|
|
475
|
+
// We just did it now to trigger pairing at a well defined point.
|
|
476
|
+
await pf.stopNotifications();
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=bluetooth-device-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bluetooth-device-wrapper.js","sourceRoot":"","sources":["../../lib/bluetooth-device-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export declare const profile: {
|
|
2
|
+
accelerometer: {
|
|
3
|
+
id: string;
|
|
4
|
+
characteristics: {
|
|
5
|
+
data: {
|
|
6
|
+
id: string;
|
|
7
|
+
};
|
|
8
|
+
period: {
|
|
9
|
+
id: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
button: {
|
|
14
|
+
id: string;
|
|
15
|
+
characteristics: {
|
|
16
|
+
a: {
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
b: {
|
|
20
|
+
id: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
deviceInformation: {
|
|
25
|
+
id: string;
|
|
26
|
+
characteristics: {
|
|
27
|
+
firmwareRevision: {
|
|
28
|
+
id: string;
|
|
29
|
+
};
|
|
30
|
+
hardwareRevision: {
|
|
31
|
+
id: string;
|
|
32
|
+
};
|
|
33
|
+
manufacturer: {
|
|
34
|
+
id: string;
|
|
35
|
+
};
|
|
36
|
+
modelNumber: {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
serialNumber: {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
dfuControl: {
|
|
45
|
+
id: string;
|
|
46
|
+
characteristics: {
|
|
47
|
+
control: {
|
|
48
|
+
id: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
event: {
|
|
53
|
+
id: string;
|
|
54
|
+
characteristics: {
|
|
55
|
+
clientEvent: {
|
|
56
|
+
id: string;
|
|
57
|
+
};
|
|
58
|
+
clientRequirements: {
|
|
59
|
+
id: string;
|
|
60
|
+
};
|
|
61
|
+
microBitEvent: {
|
|
62
|
+
id: string;
|
|
63
|
+
};
|
|
64
|
+
microBitRequirements: {
|
|
65
|
+
id: string;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
ioPin: {
|
|
70
|
+
id: string;
|
|
71
|
+
characteristics: {
|
|
72
|
+
pinAdConfiguration: {
|
|
73
|
+
id: string;
|
|
74
|
+
};
|
|
75
|
+
pinData: {
|
|
76
|
+
id: string;
|
|
77
|
+
};
|
|
78
|
+
pinIoConfiguration: {
|
|
79
|
+
id: string;
|
|
80
|
+
};
|
|
81
|
+
pwmControl: {
|
|
82
|
+
id: string;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
led: {
|
|
87
|
+
id: string;
|
|
88
|
+
characteristics: {
|
|
89
|
+
matrixState: {
|
|
90
|
+
id: string;
|
|
91
|
+
};
|
|
92
|
+
scrollingDelay: {
|
|
93
|
+
id: string;
|
|
94
|
+
};
|
|
95
|
+
text: {
|
|
96
|
+
id: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
magnetometer: {
|
|
101
|
+
id: string;
|
|
102
|
+
characteristics: {
|
|
103
|
+
data: {
|
|
104
|
+
id: string;
|
|
105
|
+
};
|
|
106
|
+
period: {
|
|
107
|
+
id: string;
|
|
108
|
+
};
|
|
109
|
+
bearing: {
|
|
110
|
+
id: string;
|
|
111
|
+
};
|
|
112
|
+
calibration: {
|
|
113
|
+
id: string;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
partialFlashing: {
|
|
118
|
+
id: string;
|
|
119
|
+
characteristics: {
|
|
120
|
+
partialFlash: {
|
|
121
|
+
id: string;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
temperature: {
|
|
126
|
+
id: string;
|
|
127
|
+
characteristics: {
|
|
128
|
+
data: {
|
|
129
|
+
id: string;
|
|
130
|
+
};
|
|
131
|
+
period: {
|
|
132
|
+
id: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
uart: {
|
|
137
|
+
id: string;
|
|
138
|
+
characteristics: {
|
|
139
|
+
rx: {
|
|
140
|
+
id: string;
|
|
141
|
+
};
|
|
142
|
+
tx: {
|
|
143
|
+
id: string;
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
};
|