@microbit/microbit-connection 0.1.0 → 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/README.md +4 -4
- package/build/cjs/accelerometer-service.d.ts +5 -5
- package/build/cjs/accelerometer-service.js +41 -42
- package/build/cjs/accelerometer-service.js.map +1 -1
- package/build/cjs/async-util.d.ts +9 -0
- package/build/cjs/async-util.js +27 -7
- package/build/cjs/async-util.js.map +1 -1
- package/build/cjs/bluetooth-device-wrapper.d.ts +61 -27
- package/build/cjs/bluetooth-device-wrapper.js +285 -266
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
- package/build/cjs/bluetooth-profile.d.ts +43 -35
- package/build/cjs/bluetooth-profile.js +35 -29
- package/build/cjs/bluetooth-profile.js.map +1 -1
- package/build/cjs/bluetooth.d.ts +10 -6
- package/build/cjs/bluetooth.js +286 -100
- package/build/cjs/bluetooth.js.map +1 -1
- package/build/cjs/button-service.d.ts +5 -5
- package/build/cjs/button-service.js +31 -45
- package/build/cjs/button-service.js.map +1 -1
- 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/cjs/device.d.ts +65 -8
- package/build/cjs/device.js +16 -2
- package/build/cjs/device.js.map +1 -1
- 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/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/index.d.ts +3 -3
- package/build/cjs/index.js +2 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/led-service.d.ts +5 -7
- package/build/cjs/led-service.js +13 -44
- package/build/cjs/led-service.js.map +1 -1
- package/build/cjs/logging.d.ts +1 -1
- package/build/cjs/logging.js +3 -3
- package/build/cjs/logging.js.map +1 -1
- package/build/cjs/magnetometer-service.d.ts +5 -9
- package/build/cjs/magnetometer-service.js +30 -65
- package/build/cjs/magnetometer-service.js.map +1 -1
- 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/uart-service.d.ts +4 -5
- package/build/cjs/uart-service.js +19 -40
- package/build/cjs/uart-service.js.map +1 -1
- package/build/cjs/usb-device-wrapper.js +33 -8
- package/build/cjs/usb-device-wrapper.js.map +1 -1
- package/build/cjs/usb-partial-flashing.d.ts +1 -3
- package/build/cjs/usb-partial-flashing.js +4 -3
- package/build/cjs/usb-partial-flashing.js.map +1 -1
- package/build/cjs/usb-radio-bridge.js +1 -2
- package/build/cjs/usb-radio-bridge.js.map +1 -1
- package/build/cjs/usb.d.ts +4 -2
- package/build/cjs/usb.js +31 -16
- package/build/cjs/usb.js.map +1 -1
- package/build/esm/accelerometer-service.d.ts +5 -5
- package/build/esm/accelerometer-service.js +42 -43
- package/build/esm/accelerometer-service.js.map +1 -1
- package/build/esm/async-util.d.ts +9 -0
- package/build/esm/async-util.js +22 -6
- package/build/esm/async-util.js.map +1 -1
- package/build/esm/bluetooth-device-wrapper.d.ts +61 -27
- package/build/esm/bluetooth-device-wrapper.js +284 -265
- package/build/esm/bluetooth-device-wrapper.js.map +1 -1
- package/build/esm/bluetooth-profile.d.ts +43 -35
- package/build/esm/bluetooth-profile.js +35 -29
- package/build/esm/bluetooth-profile.js.map +1 -1
- package/build/esm/bluetooth.d.ts +10 -6
- package/build/esm/bluetooth.js +263 -103
- package/build/esm/bluetooth.js.map +1 -1
- package/build/esm/button-service.d.ts +5 -5
- package/build/esm/button-service.js +32 -46
- package/build/esm/button-service.js.map +1 -1
- 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 +65 -8
- package/build/esm/device.js +15 -1
- package/build/esm/device.js.map +1 -1
- 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/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/index.d.ts +3 -3
- package/build/esm/index.js +2 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/led-service.d.ts +5 -7
- package/build/esm/led-service.js +13 -44
- package/build/esm/led-service.js.map +1 -1
- package/build/esm/logging.d.ts +1 -1
- package/build/esm/logging.js +1 -1
- package/build/esm/logging.js.map +1 -1
- package/build/esm/magnetometer-service.d.ts +5 -9
- package/build/esm/magnetometer-service.js +31 -66
- package/build/esm/magnetometer-service.js.map +1 -1
- 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/uart-service.d.ts +4 -5
- package/build/esm/uart-service.js +19 -40
- package/build/esm/uart-service.js.map +1 -1
- package/build/esm/usb-device-wrapper.js +33 -8
- package/build/esm/usb-device-wrapper.js.map +1 -1
- package/build/esm/usb-partial-flashing.d.ts +1 -3
- package/build/esm/usb-partial-flashing.js +4 -3
- package/build/esm/usb-partial-flashing.js.map +1 -1
- package/build/esm/usb-radio-bridge.js +2 -3
- package/build/esm/usb-radio-bridge.js.map +1 -1
- package/build/esm/usb.d.ts +4 -2
- package/build/esm/usb.js +33 -18
- package/build/esm/usb.js.map +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -38,8 +38,8 @@ import { createUniversalHexFlashDataSource } from "@microbit/microbit-connection
|
|
|
38
38
|
|
|
39
39
|
await usb.flash(createUniversalHexFlashDataSource(universalHexString), {
|
|
40
40
|
partial: true,
|
|
41
|
-
progress: (percentage
|
|
42
|
-
console.log(percentage);
|
|
41
|
+
progress: (stage, percentage) => {
|
|
42
|
+
console.log(stage, percentage);
|
|
43
43
|
},
|
|
44
44
|
});
|
|
45
45
|
```
|
|
@@ -67,8 +67,8 @@ await usb.flash(
|
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
partial: true,
|
|
70
|
-
progress: (percentage
|
|
71
|
-
console.log(percentage);
|
|
70
|
+
progress: (stage, percentage) => {
|
|
71
|
+
console.log(stage, percentage);
|
|
72
72
|
},
|
|
73
73
|
},
|
|
74
74
|
);
|
|
@@ -2,12 +2,12 @@ import { AccelerometerData } from "./accelerometer.js";
|
|
|
2
2
|
import { Service } from "./bluetooth-device-wrapper.js";
|
|
3
3
|
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
4
4
|
export declare class AccelerometerService implements Service {
|
|
5
|
-
private
|
|
6
|
-
private accelerometerPeriodCharacteristic;
|
|
5
|
+
private deviceId;
|
|
7
6
|
private dispatchTypedEvent;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
uuid: string;
|
|
8
|
+
static createService(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher): AccelerometerService;
|
|
9
|
+
constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
|
|
10
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
11
11
|
private dataViewToData;
|
|
12
12
|
getData(): Promise<AccelerometerData>;
|
|
13
13
|
getPeriod(): Promise<number>;
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AccelerometerService = void 0;
|
|
4
|
+
const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
|
|
4
5
|
const accelerometer_js_1 = require("./accelerometer.js");
|
|
5
6
|
const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
|
|
6
7
|
const device_js_1 = require("./device.js");
|
|
7
8
|
class AccelerometerService {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
value: accelerometerDataCharacteristic
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(this, "accelerometerPeriodCharacteristic", {
|
|
9
|
+
static createService(deviceId, dispatchTypedEvent) {
|
|
10
|
+
return new AccelerometerService(deviceId, dispatchTypedEvent);
|
|
11
|
+
}
|
|
12
|
+
constructor(deviceId, dispatchTypedEvent) {
|
|
13
|
+
Object.defineProperty(this, "deviceId", {
|
|
16
14
|
enumerable: true,
|
|
17
15
|
configurable: true,
|
|
18
16
|
writable: true,
|
|
19
|
-
value:
|
|
17
|
+
value: deviceId
|
|
20
18
|
});
|
|
21
19
|
Object.defineProperty(this, "dispatchTypedEvent", {
|
|
22
20
|
enumerable: true,
|
|
@@ -24,38 +22,15 @@ class AccelerometerService {
|
|
|
24
22
|
writable: true,
|
|
25
23
|
value: dispatchTypedEvent
|
|
26
24
|
});
|
|
27
|
-
Object.defineProperty(this, "
|
|
25
|
+
Object.defineProperty(this, "uuid", {
|
|
28
26
|
enumerable: true,
|
|
29
27
|
configurable: true,
|
|
30
28
|
writable: true,
|
|
31
|
-
value:
|
|
32
|
-
});
|
|
33
|
-
this.accelerometerDataCharacteristic.addEventListener("characteristicvaluechanged", (event) => {
|
|
34
|
-
const target = event.target;
|
|
35
|
-
const data = this.dataViewToData(target.value);
|
|
36
|
-
this.dispatchTypedEvent("accelerometerdatachanged", new accelerometer_js_1.AccelerometerDataEvent(data));
|
|
29
|
+
value: bluetooth_profile_js_1.profile.accelerometer.id
|
|
37
30
|
});
|
|
38
31
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
accelerometerService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.accelerometer.id);
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
if (listenerInit) {
|
|
46
|
-
dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
throw new device_js_1.DeviceError({
|
|
51
|
-
code: "service-missing",
|
|
52
|
-
message: err,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const accelerometerDataCharacteristic = await accelerometerService.getCharacteristic(bluetooth_profile_js_1.profile.accelerometer.characteristics.data.id);
|
|
57
|
-
const accelerometerPeriodCharacteristic = await accelerometerService.getCharacteristic(bluetooth_profile_js_1.profile.accelerometer.characteristics.period.id);
|
|
58
|
-
return new AccelerometerService(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatcher, queueGattOperation);
|
|
32
|
+
getRelevantEvents() {
|
|
33
|
+
return ["accelerometerdatachanged"];
|
|
59
34
|
}
|
|
60
35
|
dataViewToData(dataView) {
|
|
61
36
|
return {
|
|
@@ -65,11 +40,11 @@ class AccelerometerService {
|
|
|
65
40
|
};
|
|
66
41
|
}
|
|
67
42
|
async getData() {
|
|
68
|
-
const dataView = await this.
|
|
43
|
+
const dataView = await bluetooth_le_1.BleClient.read(this.deviceId, bluetooth_profile_js_1.profile.accelerometer.id, bluetooth_profile_js_1.profile.accelerometer.characteristics.data.id);
|
|
69
44
|
return this.dataViewToData(dataView);
|
|
70
45
|
}
|
|
71
46
|
async getPeriod() {
|
|
72
|
-
const dataView = await this.
|
|
47
|
+
const dataView = await bluetooth_le_1.BleClient.read(this.deviceId, bluetooth_profile_js_1.profile.accelerometer.id, bluetooth_profile_js_1.profile.accelerometer.characteristics.period.id);
|
|
73
48
|
return dataView.getUint16(0, true);
|
|
74
49
|
}
|
|
75
50
|
async setPeriod(value) {
|
|
@@ -83,18 +58,42 @@ class AccelerometerService {
|
|
|
83
58
|
// https://lancaster-university.github.io/microbit-docs/ble/profile/#about-the-accelerometer-service
|
|
84
59
|
const dataView = new DataView(new ArrayBuffer(2));
|
|
85
60
|
dataView.setUint16(0, value, true);
|
|
86
|
-
|
|
61
|
+
await bluetooth_le_1.BleClient.write(this.deviceId, bluetooth_profile_js_1.profile.accelerometer.id, bluetooth_profile_js_1.profile.accelerometer.characteristics.period.id, dataView);
|
|
87
62
|
}
|
|
88
63
|
async startNotifications(type) {
|
|
89
|
-
|
|
64
|
+
const result = this.characteristicForEvent(type);
|
|
65
|
+
if (result) {
|
|
66
|
+
const { service, characteristic } = result;
|
|
67
|
+
try {
|
|
68
|
+
await bluetooth_le_1.BleClient.startNotifications(this.deviceId, service, characteristic, (value) => {
|
|
69
|
+
const data = this.dataViewToData(value);
|
|
70
|
+
this.dispatchTypedEvent("accelerometerdatachanged", new accelerometer_js_1.AccelerometerDataEvent(data));
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
this.dispatchTypedEvent("backgrounderror", new device_js_1.BackgroundErrorEvent("Failed to start notifications", e));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
90
77
|
}
|
|
91
78
|
async stopNotifications(type) {
|
|
92
|
-
|
|
79
|
+
const result = this.characteristicForEvent(type);
|
|
80
|
+
if (result) {
|
|
81
|
+
const { service, characteristic } = result;
|
|
82
|
+
try {
|
|
83
|
+
await bluetooth_le_1.BleClient.stopNotifications(this.deviceId, service, characteristic);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
this.dispatchTypedEvent("backgrounderror", new device_js_1.BackgroundErrorEvent("Failed to stop notifications", e));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
93
89
|
}
|
|
94
90
|
characteristicForEvent(type) {
|
|
95
91
|
switch (type) {
|
|
96
92
|
case "accelerometerdatachanged": {
|
|
97
|
-
return
|
|
93
|
+
return {
|
|
94
|
+
service: bluetooth_profile_js_1.profile.accelerometer.id,
|
|
95
|
+
characteristic: bluetooth_profile_js_1.profile.accelerometer.characteristics.data.id,
|
|
96
|
+
};
|
|
98
97
|
}
|
|
99
98
|
default: {
|
|
100
99
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerometer-service.js","sourceRoot":"","sources":["../../lib/accelerometer-service.ts"],"names":[],"mappings":";;;AAAA,yDAA+E;
|
|
1
|
+
{"version":3,"file":"accelerometer-service.js","sourceRoot":"","sources":["../../lib/accelerometer-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,18 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare class TimeoutError extends Error {
|
|
7
7
|
}
|
|
8
|
+
export declare class DisconnectError extends Error {
|
|
9
|
+
constructor(message?: string);
|
|
10
|
+
}
|
|
8
11
|
/**
|
|
9
12
|
* Utility to time out an action after a delay.
|
|
10
13
|
*
|
|
11
14
|
* The action cannot be cancelled; it may still proceed after the timeout.
|
|
12
15
|
*/
|
|
13
16
|
export declare function withTimeout<T>(actionPromise: Promise<T>, timeout: number): Promise<T>;
|
|
17
|
+
export declare function delay(millis: number): Promise<unknown>;
|
|
18
|
+
export declare function timeoutErrorAfter<T>(millis: number, message?: string): Promise<T>;
|
|
19
|
+
export declare function disconnectErrorCallback<T>(message?: string): {
|
|
20
|
+
promise: Promise<T>;
|
|
21
|
+
callback: () => void | undefined;
|
|
22
|
+
};
|
package/build/cjs/async-util.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TimeoutError = void 0;
|
|
3
|
+
exports.DisconnectError = exports.TimeoutError = void 0;
|
|
4
4
|
exports.withTimeout = withTimeout;
|
|
5
|
+
exports.delay = delay;
|
|
6
|
+
exports.timeoutErrorAfter = timeoutErrorAfter;
|
|
7
|
+
exports.disconnectErrorCallback = disconnectErrorCallback;
|
|
5
8
|
/**
|
|
6
9
|
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
7
10
|
*
|
|
@@ -10,18 +13,35 @@ exports.withTimeout = withTimeout;
|
|
|
10
13
|
class TimeoutError extends Error {
|
|
11
14
|
}
|
|
12
15
|
exports.TimeoutError = TimeoutError;
|
|
16
|
+
class DisconnectError extends Error {
|
|
17
|
+
constructor(message = "Disconnect") {
|
|
18
|
+
super(message);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.DisconnectError = DisconnectError;
|
|
13
22
|
/**
|
|
14
23
|
* Utility to time out an action after a delay.
|
|
15
24
|
*
|
|
16
25
|
* The action cannot be cancelled; it may still proceed after the timeout.
|
|
17
26
|
*/
|
|
18
27
|
async function withTimeout(actionPromise, timeout) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
return Promise.race([
|
|
29
|
+
actionPromise,
|
|
30
|
+
timeoutErrorAfter(timeout),
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
async function delay(millis) {
|
|
34
|
+
return new Promise((resolve) => setTimeout(resolve, millis));
|
|
35
|
+
}
|
|
36
|
+
async function timeoutErrorAfter(millis, message = "Timeout") {
|
|
37
|
+
await delay(millis);
|
|
38
|
+
throw new TimeoutError(message);
|
|
39
|
+
}
|
|
40
|
+
function disconnectErrorCallback(message = "Disconnect") {
|
|
41
|
+
let callback;
|
|
42
|
+
const promise = new Promise((_, reject) => {
|
|
43
|
+
callback = () => reject(new DisconnectError(message));
|
|
23
44
|
});
|
|
24
|
-
|
|
25
|
-
return Promise.race([actionPromise, timeoutPromise]);
|
|
45
|
+
return { promise, callback: callback };
|
|
26
46
|
}
|
|
27
47
|
//# sourceMappingURL=async-util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-util.js","sourceRoot":"","sources":["../../lib/async-util.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"async-util.js","sourceRoot":"","sources":["../../lib/async-util.ts"],"names":[],"mappings":";;;AAkBA,kCAQC;AAED,sBAEC;AAED,8CAMC;AAED,0DAMC;AA9CD;;;;GAIG;AACH,MAAa,YAAa,SAAQ,KAAK;CAAG;AAA1C,oCAA0C;AAE1C,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,UAAkB,YAAY;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,0CAIC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAC/B,aAAyB,EACzB,OAAe;IAEf,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,aAAa;QACb,iBAAiB,CAAC,OAAO,CAAC;KAC3B,CAAe,CAAC;AACnB,CAAC;AAEM,KAAK,UAAU,KAAK,CAAC,MAAc;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,UAAkB,SAAS;IAE3B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,uBAAuB,CAAI,UAAkB,YAAY;IACvE,IAAI,QAAgC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC3C,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAS,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -3,14 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
+
import { BleDevice, TimeoutOptions } from "@capacitor-community/bluetooth-le";
|
|
6
7
|
import { AccelerometerService } from "./accelerometer-service.js";
|
|
8
|
+
import { ButtonService } from "./button-service.js";
|
|
9
|
+
import { DeviceInformationService } from "./device-information-service.js";
|
|
7
10
|
import { BoardVersion } from "./device.js";
|
|
8
11
|
import { LedService } from "./led-service.js";
|
|
9
|
-
import { Logging } from "./logging.js";
|
|
12
|
+
import { Logging, LoggingEvent } from "./logging.js";
|
|
10
13
|
import { MagnetometerService } from "./magnetometer-service.js";
|
|
11
14
|
import { ServiceConnectionEventMap, TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
12
15
|
import { UARTService } from "./uart-service.js";
|
|
16
|
+
export declare const bondingTimeoutInMs = 40000;
|
|
17
|
+
export declare const connectTimeoutInMs = 10000;
|
|
18
|
+
export declare const scanningTimeoutInMs = 10000;
|
|
19
|
+
export declare const isAndroid: () => boolean;
|
|
13
20
|
export interface Service {
|
|
21
|
+
readonly uuid: string;
|
|
22
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
14
23
|
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
15
24
|
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
16
25
|
}
|
|
@@ -20,44 +29,69 @@ interface ConnectCallbacks {
|
|
|
20
29
|
onFail: () => void;
|
|
21
30
|
onSuccess: () => void;
|
|
22
31
|
}
|
|
23
|
-
export declare class BluetoothDeviceWrapper {
|
|
24
|
-
readonly device:
|
|
32
|
+
export declare class BluetoothDeviceWrapper implements Logging {
|
|
33
|
+
readonly device: BleDevice;
|
|
25
34
|
private logging;
|
|
26
|
-
private dispatchTypedEvent;
|
|
27
35
|
private currentEvents;
|
|
28
36
|
private callbacks;
|
|
29
37
|
private duringExplicitConnectDisconnect;
|
|
30
|
-
private
|
|
31
|
-
private disconnectPromise;
|
|
32
|
-
private connecting;
|
|
38
|
+
private connected;
|
|
33
39
|
private isReconnect;
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
private serviceIds;
|
|
41
|
+
accelerometer: AccelerometerService;
|
|
42
|
+
buttons: ButtonService;
|
|
43
|
+
deviceInformation: DeviceInformationService;
|
|
44
|
+
led: LedService;
|
|
45
|
+
magnetometer: MagnetometerService;
|
|
46
|
+
uart: UARTService;
|
|
47
|
+
/**
|
|
48
|
+
* Only defined after connection.
|
|
49
|
+
*/
|
|
41
50
|
boardVersion: BoardVersion | undefined;
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
|
|
51
|
+
private services;
|
|
52
|
+
private waitingForDisconnectEventCallbacks;
|
|
53
|
+
private internalNotificationListeners;
|
|
54
|
+
constructor(device: BleDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks);
|
|
45
55
|
connect(): Promise<void>;
|
|
56
|
+
private connectInternal;
|
|
46
57
|
disconnect(): Promise<void>;
|
|
47
58
|
private disconnectInternal;
|
|
48
59
|
reconnect(): Promise<void>;
|
|
49
60
|
handleDisconnectEvent: () => Promise<void>;
|
|
50
|
-
|
|
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>;
|
|
61
|
+
getBoardVersion(): Promise<BoardVersion>;
|
|
58
62
|
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
59
63
|
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
60
|
-
private
|
|
64
|
+
private getServicesForEvent;
|
|
65
|
+
startInternalNotifications(serviceId: string, characteristicId: string, options?: TimeoutOptions): Promise<void>;
|
|
66
|
+
subscribe(serviceId: string, characteristicId: string, callback: (data: Uint8Array) => void): void;
|
|
67
|
+
unsubscribe(serviceId: string, characteristicId: string, callback: (data: Uint8Array) => void): void;
|
|
68
|
+
stopInternalNotifications(serviceId: string, characteristicId: string): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Write to characteristic and wait for a notification response.
|
|
71
|
+
*
|
|
72
|
+
* It is the responsibility of the caller to have started notifications
|
|
73
|
+
* for the characteristic.
|
|
74
|
+
*/
|
|
75
|
+
writeForNotification(serviceId: string, characteristicId: string, value: DataView, notificationId: number, isFinalNotification?: (p: Uint8Array) => boolean): Promise<Uint8Array>;
|
|
76
|
+
waitForDisconnect(timeout: number): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Suitable for running a series of BLE interactions with an overall timeout
|
|
79
|
+
* and general disconnection
|
|
80
|
+
*/
|
|
81
|
+
raceDisconnectAndTimeout<T>(promise: Promise<T>, options?: {
|
|
82
|
+
actionName?: string;
|
|
83
|
+
timeout?: number;
|
|
84
|
+
}): Promise<T>;
|
|
85
|
+
private disconnectErrorPromise;
|
|
86
|
+
event(event: LoggingEvent): void;
|
|
87
|
+
log(message: string): void;
|
|
88
|
+
error(message: string, e?: unknown): void;
|
|
89
|
+
private getNotificationKey;
|
|
90
|
+
/**
|
|
91
|
+
* Bonds with device and handles the post-bond device state only returning
|
|
92
|
+
* when we can reattempt a connection with the device.
|
|
93
|
+
*/
|
|
94
|
+
private connectHandlingBond;
|
|
95
|
+
private bondConnectDeviceInternal;
|
|
61
96
|
}
|
|
62
|
-
export declare const createBluetoothDeviceWrapper: (device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks) => Promise<BluetoothDeviceWrapper | undefined>;
|
|
63
97
|
export {};
|