@microbit/microbit-connection 0.0.0-alpha.3 → 0.0.0-alpha.30
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/build/accelerometer-service.d.ts +8 -9
- package/build/accelerometer-service.js +24 -43
- package/build/accelerometer-service.js.map +1 -1
- package/build/bluetooth-device-wrapper.d.ts +27 -26
- package/build/bluetooth-device-wrapper.js +137 -89
- package/build/bluetooth-device-wrapper.js.map +1 -1
- package/build/bluetooth.d.ts +14 -11
- package/build/bluetooth.js +70 -91
- package/build/bluetooth.js.map +1 -1
- package/build/board-id.d.ts +1 -0
- package/build/board-id.js +8 -0
- package/build/board-id.js.map +1 -1
- package/build/button-service.d.ts +13 -0
- package/build/button-service.js +76 -0
- package/build/button-service.js.map +1 -0
- package/build/buttons.d.ts +10 -0
- package/build/buttons.js +18 -0
- package/build/buttons.js.map +1 -0
- package/build/constants.d.ts +1 -0
- package/build/constants.js +1 -0
- package/build/constants.js.map +1 -1
- package/build/device.d.ts +30 -39
- package/build/device.js +12 -3
- package/build/device.js.map +1 -1
- package/build/events.d.ts +11 -1
- package/build/events.js +86 -1
- package/build/events.js.map +1 -1
- package/build/hex-flash-data-source.d.ts +6 -8
- package/build/hex-flash-data-source.js +16 -45
- package/build/hex-flash-data-source.js.map +1 -1
- package/build/index.d.ts +10 -5
- package/build/index.js +7 -4
- package/build/index.js.map +1 -1
- package/build/led-service.d.ts +20 -0
- package/build/led-service.js +116 -0
- package/build/led-service.js.map +1 -0
- package/build/led.d.ts +6 -0
- package/build/led.js +2 -0
- package/build/led.js.map +1 -0
- package/build/logging.js +3 -1
- package/build/logging.js.map +1 -1
- package/build/promise-queue.d.ts +27 -0
- package/build/promise-queue.js +74 -0
- package/build/promise-queue.js.map +1 -0
- package/build/service-events.d.ts +3 -0
- package/build/service-events.js +12 -0
- package/build/service-events.js.map +1 -1
- package/build/usb-device-wrapper.d.ts +7 -1
- package/build/usb-device-wrapper.js +40 -3
- package/build/usb-device-wrapper.js.map +1 -1
- package/build/usb-partial-flashing.d.ts +11 -5
- package/build/usb-partial-flashing.js +53 -10
- package/build/usb-partial-flashing.js.map +1 -1
- package/build/usb-radio-bridge.d.ts +31 -18
- package/build/usb-radio-bridge.js +351 -187
- package/build/usb-radio-bridge.js.map +1 -1
- package/build/usb.d.ts +14 -17
- package/build/usb.js +111 -47
- package/build/usb.js.map +1 -1
- package/package.json +5 -3
- package/vite.config.ts +9 -7
- package/build/bluetooth-utils.d.ts +0 -5
- package/build/bluetooth-utils.js +0 -14
- package/build/bluetooth-utils.js.map +0 -1
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { AccelerometerData } from "./accelerometer.js";
|
|
2
|
-
import {
|
|
3
|
-
import { TypedServiceEventDispatcher } from "./service-events.js";
|
|
4
|
-
export declare class AccelerometerService {
|
|
2
|
+
import { Service } from "./bluetooth-device-wrapper.js";
|
|
3
|
+
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
4
|
+
export declare class AccelerometerService implements Service {
|
|
5
5
|
private accelerometerDataCharacteristic;
|
|
6
6
|
private accelerometerPeriodCharacteristic;
|
|
7
7
|
private dispatchTypedEvent;
|
|
8
|
-
private isNotifying;
|
|
9
8
|
private queueGattOperation;
|
|
10
|
-
constructor(accelerometerDataCharacteristic: BluetoothRemoteGATTCharacteristic, accelerometerPeriodCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher,
|
|
11
|
-
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher,
|
|
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>;
|
|
12
11
|
private dataViewToData;
|
|
13
12
|
getData(): Promise<AccelerometerData>;
|
|
14
13
|
getPeriod(): Promise<number>;
|
|
15
14
|
setPeriod(value: number): Promise<void>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
16
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
17
|
+
private characteristicForEvent;
|
|
19
18
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
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
|
-
constructor(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatchTypedEvent,
|
|
5
|
+
constructor(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatchTypedEvent, queueGattOperation) {
|
|
7
6
|
Object.defineProperty(this, "accelerometerDataCharacteristic", {
|
|
8
7
|
enumerable: true,
|
|
9
8
|
configurable: true,
|
|
@@ -22,24 +21,19 @@ export class AccelerometerService {
|
|
|
22
21
|
writable: true,
|
|
23
22
|
value: dispatchTypedEvent
|
|
24
23
|
});
|
|
25
|
-
Object.defineProperty(this, "isNotifying", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: isNotifying
|
|
30
|
-
});
|
|
31
24
|
Object.defineProperty(this, "queueGattOperation", {
|
|
32
25
|
enumerable: true,
|
|
33
26
|
configurable: true,
|
|
34
27
|
writable: true,
|
|
35
28
|
value: queueGattOperation
|
|
36
29
|
});
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
30
|
+
this.accelerometerDataCharacteristic.addEventListener("characteristicvaluechanged", (event) => {
|
|
31
|
+
const target = event.target;
|
|
32
|
+
const data = this.dataViewToData(target.value);
|
|
33
|
+
this.dispatchTypedEvent("accelerometerdatachanged", new AccelerometerDataEvent(data));
|
|
34
|
+
});
|
|
41
35
|
}
|
|
42
|
-
static async createService(gattServer, dispatcher,
|
|
36
|
+
static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
|
|
43
37
|
let accelerometerService;
|
|
44
38
|
try {
|
|
45
39
|
accelerometerService = await gattServer.getPrimaryService(profile.accelerometer.id);
|
|
@@ -58,7 +52,7 @@ export class AccelerometerService {
|
|
|
58
52
|
}
|
|
59
53
|
const accelerometerDataCharacteristic = await accelerometerService.getCharacteristic(profile.accelerometer.characteristics.data.id);
|
|
60
54
|
const accelerometerPeriodCharacteristic = await accelerometerService.getCharacteristic(profile.accelerometer.characteristics.period.id);
|
|
61
|
-
return new AccelerometerService(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatcher,
|
|
55
|
+
return new AccelerometerService(accelerometerDataCharacteristic, accelerometerPeriodCharacteristic, dispatcher, queueGattOperation);
|
|
62
56
|
}
|
|
63
57
|
dataViewToData(dataView) {
|
|
64
58
|
return {
|
|
@@ -68,21 +62,11 @@ export class AccelerometerService {
|
|
|
68
62
|
};
|
|
69
63
|
}
|
|
70
64
|
async getData() {
|
|
71
|
-
const
|
|
72
|
-
this.queueGattOperation({
|
|
73
|
-
callback,
|
|
74
|
-
operation: () => this.accelerometerDataCharacteristic.readValue(),
|
|
75
|
-
});
|
|
76
|
-
const dataView = (await gattOperationPromise);
|
|
65
|
+
const dataView = await this.queueGattOperation(() => this.accelerometerDataCharacteristic.readValue());
|
|
77
66
|
return this.dataViewToData(dataView);
|
|
78
67
|
}
|
|
79
68
|
async getPeriod() {
|
|
80
|
-
const
|
|
81
|
-
this.queueGattOperation({
|
|
82
|
-
callback,
|
|
83
|
-
operation: () => this.accelerometerPeriodCharacteristic.readValue(),
|
|
84
|
-
});
|
|
85
|
-
const dataView = (await gattOperationPromise);
|
|
69
|
+
const dataView = await this.queueGattOperation(() => this.accelerometerPeriodCharacteristic.readValue());
|
|
86
70
|
return dataView.getUint16(0, true);
|
|
87
71
|
}
|
|
88
72
|
async setPeriod(value) {
|
|
@@ -94,28 +78,25 @@ export class AccelerometerService {
|
|
|
94
78
|
// Values passed are rounded up to the allowed values on device.
|
|
95
79
|
// Documentation for allowed values looks wrong.
|
|
96
80
|
// https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html
|
|
97
|
-
const { callback } = createGattOperationPromise();
|
|
98
81
|
const dataView = new DataView(new ArrayBuffer(2));
|
|
99
82
|
dataView.setUint16(0, value, true);
|
|
100
|
-
this.queueGattOperation(
|
|
101
|
-
callback,
|
|
102
|
-
operation: () => this.accelerometerPeriodCharacteristic.writeValueWithoutResponse(dataView),
|
|
103
|
-
});
|
|
83
|
+
return this.queueGattOperation(() => this.accelerometerPeriodCharacteristic.writeValue(dataView));
|
|
104
84
|
}
|
|
105
|
-
|
|
106
|
-
this.
|
|
107
|
-
const target = event.target;
|
|
108
|
-
const data = this.dataViewToData(target.value);
|
|
109
|
-
this.dispatchTypedEvent("accelerometerdatachanged", new AccelerometerDataEvent(data));
|
|
110
|
-
});
|
|
85
|
+
async startNotifications(type) {
|
|
86
|
+
await this.characteristicForEvent(type)?.startNotifications();
|
|
111
87
|
}
|
|
112
|
-
|
|
113
|
-
this.
|
|
114
|
-
this.isNotifying = true;
|
|
88
|
+
async stopNotifications(type) {
|
|
89
|
+
await this.characteristicForEvent(type)?.stopNotifications();
|
|
115
90
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
91
|
+
characteristicForEvent(type) {
|
|
92
|
+
switch (type) {
|
|
93
|
+
case "accelerometerdatachanged": {
|
|
94
|
+
return this.accelerometerDataCharacteristic;
|
|
95
|
+
}
|
|
96
|
+
default: {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
119
100
|
}
|
|
120
101
|
}
|
|
121
102
|
//# sourceMappingURL=accelerometer-service.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"accelerometer-service.js","sourceRoot":"","sources":["../lib/accelerometer-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,40 +4,40 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
6
|
import { AccelerometerService } from "./accelerometer-service.js";
|
|
7
|
-
import { BoardVersion
|
|
7
|
+
import { BoardVersion } from "./device.js";
|
|
8
|
+
import { LedService } from "./led-service.js";
|
|
8
9
|
import { Logging } from "./logging.js";
|
|
9
|
-
import { ServiceConnectionEventMap, TypedServiceEventDispatcher } from "./service-events.js";
|
|
10
|
-
export interface
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import { ServiceConnectionEventMap, TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
11
|
+
export interface Service {
|
|
12
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
13
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
interface ConnectCallbacks {
|
|
16
|
+
onConnecting: () => void;
|
|
17
|
+
onReconnecting: () => void;
|
|
18
|
+
onFail: () => void;
|
|
19
|
+
onSuccess: () => void;
|
|
17
20
|
}
|
|
18
21
|
export declare class BluetoothDeviceWrapper {
|
|
19
22
|
readonly device: BluetoothDevice;
|
|
20
23
|
private logging;
|
|
21
24
|
private dispatchTypedEvent;
|
|
22
|
-
private
|
|
25
|
+
private currentEvents;
|
|
26
|
+
private callbacks;
|
|
23
27
|
private duringExplicitConnectDisconnect;
|
|
24
28
|
private gattConnectPromise;
|
|
25
29
|
private disconnectPromise;
|
|
26
30
|
private connecting;
|
|
27
31
|
private isReconnect;
|
|
28
|
-
private
|
|
29
|
-
private
|
|
32
|
+
private connectReadyPromise;
|
|
33
|
+
private accelerometer;
|
|
34
|
+
private buttons;
|
|
35
|
+
private led;
|
|
36
|
+
private serviceInfo;
|
|
30
37
|
boardVersion: BoardVersion | undefined;
|
|
31
|
-
|
|
32
|
-
accelerometerdatachanged: {
|
|
33
|
-
notifying: boolean;
|
|
34
|
-
service: (options?: {
|
|
35
|
-
listenerInit: boolean;
|
|
36
|
-
}) => Promise<AccelerometerService | undefined>;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
38
|
+
private disconnectedRejectionErrorFactory;
|
|
39
39
|
private gattOperations;
|
|
40
|
-
constructor(device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher,
|
|
40
|
+
constructor(device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks);
|
|
41
41
|
connect(): Promise<void>;
|
|
42
42
|
disconnect(): Promise<void>;
|
|
43
43
|
private disconnectInternal;
|
|
@@ -46,11 +46,12 @@ export declare class BluetoothDeviceWrapper {
|
|
|
46
46
|
private assertGattServer;
|
|
47
47
|
private getBoardVersion;
|
|
48
48
|
private queueGattOperation;
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
private createIfNeeded;
|
|
50
|
+
getAccelerometerService(): Promise<AccelerometerService | undefined>;
|
|
51
|
+
getLedService(): Promise<LedService | undefined>;
|
|
52
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
53
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
54
54
|
private disposeServices;
|
|
55
55
|
}
|
|
56
|
-
export declare const createBluetoothDeviceWrapper: (device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher,
|
|
56
|
+
export declare const createBluetoothDeviceWrapper: (device: BluetoothDevice, logging: Logging, dispatchTypedEvent: TypedServiceEventDispatcher, currentEvents: () => Array<keyof ServiceConnectionEventMap>, callbacks: ConnectCallbacks) => Promise<BluetoothDeviceWrapper | undefined>;
|
|
57
|
+
export {};
|
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { AccelerometerService } from "./accelerometer-service.js";
|
|
7
7
|
import { profile } from "./bluetooth-profile.js";
|
|
8
|
+
import { ButtonService } from "./button-service.js";
|
|
8
9
|
import { DeviceError } from "./device.js";
|
|
10
|
+
import { LedService } from "./led-service.js";
|
|
9
11
|
import { NullLogging } from "./logging.js";
|
|
12
|
+
import { PromiseQueue } from "./promise-queue.js";
|
|
10
13
|
const deviceIdToWrapper = new Map();
|
|
11
14
|
const connectTimeoutDuration = 10000;
|
|
12
15
|
function findPlatform() {
|
|
@@ -23,8 +26,42 @@ function findPlatform() {
|
|
|
23
26
|
}
|
|
24
27
|
const platform = findPlatform();
|
|
25
28
|
const isWindowsOS = platform && /^Win/.test(platform);
|
|
29
|
+
class ServiceInfo {
|
|
30
|
+
constructor(serviceFactory, events) {
|
|
31
|
+
Object.defineProperty(this, "serviceFactory", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: serviceFactory
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(this, "events", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: events
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(this, "service", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: void 0
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
get() {
|
|
51
|
+
return this.service;
|
|
52
|
+
}
|
|
53
|
+
async createIfNeeded(gattServer, dispatcher, queueGattOperation, listenerInit) {
|
|
54
|
+
this.service =
|
|
55
|
+
this.service ??
|
|
56
|
+
(await this.serviceFactory(gattServer, dispatcher, queueGattOperation, listenerInit));
|
|
57
|
+
return this.service;
|
|
58
|
+
}
|
|
59
|
+
dispose() {
|
|
60
|
+
this.service = undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
26
63
|
export class BluetoothDeviceWrapper {
|
|
27
|
-
constructor(device, logging = new NullLogging(), dispatchTypedEvent,
|
|
64
|
+
constructor(device, logging = new NullLogging(), dispatchTypedEvent, currentEvents, callbacks) {
|
|
28
65
|
Object.defineProperty(this, "device", {
|
|
29
66
|
enumerable: true,
|
|
30
67
|
configurable: true,
|
|
@@ -43,11 +80,17 @@ export class BluetoothDeviceWrapper {
|
|
|
43
80
|
writable: true,
|
|
44
81
|
value: dispatchTypedEvent
|
|
45
82
|
});
|
|
46
|
-
Object.defineProperty(this, "
|
|
83
|
+
Object.defineProperty(this, "currentEvents", {
|
|
47
84
|
enumerable: true,
|
|
48
85
|
configurable: true,
|
|
49
86
|
writable: true,
|
|
50
|
-
value:
|
|
87
|
+
value: currentEvents
|
|
88
|
+
});
|
|
89
|
+
Object.defineProperty(this, "callbacks", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
configurable: true,
|
|
92
|
+
writable: true,
|
|
93
|
+
value: callbacks
|
|
51
94
|
});
|
|
52
95
|
// Used to avoid automatic reconnection during user triggered connect/disconnect
|
|
53
96
|
// or reconnection itself.
|
|
@@ -90,17 +133,40 @@ export class BluetoothDeviceWrapper {
|
|
|
90
133
|
writable: true,
|
|
91
134
|
value: false
|
|
92
135
|
});
|
|
93
|
-
Object.defineProperty(this, "
|
|
136
|
+
Object.defineProperty(this, "connectReadyPromise", {
|
|
94
137
|
enumerable: true,
|
|
95
138
|
configurable: true,
|
|
96
139
|
writable: true,
|
|
97
140
|
value: void 0
|
|
98
141
|
});
|
|
99
|
-
Object.defineProperty(this, "
|
|
142
|
+
Object.defineProperty(this, "accelerometer", {
|
|
100
143
|
enumerable: true,
|
|
101
144
|
configurable: true,
|
|
102
145
|
writable: true,
|
|
103
|
-
value:
|
|
146
|
+
value: new ServiceInfo(AccelerometerService.createService, [
|
|
147
|
+
"accelerometerdatachanged",
|
|
148
|
+
])
|
|
149
|
+
});
|
|
150
|
+
Object.defineProperty(this, "buttons", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
configurable: true,
|
|
153
|
+
writable: true,
|
|
154
|
+
value: new ServiceInfo(ButtonService.createService, [
|
|
155
|
+
"buttonachanged",
|
|
156
|
+
"buttonbchanged",
|
|
157
|
+
])
|
|
158
|
+
});
|
|
159
|
+
Object.defineProperty(this, "led", {
|
|
160
|
+
enumerable: true,
|
|
161
|
+
configurable: true,
|
|
162
|
+
writable: true,
|
|
163
|
+
value: new ServiceInfo(LedService.createService, [])
|
|
164
|
+
});
|
|
165
|
+
Object.defineProperty(this, "serviceInfo", {
|
|
166
|
+
enumerable: true,
|
|
167
|
+
configurable: true,
|
|
168
|
+
writable: true,
|
|
169
|
+
value: [this.accelerometer, this.buttons, this.led]
|
|
104
170
|
});
|
|
105
171
|
Object.defineProperty(this, "boardVersion", {
|
|
106
172
|
enumerable: true,
|
|
@@ -108,25 +174,29 @@ export class BluetoothDeviceWrapper {
|
|
|
108
174
|
writable: true,
|
|
109
175
|
value: void 0
|
|
110
176
|
});
|
|
111
|
-
Object.defineProperty(this, "
|
|
177
|
+
Object.defineProperty(this, "disconnectedRejectionErrorFactory", {
|
|
112
178
|
enumerable: true,
|
|
113
179
|
configurable: true,
|
|
114
180
|
writable: true,
|
|
115
|
-
value: {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
181
|
+
value: () => {
|
|
182
|
+
return new DeviceError({
|
|
183
|
+
code: "device-disconnected",
|
|
184
|
+
message: "Error processing gatt operations queue - device disconnected",
|
|
185
|
+
});
|
|
120
186
|
}
|
|
121
187
|
});
|
|
122
188
|
Object.defineProperty(this, "gattOperations", {
|
|
123
189
|
enumerable: true,
|
|
124
190
|
configurable: true,
|
|
125
191
|
writable: true,
|
|
126
|
-
value: {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
192
|
+
value: new PromiseQueue({
|
|
193
|
+
abortCheck: () => {
|
|
194
|
+
if (!this.device.gatt?.connected) {
|
|
195
|
+
return this.disconnectedRejectionErrorFactory;
|
|
196
|
+
}
|
|
197
|
+
return undefined;
|
|
198
|
+
},
|
|
199
|
+
})
|
|
130
200
|
});
|
|
131
201
|
Object.defineProperty(this, "handleDisconnectEvent", {
|
|
132
202
|
enumerable: true,
|
|
@@ -149,45 +219,7 @@ export class BluetoothDeviceWrapper {
|
|
|
149
219
|
}
|
|
150
220
|
}
|
|
151
221
|
});
|
|
152
|
-
Object.defineProperty(this, "processGattOperationQueue", {
|
|
153
|
-
enumerable: true,
|
|
154
|
-
configurable: true,
|
|
155
|
-
writable: true,
|
|
156
|
-
value: () => {
|
|
157
|
-
if (!this.device.gatt?.connected) {
|
|
158
|
-
// No longer connected. Drop queue.
|
|
159
|
-
this.clearGattQueueOnDisconnect();
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (this.gattOperations.busy) {
|
|
163
|
-
// We will finish processing the current operation, then
|
|
164
|
-
// pick up processing the queue in the finally block.
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
const gattOperation = this.gattOperations.queue.shift();
|
|
168
|
-
if (!gattOperation) {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
this.gattOperations.busy = true;
|
|
172
|
-
gattOperation
|
|
173
|
-
.operation()
|
|
174
|
-
.then((result) => {
|
|
175
|
-
gattOperation.callback.resolve(result);
|
|
176
|
-
})
|
|
177
|
-
.catch((err) => {
|
|
178
|
-
gattOperation.callback.reject(new DeviceError({ code: "background-comms-error", message: err }));
|
|
179
|
-
this.logging.error("Error processing gatt operations queue", err);
|
|
180
|
-
})
|
|
181
|
-
.finally(() => {
|
|
182
|
-
this.gattOperations.busy = false;
|
|
183
|
-
this.processGattOperationQueue();
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
222
|
device.addEventListener("gattserverdisconnected", this.handleDisconnectEvent);
|
|
188
|
-
for (const [key, value] of Object.entries(this.addedServiceListeners)) {
|
|
189
|
-
this.serviceListenerState[key].notifying = value;
|
|
190
|
-
}
|
|
191
223
|
}
|
|
192
224
|
async connect() {
|
|
193
225
|
this.logging.event({
|
|
@@ -202,10 +234,23 @@ export class BluetoothDeviceWrapper {
|
|
|
202
234
|
await this.gattConnectPromise;
|
|
203
235
|
return;
|
|
204
236
|
}
|
|
237
|
+
if (this.isReconnect) {
|
|
238
|
+
this.callbacks.onReconnecting();
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.callbacks.onConnecting();
|
|
242
|
+
}
|
|
205
243
|
this.duringExplicitConnectDisconnect++;
|
|
206
244
|
if (this.device.gatt === undefined) {
|
|
207
245
|
throw new Error("BluetoothRemoteGATTServer for micro:bit device is undefined");
|
|
208
246
|
}
|
|
247
|
+
if (isWindowsOS) {
|
|
248
|
+
// On Windows, the micro:bit can take around 3 seconds to respond to gatt.disconnect().
|
|
249
|
+
// Attempting to connect/reconnect before the micro:bit has responded results in another
|
|
250
|
+
// gattserverdisconnected event being fired. We then fail to get primaryService on a
|
|
251
|
+
// disconnected GATT server.
|
|
252
|
+
await this.connectReadyPromise;
|
|
253
|
+
}
|
|
209
254
|
try {
|
|
210
255
|
// A previous connect might have completed in the background as a device was replugged etc.
|
|
211
256
|
await this.disconnectPromise;
|
|
@@ -259,17 +304,12 @@ export class BluetoothDeviceWrapper {
|
|
|
259
304
|
finally {
|
|
260
305
|
this.connecting = false;
|
|
261
306
|
}
|
|
262
|
-
|
|
263
|
-
// the user has listened to.
|
|
264
|
-
for (const serviceListener of Object.values(this.serviceListenerState)) {
|
|
265
|
-
if (serviceListener.notifying) {
|
|
266
|
-
serviceListener.service.call(this, { listenerInit: true });
|
|
267
|
-
}
|
|
268
|
-
}
|
|
307
|
+
this.currentEvents().forEach((e) => this.startNotifications(e));
|
|
269
308
|
this.logging.event({
|
|
270
309
|
type: this.isReconnect ? "Reconnect" : "Connect",
|
|
271
310
|
message: "Bluetooth connect success",
|
|
272
311
|
});
|
|
312
|
+
this.callbacks.onSuccess();
|
|
273
313
|
}
|
|
274
314
|
catch (e) {
|
|
275
315
|
this.logging.error("Bluetooth connect error", e);
|
|
@@ -278,10 +318,13 @@ export class BluetoothDeviceWrapper {
|
|
|
278
318
|
message: "Bluetooth connect failed",
|
|
279
319
|
});
|
|
280
320
|
await this.disconnectInternal(false);
|
|
321
|
+
this.callbacks.onFail();
|
|
281
322
|
throw new Error("Failed to establish a connection!");
|
|
282
323
|
}
|
|
283
324
|
finally {
|
|
284
325
|
this.duringExplicitConnectDisconnect--;
|
|
326
|
+
// Reset isReconnect for next time
|
|
327
|
+
this.isReconnect = false;
|
|
285
328
|
}
|
|
286
329
|
}
|
|
287
330
|
async disconnect() {
|
|
@@ -303,18 +346,11 @@ export class BluetoothDeviceWrapper {
|
|
|
303
346
|
this.disposeServices();
|
|
304
347
|
this.duringExplicitConnectDisconnect--;
|
|
305
348
|
}
|
|
306
|
-
this.
|
|
349
|
+
this.connectReadyPromise = new Promise((resolve) => setTimeout(resolve, 3_500));
|
|
307
350
|
}
|
|
308
351
|
async reconnect() {
|
|
309
352
|
this.logging.log("Bluetooth reconnect");
|
|
310
353
|
this.isReconnect = true;
|
|
311
|
-
if (isWindowsOS) {
|
|
312
|
-
// On Windows, the micro:bit can take around 3 seconds to respond to gatt.disconnect().
|
|
313
|
-
// Attempting to reconnect before the micro:bit has responded results in another
|
|
314
|
-
// gattserverdisconnected event being fired. We then fail to get primaryService on a
|
|
315
|
-
// disconnected GATT server.
|
|
316
|
-
await this.reconnectReadyPromise;
|
|
317
|
-
}
|
|
318
354
|
await this.connect();
|
|
319
355
|
}
|
|
320
356
|
assertGattServer() {
|
|
@@ -344,42 +380,54 @@ export class BluetoothDeviceWrapper {
|
|
|
344
380
|
throw new Error("Could not read model number");
|
|
345
381
|
}
|
|
346
382
|
}
|
|
347
|
-
queueGattOperation(
|
|
348
|
-
|
|
349
|
-
|
|
383
|
+
queueGattOperation(action) {
|
|
384
|
+
// Previously we wrapped rejections with:
|
|
385
|
+
// new DeviceError({ code: "background-comms-error", message: err }),
|
|
386
|
+
return this.gattOperations.add(action);
|
|
350
387
|
}
|
|
351
|
-
|
|
352
|
-
this.
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
});
|
|
358
|
-
this.gattOperations = { busy: false, queue: [] };
|
|
388
|
+
createIfNeeded(info, listenerInit) {
|
|
389
|
+
const gattServer = this.assertGattServer();
|
|
390
|
+
return info.createIfNeeded(gattServer, this.dispatchTypedEvent, this.queueGattOperation.bind(this), listenerInit);
|
|
391
|
+
}
|
|
392
|
+
async getAccelerometerService() {
|
|
393
|
+
return this.createIfNeeded(this.accelerometer, false);
|
|
359
394
|
}
|
|
360
|
-
async
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
395
|
+
async getLedService() {
|
|
396
|
+
return this.createIfNeeded(this.led, false);
|
|
397
|
+
}
|
|
398
|
+
async startNotifications(type) {
|
|
399
|
+
const serviceInfo = this.serviceInfo.find((s) => s.events.includes(type));
|
|
400
|
+
if (serviceInfo) {
|
|
401
|
+
this.queueGattOperation(async () => {
|
|
402
|
+
// TODO: type cheat! why?
|
|
403
|
+
const service = await this.createIfNeeded(serviceInfo, true);
|
|
404
|
+
await service?.startNotifications(type);
|
|
405
|
+
});
|
|
364
406
|
}
|
|
365
|
-
|
|
407
|
+
}
|
|
408
|
+
async stopNotifications(type) {
|
|
409
|
+
this.queueGattOperation(async () => {
|
|
410
|
+
const serviceInfo = this.serviceInfo.find((s) => s.events.includes(type));
|
|
411
|
+
await serviceInfo?.get()?.stopNotifications(type);
|
|
412
|
+
});
|
|
366
413
|
}
|
|
367
414
|
disposeServices() {
|
|
368
|
-
this.
|
|
369
|
-
this.
|
|
415
|
+
this.serviceInfo.forEach((s) => s.dispose());
|
|
416
|
+
this.gattOperations.clear(this.disconnectedRejectionErrorFactory);
|
|
370
417
|
}
|
|
371
418
|
}
|
|
372
|
-
export const createBluetoothDeviceWrapper = async (device, logging, dispatchTypedEvent,
|
|
419
|
+
export const createBluetoothDeviceWrapper = async (device, logging, dispatchTypedEvent, currentEvents, callbacks) => {
|
|
373
420
|
try {
|
|
374
421
|
// Reuse our connection objects for the same device as they
|
|
375
422
|
// track the GATT connect promise that never resolves.
|
|
376
423
|
const bluetooth = deviceIdToWrapper.get(device.id) ??
|
|
377
|
-
new BluetoothDeviceWrapper(device, logging, dispatchTypedEvent,
|
|
424
|
+
new BluetoothDeviceWrapper(device, logging, dispatchTypedEvent, currentEvents, callbacks);
|
|
378
425
|
deviceIdToWrapper.set(device.id, bluetooth);
|
|
379
426
|
await bluetooth.connect();
|
|
380
427
|
return bluetooth;
|
|
381
428
|
}
|
|
382
429
|
catch (e) {
|
|
430
|
+
logging.error("Bluetooth connect error", e);
|
|
383
431
|
return undefined;
|
|
384
432
|
}
|
|
385
433
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bluetooth-device-wrapper.js","sourceRoot":"","sources":["../lib/bluetooth-device-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAgB,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AAqBpD,MAAM,iBAAiB,GAAwC,IAAI,GAAG,EAAE,CAAC;AAEzE,MAAM,sBAAsB,GAAW,KAAK,CAAC;AAE7C,SAAS,YAAY;IACnB,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC;AACjE,CAAC;AACD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;AAChC,MAAM,WAAW,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEtD,MAAM,OAAO,sBAAsB;IAkCjC,YACkB,MAAuB,EAC/B,UAAmB,IAAI,WAAW,EAAE,EACpC,kBAA+C,EAC/C,qBAGP;QAND;;;;mBAAgB,MAAM;WAAiB;QACvC;;;;mBAAQ,OAAO;WAA6B;QAC5C;;;;mBAAQ,kBAAkB;WAA6B;QACvD;;;;mBAAQ,qBAAqB;WAG5B;QAxCH,gFAAgF;QAChF,0BAA0B;QAClB;;;;mBAA0C,CAAC;WAAC;QAEpD,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,oEAAoE;QACpE,2DAA2D;QAC3D,EAAE;QACF,oCAAoC;QACpC,+DAA+D;QACvD;;;;;WAA8C;QAC9C;;;;;WAAgD;QAChD;;;;mBAAa,KAAK;WAAC;QACnB;;;;mBAAc,KAAK;WAAC;QACpB;;;;;WAAiD;QACjD;;;;;WAAuD;QAE/D;;;;;WAAuC;QACvC;;;;mBAAuB;gBACrB,wBAAwB,EAAE;oBACxB,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,IAAI,CAAC,uBAAuB;iBACtC;aACF;WAAC;QAEM;;;;mBAAiC;gBACvC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,EAAE;aACV;WAAC;QAuKF;;;;mBAAwB,KAAK,IAAmB,EAAE;gBAChD,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;wBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,+DAA+D,CAChE,CAAC;wBACF,gCAAgC;wBAChC,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,8DAA8D,CAC/D,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,2DAA2D,EAC3D,CAAC,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;WAAC;QAyCM;;;;mBAA4B,GAAS,EAAE;gBAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;oBACjC,mCAAmC;oBACnC,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBAClC,OAAO;gBACT,CAAC;gBACD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;oBAC7B,wDAAwD;oBACxD,qDAAqD;oBACrD,OAAO;gBACT,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACxD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChC,aAAa;qBACV,SAAS,EAAE;qBACX,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACf,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzC,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,aAAa,CAAC,QAAQ,CAAC,MAAM,CAC3B,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAClE,CAAC;oBACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;gBACpE,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,KAAK,CAAC;oBACjC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACnC,CAAC,CAAC,CAAC;YACP,CAAC;WAAC;QAxPA,MAAM,CAAC,gBAAgB,CACrB,wBAAwB,EACxB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;QACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,oBAAoB,CACvB,GAAsC,CACvC,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAChD,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,0DAA0D,CAC3D,CAAC;YACF,uEAAuE;YACvE,8EAA8E;YAC9E,yEAAyE;YACzE,MAAM,IAAI,CAAC,kBAAkB,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,2FAA2F;YAC3F,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAC7B,IAAI,CAAC,kBAAkB;gBACrB,IAAI,CAAC,kBAAkB;oBACvB,IAAI,CAAC,MAAM,CAAC,IAAI;yBACb,OAAO,EAAE;yBACT,IAAI,CAAC,KAAK,IAAI,EAAE;wBACf,6EAA6E;wBAC7E,8EAA8E;wBAC9E,4CAA4C;wBAC5C,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;wBACjD,sFAAsF;wBACtF,oCAAoC;wBACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,oEAAoE,CACrE,CAAC;4BACF,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;gCACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gCACrC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;4BACrC,CAAC,CAAC,EAAE,CAAC;wBACP,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,iDAAiD,CAClD,CAAC;wBACJ,CAAC;oBACH,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;wBACX,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BACpB,uDAAuD;4BACvD,MAAM,CAAC,CAAC;wBACV,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,uDAAuD,EACvD,CAAC,CACF,CAAC;4BACF,OAAO,SAAS,CAAC;wBACnB,CAAC;oBACH,CAAC,CAAC;yBACD,OAAO,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;wBAChE,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;oBACtC,CAAC,CAAC,CAAC;YAEP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC3C,IAAI,CAAC,kBAAkB;oBACvB,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE,CACjC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC,CAC7D;iBACF,CAAC,CAAC;gBACH,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAC1B,CAAC;YAED,yDAAyD;YACzD,4BAA4B;YAC5B,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACvE,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC;oBAC9B,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACjB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAChD,OAAO,EAAE,2BAA2B;aACrC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACjB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAChD,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,aAAsB;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,wBAAwB,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAChF,CAAC;QACF,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;YACnE,6CAA6C;QAC/C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnD,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAC3B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,WAAW,EAAE,CAAC;YAChB,uFAAuF;YACvF,gFAAgF;YAChF,oFAAoF;YACpF,4BAA4B;YAC5B,MAAM,IAAI,CAAC,qBAAqB,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAwBO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,iBAAiB,CAChE,WAAW,CAAC,EAAE,CACf,CAAC;YACF,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,iBAAiB,CACvD,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAC3C,CAAC;YACF,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC/D,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IACE,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,EACpE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,aAA4B;QACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAmCO,0BAA0B;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACvC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAChB,IAAI,WAAW,CAAC;gBACd,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EACL,8DAA8D;aACjE,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,UAEI,EAAE,YAAY,EAAE,KAAK,EAAE;QAE3B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3C,IAAI,CAAC,oBAAoB,GAAG,MAAM,oBAAoB,CAAC,aAAa,CAClE,UAAU,EACV,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,SAAS,EAC5D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,OAAO,EAAE,YAAY,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACpC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAC/C,MAAuB,EACvB,OAAgB,EAChB,kBAA+C,EAC/C,qBAAuE,EAC1B,EAAE;IAC/C,IAAI,CAAC;QACH,2DAA2D;QAC3D,sDAAsD;QACtD,MAAM,SAAS,GACb,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,IAAI,sBAAsB,CACxB,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,qBAAqB,CACtB,CAAC;QACJ,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"bluetooth-device-wrapper.js","sourceRoot":"","sources":["../lib/bluetooth-device-wrapper.ts"],"names":[],"mappings":"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"}
|