@microbit/microbit-connection 0.0.0-alpha.9 → 0.1.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/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +3 -3
- package/build/cjs/accelerometer-service.js +106 -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/cjs/async-util.js +27 -0
- package/build/cjs/async-util.js.map +1 -0
- package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +23 -15
- package/build/cjs/bluetooth-device-wrapper.js +467 -0
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
- package/build/cjs/bluetooth-profile.js +86 -0
- package/build/cjs/bluetooth-profile.js.map +1 -0
- package/build/cjs/bluetooth.d.ts +108 -0
- package/build/cjs/bluetooth.js +272 -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/{button-service.d.ts → cjs/button-service.d.ts} +2 -2
- package/build/cjs/button-service.js +80 -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/{device.d.ts → cjs/device.d.ts} +35 -46
- package/build/cjs/device.js +133 -0
- package/build/cjs/device.js.map +1 -0
- package/build/{events.d.ts → cjs/events.d.ts} +12 -3
- package/build/cjs/events.js +109 -0
- package/build/cjs/events.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 +36 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/led-service.d.ts +20 -0
- package/build/cjs/led-service.js +120 -0
- package/build/cjs/led-service.js.map +1 -0
- package/build/cjs/led.d.ts +6 -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} +3 -3
- package/build/cjs/logging.js +16 -0
- package/build/cjs/logging.js.map +1 -0
- package/build/cjs/magnetometer-service.d.ts +22 -0
- package/build/cjs/magnetometer-service.js +129 -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/promise-queue.d.ts +27 -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 +13 -0
- package/build/cjs/uart-service.js +76 -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} +2 -6
- package/build/cjs/usb-device-wrapper.js +412 -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 -3
- package/build/cjs/usb-partial-flashing.js +341 -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 +516 -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 +64 -0
- package/build/cjs/usb.js +647 -0
- package/build/cjs/usb.js.map +1 -0
- package/build/esm/accelerometer-service.d.ts +18 -0
- package/build/{accelerometer-service.js → esm/accelerometer-service.js} +4 -20
- 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 +13 -0
- package/build/esm/async-util.js.map +1 -0
- package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
- package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +105 -75
- package/build/esm/bluetooth-device-wrapper.js.map +1 -0
- package/build/esm/bluetooth-profile.d.ts +139 -0
- package/build/esm/bluetooth-profile.js.map +1 -0
- package/build/esm/bluetooth.d.ts +108 -0
- package/build/{bluetooth.js → esm/bluetooth.js} +73 -36
- 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.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.d.ts +181 -0
- package/build/{device.js → esm/device.js} +11 -58
- package/build/esm/device.js.map +1 -0
- package/build/esm/events.d.ts +110 -0
- package/build/esm/events.js +104 -0
- package/build/esm/events.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 +20 -0
- package/build/esm/led-service.js +116 -0
- package/build/esm/led-service.js.map +1 -0
- package/build/esm/led.d.ts +6 -0
- package/build/esm/led.js +2 -0
- package/build/esm/led.js.map +1 -0
- package/build/esm/logging.d.ts +21 -0
- package/build/esm/logging.js.map +1 -0
- package/build/esm/magnetometer-service.d.ts +22 -0
- package/build/esm/magnetometer-service.js +125 -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/promise-queue.d.ts +27 -0
- package/build/esm/promise-queue.js +74 -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 +13 -0
- package/build/esm/uart-service.js +72 -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} +36 -12
- 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 +69 -0
- package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
- 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} +133 -47
- 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 +64 -0
- package/build/{usb.js → esm/usb.js} +188 -67
- package/build/esm/usb.js.map +1 -0
- package/package.json +23 -9
- package/typedoc.json +14 -0
- package/build/accelerometer-service.js.map +0 -1
- package/build/accelerometer.js.map +0 -1
- package/build/async-util.js.map +0 -1
- package/build/bluetooth-device-wrapper.js.map +0 -1
- package/build/bluetooth-profile.js.map +0 -1
- package/build/bluetooth-utils.d.ts +0 -5
- package/build/bluetooth-utils.js +0 -14
- package/build/bluetooth-utils.js.map +0 -1
- package/build/bluetooth.d.ts +0 -49
- 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.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 +0 -19
- 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/logging.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 -37
- package/build/usb-radio-bridge.js.map +0 -1
- package/build/usb-serial-protocol.js.map +0 -1
- package/build/usb.d.ts +0 -60
- package/build/usb.js.map +0 -1
- package/vite.config.ts +0 -32
- /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
- /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
- /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.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/{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/{async-util.js → esm/async-util.js} +0 -0
- /package/build/{bluetooth-profile.js → esm/bluetooth-profile.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/{button-service.js → esm/button-service.js} +0 -0
- /package/build/{buttons.js → esm/buttons.js} +0 -0
- /package/build/{constants.js → esm/constants.js} +0 -0
- /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
- /package/build/{logging.js → esm/logging.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,18 @@
|
|
|
1
|
+
import { AccelerometerData } from "./accelerometer.js";
|
|
2
|
+
import { Service } from "./bluetooth-device-wrapper.js";
|
|
3
|
+
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
4
|
+
export declare class AccelerometerService implements Service {
|
|
5
|
+
private accelerometerDataCharacteristic;
|
|
6
|
+
private accelerometerPeriodCharacteristic;
|
|
7
|
+
private dispatchTypedEvent;
|
|
8
|
+
private queueGattOperation;
|
|
9
|
+
constructor(accelerometerDataCharacteristic: BluetoothRemoteGATTCharacteristic, accelerometerPeriodCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>);
|
|
10
|
+
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<AccelerometerService | undefined>;
|
|
11
|
+
private dataViewToData;
|
|
12
|
+
getData(): Promise<AccelerometerData>;
|
|
13
|
+
getPeriod(): Promise<number>;
|
|
14
|
+
setPeriod(value: number): Promise<void>;
|
|
15
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
16
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
17
|
+
private characteristicForEvent;
|
|
18
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AccelerometerDataEvent } from "./accelerometer.js";
|
|
2
2
|
import { profile } from "./bluetooth-profile.js";
|
|
3
|
-
import { createGattOperationPromise } from "./bluetooth-utils.js";
|
|
4
3
|
import { BackgroundErrorEvent, DeviceError } from "./device.js";
|
|
5
4
|
export class AccelerometerService {
|
|
6
5
|
constructor(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatchTypedEvent, queueGattOperation) {
|
|
@@ -63,21 +62,11 @@ export class AccelerometerService {
|
|
|
63
62
|
};
|
|
64
63
|
}
|
|
65
64
|
async getData() {
|
|
66
|
-
const
|
|
67
|
-
this.queueGattOperation({
|
|
68
|
-
callback,
|
|
69
|
-
operation: () => this.accelerometerDataCharacteristic.readValue(),
|
|
70
|
-
});
|
|
71
|
-
const dataView = (await gattOperationPromise);
|
|
65
|
+
const dataView = await this.queueGattOperation(() => this.accelerometerDataCharacteristic.readValue());
|
|
72
66
|
return this.dataViewToData(dataView);
|
|
73
67
|
}
|
|
74
68
|
async getPeriod() {
|
|
75
|
-
const
|
|
76
|
-
this.queueGattOperation({
|
|
77
|
-
callback,
|
|
78
|
-
operation: () => this.accelerometerPeriodCharacteristic.readValue(),
|
|
79
|
-
});
|
|
80
|
-
const dataView = (await gattOperationPromise);
|
|
69
|
+
const dataView = await this.queueGattOperation(() => this.accelerometerPeriodCharacteristic.readValue());
|
|
81
70
|
return dataView.getUint16(0, true);
|
|
82
71
|
}
|
|
83
72
|
async setPeriod(value) {
|
|
@@ -88,15 +77,10 @@ export class AccelerometerService {
|
|
|
88
77
|
// Allowed values: 2, 5, 10, 20, 40, 100, 1000
|
|
89
78
|
// Values passed are rounded up to the allowed values on device.
|
|
90
79
|
// Documentation for allowed values looks wrong.
|
|
91
|
-
// https://lancaster-university.github.io/microbit-docs/
|
|
92
|
-
const { callback, gattOperationPromise } = createGattOperationPromise();
|
|
80
|
+
// https://lancaster-university.github.io/microbit-docs/ble/profile/#about-the-accelerometer-service
|
|
93
81
|
const dataView = new DataView(new ArrayBuffer(2));
|
|
94
82
|
dataView.setUint16(0, value, true);
|
|
95
|
-
this.queueGattOperation(
|
|
96
|
-
callback,
|
|
97
|
-
operation: () => this.accelerometerPeriodCharacteristic.writeValueWithoutResponse(dataView),
|
|
98
|
-
});
|
|
99
|
-
await gattOperationPromise;
|
|
83
|
+
return this.queueGattOperation(() => this.accelerometerPeriodCharacteristic.writeValue(dataView));
|
|
100
84
|
}
|
|
101
85
|
async startNotifications(type) {
|
|
102
86
|
await this.characteristicForEvent(type)?.startNotifications();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accelerometer-service.js","sourceRoot":"","sources":["../../lib/accelerometer-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOhE,MAAM,OAAO,oBAAoB;IAC/B,YACU,+BAAkE,EAClE,iCAAoE,EACpE,kBAA+C,EAC/C,kBAA+D;QAHvE;;;;mBAAQ,+BAA+B;WAAmC;QAC1E;;;;mBAAQ,iCAAiC;WAAmC;QAC5E;;;;mBAAQ,kBAAkB;WAA6B;QACvD;;;;mBAAQ,kBAAkB;WAA6C;QAEvE,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CACnD,4BAA4B,EAC5B,CAAC,KAAY,EAAE,EAAE;YACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAkC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,kBAAkB,CACrB,0BAA0B,EAC1B,IAAI,sBAAsB,CAAC,IAAI,CAAC,CACjC,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,UAAqC,EACrC,UAAuC,EACvC,kBAA+D,EAC/D,YAAqB;QAErB,IAAI,oBAAgD,CAAC;QACrD,IAAI,CAAC;YACH,oBAAoB,GAAG,MAAM,UAAU,CAAC,iBAAiB,CACvD,OAAO,CAAC,aAAa,CAAC,EAAE,CACzB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,iBAAiB,EAAE,IAAI,oBAAoB,CAAC,GAAa,CAAC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,WAAW,CAAC;oBACpB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,GAAa;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,+BAA+B,GACnC,MAAM,oBAAoB,CAAC,iBAAiB,CAC1C,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAC;QACJ,MAAM,iCAAiC,GACrC,MAAM,oBAAoB,CAAC,iBAAiB,CAC1C,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAChD,CAAC;QACJ,OAAO,IAAI,oBAAoB,CAC7B,+BAA+B,EAC/B,iCAAiC,EACjC,UAAU,EACV,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,QAAkB;QACvC,OAAO;YACL,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC;YAC7B,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC;YAC7B,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAClD,IAAI,CAAC,+BAA+B,CAAC,SAAS,EAAE,CACjD,CAAC;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAClD,IAAI,CAAC,iCAAiC,CAAC,SAAS,EAAE,CACnD,CAAC;QACF,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,wCAAwC;YACxC,OAAO;QACT,CAAC;QACD,8CAA8C;QAC9C,gEAAgE;QAChE,gDAAgD;QAChD,oGAAoG;QACpG,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAClC,IAAI,CAAC,iCAAiC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IAEO,sBAAsB,CAAC,IAAuB;QACpD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,IAAI,CAAC,+BAA+B,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accelerometer.js","sourceRoot":"","sources":["../../lib/accelerometer.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAA4B,IAAuB;QACjD,KAAK,CAAC,0BAA0B,CAAC,CAAC;QADxB;;;;mBAAgB,IAAI;WAAmB;IAEnD,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
export declare class TimeoutError extends Error {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Utility to time out an action after a delay.
|
|
10
|
+
*
|
|
11
|
+
* The action cannot be cancelled; it may still proceed after the timeout.
|
|
12
|
+
*/
|
|
13
|
+
export declare function withTimeout<T>(actionPromise: Promise<T>, timeout: number): Promise<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-util.js","sourceRoot":"","sources":["../../lib/async-util.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;CAAG;AAE1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,aAAyB,EACzB,OAAe;IAEf,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/C,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAC7B,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IACH,8DAA8D;IAC9D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAe,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { AccelerometerService } from "./accelerometer-service.js";
|
|
7
|
+
import { BoardVersion } from "./device.js";
|
|
8
|
+
import { LedService } from "./led-service.js";
|
|
9
|
+
import { Logging } from "./logging.js";
|
|
10
|
+
import { MagnetometerService } from "./magnetometer-service.js";
|
|
11
|
+
import { ServiceConnectionEventMap, TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
12
|
+
import { UARTService } from "./uart-service.js";
|
|
13
|
+
export interface Service {
|
|
14
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
15
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
interface ConnectCallbacks {
|
|
18
|
+
onConnecting: () => void;
|
|
19
|
+
onReconnecting: () => void;
|
|
20
|
+
onFail: () => void;
|
|
21
|
+
onSuccess: () => void;
|
|
22
|
+
}
|
|
23
|
+
export declare class BluetoothDeviceWrapper {
|
|
24
|
+
readonly device: BluetoothDevice;
|
|
25
|
+
private logging;
|
|
26
|
+
private dispatchTypedEvent;
|
|
27
|
+
private currentEvents;
|
|
28
|
+
private callbacks;
|
|
29
|
+
private duringExplicitConnectDisconnect;
|
|
30
|
+
private gattConnectPromise;
|
|
31
|
+
private disconnectPromise;
|
|
32
|
+
private connecting;
|
|
33
|
+
private isReconnect;
|
|
34
|
+
private connectReadyPromise;
|
|
35
|
+
private accelerometer;
|
|
36
|
+
private buttons;
|
|
37
|
+
private led;
|
|
38
|
+
private magnetometer;
|
|
39
|
+
private uart;
|
|
40
|
+
private serviceInfo;
|
|
41
|
+
boardVersion: BoardVersion | undefined;
|
|
42
|
+
private disconnectedRejectionErrorFactory;
|
|
43
|
+
private gattOperations;
|
|
44
|
+
constructor(device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks);
|
|
45
|
+
connect(): Promise<void>;
|
|
46
|
+
disconnect(): Promise<void>;
|
|
47
|
+
private disconnectInternal;
|
|
48
|
+
reconnect(): Promise<void>;
|
|
49
|
+
handleDisconnectEvent: () => Promise<void>;
|
|
50
|
+
private assertGattServer;
|
|
51
|
+
private getBoardVersion;
|
|
52
|
+
private queueGattOperation;
|
|
53
|
+
private createIfNeeded;
|
|
54
|
+
getAccelerometerService(): Promise<AccelerometerService | undefined>;
|
|
55
|
+
getLedService(): Promise<LedService | undefined>;
|
|
56
|
+
getMagnetometerService(): Promise<MagnetometerService | undefined>;
|
|
57
|
+
getUARTService(): Promise<UARTService | undefined>;
|
|
58
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
59
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
60
|
+
private disposeServices;
|
|
61
|
+
}
|
|
62
|
+
export declare const createBluetoothDeviceWrapper: (device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks) => Promise<BluetoothDeviceWrapper | undefined>;
|
|
63
|
+
export {};
|
|
@@ -7,7 +7,11 @@ import { AccelerometerService } from "./accelerometer-service.js";
|
|
|
7
7
|
import { profile } from "./bluetooth-profile.js";
|
|
8
8
|
import { ButtonService } from "./button-service.js";
|
|
9
9
|
import { DeviceError } from "./device.js";
|
|
10
|
+
import { LedService } from "./led-service.js";
|
|
10
11
|
import { NullLogging } from "./logging.js";
|
|
12
|
+
import { MagnetometerService } from "./magnetometer-service.js";
|
|
13
|
+
import { PromiseQueue } from "./promise-queue.js";
|
|
14
|
+
import { UARTService } from "./uart-service.js";
|
|
11
15
|
const deviceIdToWrapper = new Map();
|
|
12
16
|
const connectTimeoutDuration = 10000;
|
|
13
17
|
function findPlatform() {
|
|
@@ -59,9 +63,7 @@ class ServiceInfo {
|
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
export class BluetoothDeviceWrapper {
|
|
62
|
-
constructor(device, logging = new NullLogging(), dispatchTypedEvent,
|
|
63
|
-
// We recreate this for the same connection and need to re-setup notifications for the old events
|
|
64
|
-
events) {
|
|
66
|
+
constructor(device, logging = new NullLogging(), dispatchTypedEvent, currentEvents, callbacks) {
|
|
65
67
|
Object.defineProperty(this, "device", {
|
|
66
68
|
enumerable: true,
|
|
67
69
|
configurable: true,
|
|
@@ -80,11 +82,17 @@ export class BluetoothDeviceWrapper {
|
|
|
80
82
|
writable: true,
|
|
81
83
|
value: dispatchTypedEvent
|
|
82
84
|
});
|
|
83
|
-
Object.defineProperty(this, "
|
|
85
|
+
Object.defineProperty(this, "currentEvents", {
|
|
84
86
|
enumerable: true,
|
|
85
87
|
configurable: true,
|
|
86
88
|
writable: true,
|
|
87
|
-
value:
|
|
89
|
+
value: currentEvents
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(this, "callbacks", {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
configurable: true,
|
|
94
|
+
writable: true,
|
|
95
|
+
value: callbacks
|
|
88
96
|
});
|
|
89
97
|
// Used to avoid automatic reconnection during user triggered connect/disconnect
|
|
90
98
|
// or reconnection itself.
|
|
@@ -127,7 +135,7 @@ export class BluetoothDeviceWrapper {
|
|
|
127
135
|
writable: true,
|
|
128
136
|
value: false
|
|
129
137
|
});
|
|
130
|
-
Object.defineProperty(this, "
|
|
138
|
+
Object.defineProperty(this, "connectReadyPromise", {
|
|
131
139
|
enumerable: true,
|
|
132
140
|
configurable: true,
|
|
133
141
|
writable: true,
|
|
@@ -150,11 +158,37 @@ export class BluetoothDeviceWrapper {
|
|
|
150
158
|
"buttonbchanged",
|
|
151
159
|
])
|
|
152
160
|
});
|
|
161
|
+
Object.defineProperty(this, "led", {
|
|
162
|
+
enumerable: true,
|
|
163
|
+
configurable: true,
|
|
164
|
+
writable: true,
|
|
165
|
+
value: new ServiceInfo(LedService.createService, [])
|
|
166
|
+
});
|
|
167
|
+
Object.defineProperty(this, "magnetometer", {
|
|
168
|
+
enumerable: true,
|
|
169
|
+
configurable: true,
|
|
170
|
+
writable: true,
|
|
171
|
+
value: new ServiceInfo(MagnetometerService.createService, [
|
|
172
|
+
"magnetometerdatachanged",
|
|
173
|
+
])
|
|
174
|
+
});
|
|
175
|
+
Object.defineProperty(this, "uart", {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
configurable: true,
|
|
178
|
+
writable: true,
|
|
179
|
+
value: new ServiceInfo(UARTService.createService, ["uartdata"])
|
|
180
|
+
});
|
|
153
181
|
Object.defineProperty(this, "serviceInfo", {
|
|
154
182
|
enumerable: true,
|
|
155
183
|
configurable: true,
|
|
156
184
|
writable: true,
|
|
157
|
-
value: [
|
|
185
|
+
value: [
|
|
186
|
+
this.accelerometer,
|
|
187
|
+
this.buttons,
|
|
188
|
+
this.led,
|
|
189
|
+
this.magnetometer,
|
|
190
|
+
this.uart,
|
|
191
|
+
]
|
|
158
192
|
});
|
|
159
193
|
Object.defineProperty(this, "boardVersion", {
|
|
160
194
|
enumerable: true,
|
|
@@ -162,15 +196,30 @@ export class BluetoothDeviceWrapper {
|
|
|
162
196
|
writable: true,
|
|
163
197
|
value: void 0
|
|
164
198
|
});
|
|
165
|
-
Object.defineProperty(this, "
|
|
199
|
+
Object.defineProperty(this, "disconnectedRejectionErrorFactory", {
|
|
166
200
|
enumerable: true,
|
|
167
201
|
configurable: true,
|
|
168
202
|
writable: true,
|
|
169
|
-
value: {
|
|
170
|
-
|
|
171
|
-
|
|
203
|
+
value: () => {
|
|
204
|
+
return new DeviceError({
|
|
205
|
+
code: "device-disconnected",
|
|
206
|
+
message: "Error processing gatt operations queue - device disconnected",
|
|
207
|
+
});
|
|
172
208
|
}
|
|
173
209
|
});
|
|
210
|
+
Object.defineProperty(this, "gattOperations", {
|
|
211
|
+
enumerable: true,
|
|
212
|
+
configurable: true,
|
|
213
|
+
writable: true,
|
|
214
|
+
value: new PromiseQueue({
|
|
215
|
+
abortCheck: () => {
|
|
216
|
+
if (!this.device.gatt?.connected) {
|
|
217
|
+
return this.disconnectedRejectionErrorFactory;
|
|
218
|
+
}
|
|
219
|
+
return undefined;
|
|
220
|
+
},
|
|
221
|
+
})
|
|
222
|
+
});
|
|
174
223
|
Object.defineProperty(this, "handleDisconnectEvent", {
|
|
175
224
|
enumerable: true,
|
|
176
225
|
configurable: true,
|
|
@@ -192,41 +241,6 @@ export class BluetoothDeviceWrapper {
|
|
|
192
241
|
}
|
|
193
242
|
}
|
|
194
243
|
});
|
|
195
|
-
Object.defineProperty(this, "processGattOperationQueue", {
|
|
196
|
-
enumerable: true,
|
|
197
|
-
configurable: true,
|
|
198
|
-
writable: true,
|
|
199
|
-
value: () => {
|
|
200
|
-
if (!this.device.gatt?.connected) {
|
|
201
|
-
// No longer connected. Drop queue.
|
|
202
|
-
this.clearGattQueueOnDisconnect();
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
if (this.gattOperations.busy) {
|
|
206
|
-
// We will finish processing the current operation, then
|
|
207
|
-
// pick up processing the queue in the finally block.
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
const gattOperation = this.gattOperations.queue.shift();
|
|
211
|
-
if (!gattOperation) {
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
this.gattOperations.busy = true;
|
|
215
|
-
gattOperation
|
|
216
|
-
.operation()
|
|
217
|
-
.then((result) => {
|
|
218
|
-
gattOperation.callback.resolve(result);
|
|
219
|
-
})
|
|
220
|
-
.catch((err) => {
|
|
221
|
-
gattOperation.callback.reject(new DeviceError({ code: "background-comms-error", message: err }));
|
|
222
|
-
this.logging.error("Error processing gatt operations queue", err);
|
|
223
|
-
})
|
|
224
|
-
.finally(() => {
|
|
225
|
-
this.gattOperations.busy = false;
|
|
226
|
-
this.processGattOperationQueue();
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
244
|
device.addEventListener("gattserverdisconnected", this.handleDisconnectEvent);
|
|
231
245
|
}
|
|
232
246
|
async connect() {
|
|
@@ -242,10 +256,23 @@ export class BluetoothDeviceWrapper {
|
|
|
242
256
|
await this.gattConnectPromise;
|
|
243
257
|
return;
|
|
244
258
|
}
|
|
259
|
+
if (this.isReconnect) {
|
|
260
|
+
this.callbacks.onReconnecting();
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.callbacks.onConnecting();
|
|
264
|
+
}
|
|
245
265
|
this.duringExplicitConnectDisconnect++;
|
|
246
266
|
if (this.device.gatt === undefined) {
|
|
247
267
|
throw new Error("BluetoothRemoteGATTServer for micro:bit device is undefined");
|
|
248
268
|
}
|
|
269
|
+
if (isWindowsOS) {
|
|
270
|
+
// On Windows, the micro:bit can take around 3 seconds to respond to gatt.disconnect().
|
|
271
|
+
// Attempting to connect/reconnect before the micro:bit has responded results in another
|
|
272
|
+
// gattserverdisconnected event being fired. We then fail to get primaryService on a
|
|
273
|
+
// disconnected GATT server.
|
|
274
|
+
await this.connectReadyPromise;
|
|
275
|
+
}
|
|
249
276
|
try {
|
|
250
277
|
// A previous connect might have completed in the background as a device was replugged etc.
|
|
251
278
|
await this.disconnectPromise;
|
|
@@ -299,11 +326,12 @@ export class BluetoothDeviceWrapper {
|
|
|
299
326
|
finally {
|
|
300
327
|
this.connecting = false;
|
|
301
328
|
}
|
|
302
|
-
|
|
329
|
+
this.currentEvents().forEach((e) => this.startNotifications(e));
|
|
303
330
|
this.logging.event({
|
|
304
331
|
type: this.isReconnect ? "Reconnect" : "Connect",
|
|
305
332
|
message: "Bluetooth connect success",
|
|
306
333
|
});
|
|
334
|
+
this.callbacks.onSuccess();
|
|
307
335
|
}
|
|
308
336
|
catch (e) {
|
|
309
337
|
this.logging.error("Bluetooth connect error", e);
|
|
@@ -312,10 +340,13 @@ export class BluetoothDeviceWrapper {
|
|
|
312
340
|
message: "Bluetooth connect failed",
|
|
313
341
|
});
|
|
314
342
|
await this.disconnectInternal(false);
|
|
343
|
+
this.callbacks.onFail();
|
|
315
344
|
throw new Error("Failed to establish a connection!");
|
|
316
345
|
}
|
|
317
346
|
finally {
|
|
318
347
|
this.duringExplicitConnectDisconnect--;
|
|
348
|
+
// Reset isReconnect for next time
|
|
349
|
+
this.isReconnect = false;
|
|
319
350
|
}
|
|
320
351
|
}
|
|
321
352
|
async disconnect() {
|
|
@@ -337,18 +368,11 @@ export class BluetoothDeviceWrapper {
|
|
|
337
368
|
this.disposeServices();
|
|
338
369
|
this.duringExplicitConnectDisconnect--;
|
|
339
370
|
}
|
|
340
|
-
this.
|
|
371
|
+
this.connectReadyPromise = new Promise((resolve) => setTimeout(resolve, 3_500));
|
|
341
372
|
}
|
|
342
373
|
async reconnect() {
|
|
343
374
|
this.logging.log("Bluetooth reconnect");
|
|
344
375
|
this.isReconnect = true;
|
|
345
|
-
if (isWindowsOS) {
|
|
346
|
-
// On Windows, the micro:bit can take around 3 seconds to respond to gatt.disconnect().
|
|
347
|
-
// Attempting to reconnect before the micro:bit has responded results in another
|
|
348
|
-
// gattserverdisconnected event being fired. We then fail to get primaryService on a
|
|
349
|
-
// disconnected GATT server.
|
|
350
|
-
await this.reconnectReadyPromise;
|
|
351
|
-
}
|
|
352
376
|
await this.connect();
|
|
353
377
|
}
|
|
354
378
|
assertGattServer() {
|
|
@@ -378,18 +402,10 @@ export class BluetoothDeviceWrapper {
|
|
|
378
402
|
throw new Error("Could not read model number");
|
|
379
403
|
}
|
|
380
404
|
}
|
|
381
|
-
queueGattOperation(
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
clearGattQueueOnDisconnect() {
|
|
386
|
-
this.gattOperations.queue.forEach((op) => {
|
|
387
|
-
op.callback.reject(new DeviceError({
|
|
388
|
-
code: "device-disconnected",
|
|
389
|
-
message: "Error processing gatt operations queue - device disconnected",
|
|
390
|
-
}));
|
|
391
|
-
});
|
|
392
|
-
this.gattOperations = { busy: false, queue: [] };
|
|
405
|
+
queueGattOperation(action) {
|
|
406
|
+
// Previously we wrapped rejections with:
|
|
407
|
+
// new DeviceError({ code: "background-comms-error", message: err }),
|
|
408
|
+
return this.gattOperations.add(action);
|
|
393
409
|
}
|
|
394
410
|
createIfNeeded(info, listenerInit) {
|
|
395
411
|
const gattServer = this.assertGattServer();
|
|
@@ -398,34 +414,48 @@ export class BluetoothDeviceWrapper {
|
|
|
398
414
|
async getAccelerometerService() {
|
|
399
415
|
return this.createIfNeeded(this.accelerometer, false);
|
|
400
416
|
}
|
|
417
|
+
async getLedService() {
|
|
418
|
+
return this.createIfNeeded(this.led, false);
|
|
419
|
+
}
|
|
420
|
+
async getMagnetometerService() {
|
|
421
|
+
return this.createIfNeeded(this.magnetometer, false);
|
|
422
|
+
}
|
|
423
|
+
async getUARTService() {
|
|
424
|
+
return this.createIfNeeded(this.uart, false);
|
|
425
|
+
}
|
|
401
426
|
async startNotifications(type) {
|
|
402
427
|
const serviceInfo = this.serviceInfo.find((s) => s.events.includes(type));
|
|
403
428
|
if (serviceInfo) {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
429
|
+
this.queueGattOperation(async () => {
|
|
430
|
+
// TODO: type cheat! why?
|
|
431
|
+
const service = await this.createIfNeeded(serviceInfo, true);
|
|
432
|
+
await service?.startNotifications(type);
|
|
433
|
+
});
|
|
407
434
|
}
|
|
408
435
|
}
|
|
409
436
|
async stopNotifications(type) {
|
|
410
|
-
|
|
411
|
-
|
|
437
|
+
this.queueGattOperation(async () => {
|
|
438
|
+
const serviceInfo = this.serviceInfo.find((s) => s.events.includes(type));
|
|
439
|
+
await serviceInfo?.get()?.stopNotifications(type);
|
|
440
|
+
});
|
|
412
441
|
}
|
|
413
442
|
disposeServices() {
|
|
414
443
|
this.serviceInfo.forEach((s) => s.dispose());
|
|
415
|
-
this.
|
|
444
|
+
this.gattOperations.clear(this.disconnectedRejectionErrorFactory);
|
|
416
445
|
}
|
|
417
446
|
}
|
|
418
|
-
export const createBluetoothDeviceWrapper = async (device, logging, dispatchTypedEvent,
|
|
447
|
+
export const createBluetoothDeviceWrapper = async (device, logging, dispatchTypedEvent, currentEvents, callbacks) => {
|
|
419
448
|
try {
|
|
420
449
|
// Reuse our connection objects for the same device as they
|
|
421
450
|
// track the GATT connect promise that never resolves.
|
|
422
451
|
const bluetooth = deviceIdToWrapper.get(device.id) ??
|
|
423
|
-
new BluetoothDeviceWrapper(device, logging, dispatchTypedEvent,
|
|
452
|
+
new BluetoothDeviceWrapper(device, logging, dispatchTypedEvent, currentEvents, callbacks);
|
|
424
453
|
deviceIdToWrapper.set(device.id, bluetooth);
|
|
425
454
|
await bluetooth.connect();
|
|
426
455
|
return bluetooth;
|
|
427
456
|
}
|
|
428
457
|
catch (e) {
|
|
458
|
+
logging.error("Bluetooth connect error", e);
|
|
429
459
|
return undefined;
|
|
430
460
|
}
|
|
431
461
|
};
|
|
@@ -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,139 @@
|
|
|
1
|
+
export declare const profile: {
|
|
2
|
+
uart: {
|
|
3
|
+
id: string;
|
|
4
|
+
characteristics: {
|
|
5
|
+
tx: {
|
|
6
|
+
id: string;
|
|
7
|
+
};
|
|
8
|
+
rx: {
|
|
9
|
+
id: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
accelerometer: {
|
|
14
|
+
id: string;
|
|
15
|
+
characteristics: {
|
|
16
|
+
data: {
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
period: {
|
|
20
|
+
id: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
deviceInformation: {
|
|
25
|
+
id: string;
|
|
26
|
+
characteristics: {
|
|
27
|
+
modelNumber: {
|
|
28
|
+
id: string;
|
|
29
|
+
};
|
|
30
|
+
serialNumber: {
|
|
31
|
+
id: string;
|
|
32
|
+
};
|
|
33
|
+
firmwareRevision: {
|
|
34
|
+
id: string;
|
|
35
|
+
};
|
|
36
|
+
hardwareRevision: {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
manufacturer: {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
dfuControl: {
|
|
45
|
+
id: string;
|
|
46
|
+
characteristics: {
|
|
47
|
+
control: {
|
|
48
|
+
id: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
led: {
|
|
53
|
+
id: string;
|
|
54
|
+
characteristics: {
|
|
55
|
+
matrixState: {
|
|
56
|
+
id: string;
|
|
57
|
+
};
|
|
58
|
+
text: {
|
|
59
|
+
id: string;
|
|
60
|
+
};
|
|
61
|
+
scrollingDelay: {
|
|
62
|
+
id: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
ioPin: {
|
|
67
|
+
id: string;
|
|
68
|
+
characteristics: {
|
|
69
|
+
pinData: {
|
|
70
|
+
id: string;
|
|
71
|
+
};
|
|
72
|
+
pinAdConfiguration: {
|
|
73
|
+
id: string;
|
|
74
|
+
};
|
|
75
|
+
pinIoConfiguration: {
|
|
76
|
+
id: string;
|
|
77
|
+
};
|
|
78
|
+
pwmControl: {
|
|
79
|
+
id: string;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
button: {
|
|
84
|
+
id: string;
|
|
85
|
+
characteristics: {
|
|
86
|
+
a: {
|
|
87
|
+
id: string;
|
|
88
|
+
};
|
|
89
|
+
b: {
|
|
90
|
+
id: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
event: {
|
|
95
|
+
id: string;
|
|
96
|
+
characteristics: {
|
|
97
|
+
microBitRequirements: {
|
|
98
|
+
id: string;
|
|
99
|
+
};
|
|
100
|
+
microBitEvent: {
|
|
101
|
+
id: string;
|
|
102
|
+
};
|
|
103
|
+
clientRequirements: {
|
|
104
|
+
id: string;
|
|
105
|
+
};
|
|
106
|
+
clientEvent: {
|
|
107
|
+
id: string;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
magnetometer: {
|
|
112
|
+
id: string;
|
|
113
|
+
characteristics: {
|
|
114
|
+
data: {
|
|
115
|
+
id: string;
|
|
116
|
+
};
|
|
117
|
+
period: {
|
|
118
|
+
id: string;
|
|
119
|
+
};
|
|
120
|
+
bearing: {
|
|
121
|
+
id: string;
|
|
122
|
+
};
|
|
123
|
+
calibration: {
|
|
124
|
+
id: string;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
temperature: {
|
|
129
|
+
id: string;
|
|
130
|
+
characteristics: {
|
|
131
|
+
data: {
|
|
132
|
+
id: string;
|
|
133
|
+
};
|
|
134
|
+
period: {
|
|
135
|
+
id: string;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bluetooth-profile.js","sourceRoot":"","sources":["../../lib/bluetooth-profile.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE;QACJ,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,EAAE,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAClD,EAAE,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SACnD;KACF;IACD,aAAa,EAAE;QACb,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,IAAI,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACpD,MAAM,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SACvD;KACF;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,WAAW,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAC3D,YAAY,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAC5D,gBAAgB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAChE,gBAAgB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAChE,YAAY,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAC7D;KACF;IACD,UAAU,EAAE;QACV,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,OAAO,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SACxD;KACF;IACD,GAAG,EAAE;QACH,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,WAAW,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAC3D,IAAI,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACpD,cAAc,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAC/D;KACF;IACD,KAAK,EAAE;QACL,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,OAAO,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACvD,kBAAkB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAClE,kBAAkB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAClE,UAAU,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAC3D;KACF;IACD,MAAM,EAAE;QACN,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,CAAC,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACjD,CAAC,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAClD;KACF;IACD,KAAK,EAAE;QACL,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,oBAAoB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACpE,aAAa,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAC7D,kBAAkB,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YAClE,WAAW,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAC5D;KACF;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,IAAI,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACpD,MAAM,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACtD,OAAO,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACvD,WAAW,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SAC5D;KACF;IACD,WAAW,EAAE;QACX,EAAE,EAAE,sCAAsC;QAC1C,eAAe,EAAE;YACf,IAAI,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;YACpD,MAAM,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE;SACvD;KACF;CACF,CAAC"}
|