@microbit/microbit-connection 0.0.0-alpha.2 → 0.0.0-alpha.21
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 +41 -44
- package/build/accelerometer-service.js.map +1 -1
- package/build/bluetooth-device-wrapper.d.ts +26 -20
- package/build/bluetooth-device-wrapper.js +134 -75
- package/build/bluetooth-device-wrapper.js.map +1 -1
- package/build/bluetooth.d.ts +14 -10
- package/build/bluetooth.js +68 -78
- 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 +22 -27
- package/build/device.js +29 -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 +7 -4
- package/build/index.js +3 -2
- 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 +6 -2
- 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 +13 -13
- package/build/usb.js +98 -46
- package/build/usb.js.map +1 -1
- package/package.json +6 -4
- package/vite.config.ts +10 -8
- 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
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { AccelerometerData } from "./accelerometer.js";
|
|
7
7
|
import { BluetoothDeviceWrapper } from "./bluetooth-device-wrapper.js";
|
|
8
|
-
import { BoardVersion,
|
|
8
|
+
import { BoardVersion, ConnectionStatus, DeviceConnection, DeviceConnectionEventMap } from "./device.js";
|
|
9
9
|
import { TypedEventTarget } from "./events.js";
|
|
10
|
+
import { LedMatrix } from "./led.js";
|
|
10
11
|
import { Logging } from "./logging.js";
|
|
11
12
|
import { ServiceConnectionEventMap } from "./service-events.js";
|
|
12
13
|
export interface MicrobitWebBluetoothConnectionOptions {
|
|
@@ -24,27 +25,30 @@ export declare class MicrobitWebBluetoothConnection extends TypedEventTarget<Dev
|
|
|
24
25
|
private device;
|
|
25
26
|
private logging;
|
|
26
27
|
connection: BluetoothDeviceWrapper | undefined;
|
|
27
|
-
private
|
|
28
|
-
private
|
|
28
|
+
private availabilityListener;
|
|
29
|
+
private availability;
|
|
30
|
+
private nameFilter;
|
|
29
31
|
constructor(options?: MicrobitWebBluetoothConnectionOptions);
|
|
32
|
+
protected eventActivated(type: string): void;
|
|
33
|
+
protected eventDeactivated(type: string): void;
|
|
30
34
|
private log;
|
|
31
35
|
initialize(): Promise<void>;
|
|
32
36
|
dispose(): void;
|
|
33
|
-
connect(
|
|
37
|
+
connect(): Promise<ConnectionStatus>;
|
|
34
38
|
getBoardVersion(): BoardVersion | undefined;
|
|
35
|
-
private startSerialInternal;
|
|
36
|
-
private stopSerialInternal;
|
|
37
39
|
disconnect(): Promise<void>;
|
|
38
40
|
private setStatus;
|
|
39
41
|
serialWrite(data: string): Promise<void>;
|
|
40
42
|
clearDevice(): Promise<void>;
|
|
41
43
|
private connectInternal;
|
|
44
|
+
setNameFilter(name: string): void;
|
|
42
45
|
private chooseDevice;
|
|
43
46
|
getAccelerometerData(): Promise<AccelerometerData | undefined>;
|
|
44
47
|
getAccelerometerPeriod(): Promise<number | undefined>;
|
|
45
48
|
setAccelerometerPeriod(value: number): Promise<void>;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
setLedText(text: string): Promise<void>;
|
|
50
|
+
getLedScrollingDelay(): Promise<number | undefined>;
|
|
51
|
+
setLedScrollingDelay(delayInMillis: number): Promise<void>;
|
|
52
|
+
getLedMatrix(): Promise<LedMatrix | undefined>;
|
|
53
|
+
setLedMatrix(matrix: LedMatrix): Promise<void>;
|
|
50
54
|
}
|
package/build/bluetooth.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createBluetoothDeviceWrapper, } from "./bluetooth-device-wrapper.js";
|
|
2
2
|
import { profile } from "./bluetooth-profile.js";
|
|
3
|
-
import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent,
|
|
3
|
+
import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, } from "./device.js";
|
|
4
4
|
import { TypedEventTarget } from "./events.js";
|
|
5
5
|
import { NullLogging } from "./logging.js";
|
|
6
6
|
const requestDeviceTimeoutDuration = 30000;
|
|
@@ -10,14 +10,11 @@ const requestDeviceTimeoutDuration = 30000;
|
|
|
10
10
|
export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
11
11
|
constructor(options = {}) {
|
|
12
12
|
super();
|
|
13
|
-
// TODO: when do we call getAvailable() ?
|
|
14
13
|
Object.defineProperty(this, "status", {
|
|
15
14
|
enumerable: true,
|
|
16
15
|
configurable: true,
|
|
17
16
|
writable: true,
|
|
18
|
-
value:
|
|
19
|
-
? ConnectionStatus.NO_AUTHORIZED_DEVICE
|
|
20
|
-
: ConnectionStatus.NOT_SUPPORTED
|
|
17
|
+
value: ConnectionStatus.SUPPORT_NOT_KNOWN
|
|
21
18
|
});
|
|
22
19
|
/**
|
|
23
20
|
* The USB device we last connected to.
|
|
@@ -41,64 +38,56 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
41
38
|
writable: true,
|
|
42
39
|
value: void 0
|
|
43
40
|
});
|
|
44
|
-
Object.defineProperty(this, "
|
|
41
|
+
Object.defineProperty(this, "availabilityListener", {
|
|
45
42
|
enumerable: true,
|
|
46
43
|
configurable: true,
|
|
47
44
|
writable: true,
|
|
48
|
-
value:
|
|
45
|
+
value: (e) => {
|
|
46
|
+
// TODO: is this called? is `value` correct?
|
|
47
|
+
const value = e.value;
|
|
48
|
+
this.availability = value;
|
|
49
|
+
}
|
|
49
50
|
});
|
|
50
|
-
Object.defineProperty(this, "
|
|
51
|
+
Object.defineProperty(this, "availability", {
|
|
51
52
|
enumerable: true,
|
|
52
53
|
configurable: true,
|
|
53
54
|
writable: true,
|
|
54
|
-
value:
|
|
55
|
+
value: void 0
|
|
56
|
+
});
|
|
57
|
+
Object.defineProperty(this, "nameFilter", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
writable: true,
|
|
61
|
+
value: void 0
|
|
55
62
|
});
|
|
56
63
|
this.logging = options.logging || new NullLogging();
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this._removeEventListener(type, ...args);
|
|
64
|
-
};
|
|
64
|
+
}
|
|
65
|
+
eventActivated(type) {
|
|
66
|
+
this.connection?.startNotifications(type);
|
|
67
|
+
}
|
|
68
|
+
eventDeactivated(type) {
|
|
69
|
+
this.connection?.stopNotifications(type);
|
|
65
70
|
}
|
|
66
71
|
log(v) {
|
|
67
72
|
this.logging.log(v);
|
|
68
73
|
}
|
|
69
74
|
async initialize() {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
|
|
76
|
+
this.availability = await navigator.bluetooth?.getAvailability();
|
|
77
|
+
this.setStatus(this.availability
|
|
78
|
+
? ConnectionStatus.NO_AUTHORIZED_DEVICE
|
|
79
|
+
: ConnectionStatus.NOT_SUPPORTED);
|
|
73
80
|
}
|
|
74
81
|
dispose() {
|
|
75
|
-
|
|
76
|
-
// TODO: availabilitychanged
|
|
77
|
-
}
|
|
82
|
+
navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
|
|
78
83
|
}
|
|
79
|
-
async connect(
|
|
80
|
-
await this.connectInternal(
|
|
84
|
+
async connect() {
|
|
85
|
+
await this.connectInternal();
|
|
81
86
|
return this.status;
|
|
82
87
|
}
|
|
83
88
|
getBoardVersion() {
|
|
84
89
|
return this.connection?.boardVersion;
|
|
85
90
|
}
|
|
86
|
-
// @ts-ignore
|
|
87
|
-
async startSerialInternal() {
|
|
88
|
-
if (!this.connection) {
|
|
89
|
-
// As connecting then starting serial are async we could disconnect between them,
|
|
90
|
-
// so handle this gracefully.
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
// TODO
|
|
94
|
-
}
|
|
95
|
-
// @ts-ignore
|
|
96
|
-
async stopSerialInternal() {
|
|
97
|
-
if (this.connection) {
|
|
98
|
-
// TODO
|
|
99
|
-
this.dispatchTypedEvent("serialreset", new SerialResetEvent());
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
91
|
async disconnect() {
|
|
103
92
|
try {
|
|
104
93
|
if (this.connection) {
|
|
@@ -114,7 +103,7 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
114
103
|
}
|
|
115
104
|
finally {
|
|
116
105
|
this.connection = undefined;
|
|
117
|
-
this.setStatus(ConnectionStatus.
|
|
106
|
+
this.setStatus(ConnectionStatus.DISCONNECTED);
|
|
118
107
|
this.logging.log("Disconnection complete");
|
|
119
108
|
this.logging.event({
|
|
120
109
|
type: "Bluetooth-info",
|
|
@@ -124,7 +113,7 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
124
113
|
}
|
|
125
114
|
setStatus(newStatus) {
|
|
126
115
|
this.status = newStatus;
|
|
127
|
-
this.log("
|
|
116
|
+
this.log("Bluetooth connection status " + newStatus);
|
|
128
117
|
this.dispatchTypedEvent("status", new ConnectionStatusEvent(newStatus));
|
|
129
118
|
}
|
|
130
119
|
serialWrite(data) {
|
|
@@ -138,20 +127,33 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
138
127
|
this.device = undefined;
|
|
139
128
|
this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
140
129
|
}
|
|
141
|
-
async connectInternal(
|
|
130
|
+
async connectInternal() {
|
|
142
131
|
if (!this.connection) {
|
|
143
|
-
const device = await this.chooseDevice(
|
|
132
|
+
const device = await this.chooseDevice();
|
|
144
133
|
if (!device) {
|
|
134
|
+
this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
145
135
|
return;
|
|
146
136
|
}
|
|
147
|
-
this.connection = await createBluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this))
|
|
137
|
+
this.connection = await createBluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
|
|
138
|
+
onConnecting: () => this.setStatus(ConnectionStatus.CONNECTING),
|
|
139
|
+
onReconnecting: () => this.setStatus(ConnectionStatus.RECONNECTING),
|
|
140
|
+
onSuccess: () => this.setStatus(ConnectionStatus.CONNECTED),
|
|
141
|
+
onFail: () => {
|
|
142
|
+
this.setStatus(ConnectionStatus.DISCONNECTED);
|
|
143
|
+
this.connection = undefined;
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
return;
|
|
148
147
|
}
|
|
149
148
|
// TODO: timeout unification?
|
|
150
149
|
// Connection happens inside createBluetoothDeviceWrapper.
|
|
151
150
|
// await this.connection?.connect();
|
|
152
151
|
this.setStatus(ConnectionStatus.CONNECTED);
|
|
153
152
|
}
|
|
154
|
-
|
|
153
|
+
setNameFilter(name) {
|
|
154
|
+
this.nameFilter = name;
|
|
155
|
+
}
|
|
156
|
+
async chooseDevice() {
|
|
155
157
|
if (this.device) {
|
|
156
158
|
return this.device;
|
|
157
159
|
}
|
|
@@ -163,8 +165,8 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
163
165
|
navigator.bluetooth.requestDevice({
|
|
164
166
|
filters: [
|
|
165
167
|
{
|
|
166
|
-
namePrefix:
|
|
167
|
-
? `BBC micro:bit [${
|
|
168
|
+
namePrefix: this.nameFilter
|
|
169
|
+
? `BBC micro:bit [${this.nameFilter}]`
|
|
168
170
|
: "BBC micro:bit",
|
|
169
171
|
},
|
|
170
172
|
],
|
|
@@ -209,39 +211,27 @@ export class MicrobitWebBluetoothConnection extends TypedEventTarget {
|
|
|
209
211
|
}
|
|
210
212
|
async setAccelerometerPeriod(value) {
|
|
211
213
|
const accelerometerService = await this.connection?.getAccelerometerService();
|
|
212
|
-
accelerometerService?.setPeriod(value);
|
|
214
|
+
return accelerometerService?.setPeriod(value);
|
|
213
215
|
}
|
|
214
|
-
async
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
if (this.connection) {
|
|
218
|
-
this.connection.serviceListeners.accelerometerdatachanged.notifying =
|
|
219
|
-
true;
|
|
220
|
-
}
|
|
216
|
+
async setLedText(text) {
|
|
217
|
+
const ledService = await this.connection?.getLedService();
|
|
218
|
+
return ledService?.setText(text);
|
|
221
219
|
}
|
|
222
|
-
async
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
this.connection.serviceListeners.accelerometerdatachanged.notifying =
|
|
226
|
-
false;
|
|
227
|
-
}
|
|
228
|
-
accelerometerService?.stopNotifications();
|
|
220
|
+
async getLedScrollingDelay() {
|
|
221
|
+
const ledService = await this.connection?.getLedService();
|
|
222
|
+
return ledService?.getScrollingDelay();
|
|
229
223
|
}
|
|
230
|
-
async
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
this.startAccelerometerNotifications();
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
224
|
+
async setLedScrollingDelay(delayInMillis) {
|
|
225
|
+
const ledService = await this.connection?.getLedService();
|
|
226
|
+
await ledService?.setScrollingDelay(delayInMillis);
|
|
237
227
|
}
|
|
238
|
-
async
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
228
|
+
async getLedMatrix() {
|
|
229
|
+
const ledService = await this.connection?.getLedService();
|
|
230
|
+
return ledService?.getLedMatrix();
|
|
231
|
+
}
|
|
232
|
+
async setLedMatrix(matrix) {
|
|
233
|
+
const ledService = await this.connection?.getLedService();
|
|
234
|
+
ledService?.setLedMatrix(matrix);
|
|
245
235
|
}
|
|
246
236
|
}
|
|
247
237
|
//# sourceMappingURL=bluetooth.js.map
|
package/build/bluetooth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../lib/bluetooth.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../lib/bluetooth.ts"],"names":[],"mappings":"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"}
|
package/build/board-id.d.ts
CHANGED
package/build/board-id.js
CHANGED
|
@@ -53,6 +53,14 @@ export class BoardId {
|
|
|
53
53
|
static parse(value) {
|
|
54
54
|
return new BoardId(parseInt(value, 16));
|
|
55
55
|
}
|
|
56
|
+
static forVersion(boardVersion) {
|
|
57
|
+
switch (boardVersion) {
|
|
58
|
+
case "V1":
|
|
59
|
+
return this.v1Normalized;
|
|
60
|
+
case "V2":
|
|
61
|
+
return this.v2Normalized;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
56
64
|
}
|
|
57
65
|
Object.defineProperty(BoardId, "v1Normalized", {
|
|
58
66
|
enumerable: true,
|
package/build/board-id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-id.js","sourceRoot":"","sources":["../lib/board-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;;
|
|
1
|
+
{"version":3,"file":"board-id.js","sourceRoot":"","sources":["../lib/board-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA0B;QAC1C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;;AA3Dc;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Service } from "./bluetooth-device-wrapper.js";
|
|
2
|
+
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
3
|
+
export declare class ButtonService implements Service {
|
|
4
|
+
private buttonACharacteristic;
|
|
5
|
+
private buttonBCharacteristic;
|
|
6
|
+
private dispatchTypedEvent;
|
|
7
|
+
constructor(buttonACharacteristic: BluetoothRemoteGATTCharacteristic, buttonBCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher);
|
|
8
|
+
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<ButtonService | undefined>;
|
|
9
|
+
private dataViewToButtonState;
|
|
10
|
+
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
11
|
+
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
12
|
+
private characteristicForEvent;
|
|
13
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { profile } from "./bluetooth-profile.js";
|
|
2
|
+
import { ButtonEvent } from "./buttons.js";
|
|
3
|
+
import { BackgroundErrorEvent, DeviceError } from "./device.js";
|
|
4
|
+
export class ButtonService {
|
|
5
|
+
constructor(buttonACharacteristic, buttonBCharacteristic, dispatchTypedEvent) {
|
|
6
|
+
Object.defineProperty(this, "buttonACharacteristic", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: buttonACharacteristic
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "buttonBCharacteristic", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: buttonBCharacteristic
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "dispatchTypedEvent", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: dispatchTypedEvent
|
|
23
|
+
});
|
|
24
|
+
for (const type of ["buttonachanged", "buttonbchanged"]) {
|
|
25
|
+
this.characteristicForEvent(type)?.addEventListener("characteristicvaluechanged", (event) => {
|
|
26
|
+
const target = event.target;
|
|
27
|
+
const data = this.dataViewToButtonState(target.value);
|
|
28
|
+
this.dispatchTypedEvent(type, new ButtonEvent(type, data));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
|
|
33
|
+
let buttonService;
|
|
34
|
+
try {
|
|
35
|
+
buttonService = await gattServer.getPrimaryService(profile.button.id);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
if (listenerInit) {
|
|
39
|
+
dispatcher("backgrounderror", new BackgroundErrorEvent(err));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
throw new DeviceError({
|
|
44
|
+
code: "service-missing",
|
|
45
|
+
message: err,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const buttonACharacteristic = await buttonService.getCharacteristic(profile.button.characteristics.a.id);
|
|
50
|
+
const buttonBCharacteristic = await buttonService.getCharacteristic(profile.button.characteristics.b.id);
|
|
51
|
+
return new ButtonService(buttonACharacteristic, buttonBCharacteristic, dispatcher);
|
|
52
|
+
}
|
|
53
|
+
dataViewToButtonState(dataView) {
|
|
54
|
+
return dataView.getUint8(0);
|
|
55
|
+
}
|
|
56
|
+
async startNotifications(type) {
|
|
57
|
+
await this.characteristicForEvent(type)?.startNotifications();
|
|
58
|
+
}
|
|
59
|
+
async stopNotifications(type) {
|
|
60
|
+
await this.characteristicForEvent(type)?.stopNotifications();
|
|
61
|
+
}
|
|
62
|
+
characteristicForEvent(type) {
|
|
63
|
+
switch (type) {
|
|
64
|
+
case "buttonachanged": {
|
|
65
|
+
return this.buttonACharacteristic;
|
|
66
|
+
}
|
|
67
|
+
case "buttonbchanged": {
|
|
68
|
+
return this.buttonBCharacteristic;
|
|
69
|
+
}
|
|
70
|
+
default: {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=button-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button-service.js","sourceRoot":"","sources":["../lib/button-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum ButtonState {
|
|
2
|
+
NotPressed = 0,
|
|
3
|
+
ShortPress = 1,
|
|
4
|
+
LongPress = 2
|
|
5
|
+
}
|
|
6
|
+
export type ButtonEventType = "buttonachanged" | "buttonbchanged";
|
|
7
|
+
export declare class ButtonEvent extends Event {
|
|
8
|
+
readonly state: ButtonState;
|
|
9
|
+
constructor(type: ButtonEventType, state: ButtonState);
|
|
10
|
+
}
|
package/build/buttons.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export var ButtonState;
|
|
2
|
+
(function (ButtonState) {
|
|
3
|
+
ButtonState[ButtonState["NotPressed"] = 0] = "NotPressed";
|
|
4
|
+
ButtonState[ButtonState["ShortPress"] = 1] = "ShortPress";
|
|
5
|
+
ButtonState[ButtonState["LongPress"] = 2] = "LongPress";
|
|
6
|
+
})(ButtonState || (ButtonState = {}));
|
|
7
|
+
export class ButtonEvent extends Event {
|
|
8
|
+
constructor(type, state) {
|
|
9
|
+
super(type);
|
|
10
|
+
Object.defineProperty(this, "state", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: state
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=buttons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../lib/buttons.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,uDAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAID,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YACE,IAAqB,EACL,KAAkB;QAElC,KAAK,CAAC,IAAI,CAAC,CAAC;QAFZ;;;;mBAAgB,KAAK;WAAa;IAGpC,CAAC;CACF"}
|
package/build/constants.d.ts
CHANGED
package/build/constants.js
CHANGED
package/build/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACjB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACjB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;IAE3B,WAAW,EAAE,UAAU,GAAG,IAAI;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;IAC3B,aAAa;CACd,CAAC;AACF,GAAG,CAAC,SAAS;IACX,GAAG,CAAC,YAAY;QAChB,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,SAAS;QACb,GAAG,CAAC,WAAW;QACf,GAAG,CAAC,YAAY,CAAC;AAEnB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,IAAI,CAAC;IACb,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,UAAU;IACjB,gDAAgD;IAChD,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAE1B,iBAAiB;IACjB,KAAK,EAAE,UAAU;IAEjB,4CAA4C;IAC5C,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAC/B,sBAAsB,EAAE,CAAC,IAAI,CAAC;IAE9B,aAAa;CACd,CAAC"}
|
package/build/device.d.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
6
|
import { TypedEventTarget } from "./events.js";
|
|
7
|
-
import { BoardId } from "./board-id.js";
|
|
8
7
|
/**
|
|
9
8
|
* Specific identified error types.
|
|
10
9
|
*
|
|
@@ -38,7 +37,11 @@ export type DeviceErrorCode =
|
|
|
38
37
|
/**
|
|
39
38
|
* Error occured during serial or bluetooth communication.
|
|
40
39
|
*/
|
|
41
|
-
| "background-comms-error"
|
|
40
|
+
| "background-comms-error"
|
|
41
|
+
/**
|
|
42
|
+
* Bluetooth service is missing on device.
|
|
43
|
+
*/
|
|
44
|
+
| "service-missing";
|
|
42
45
|
/**
|
|
43
46
|
* Error type used for all interactions with this module.
|
|
44
47
|
*
|
|
@@ -63,7 +66,7 @@ export declare enum ConnectionStatus {
|
|
|
63
66
|
* Determining whether the connection type is supported requires
|
|
64
67
|
* initialize() to complete.
|
|
65
68
|
*/
|
|
66
|
-
SUPPORT_NOT_KNOWN =
|
|
69
|
+
SUPPORT_NOT_KNOWN = "SUPPORT_NOT_KNOWN",
|
|
67
70
|
/**
|
|
68
71
|
* Not supported.
|
|
69
72
|
*/
|
|
@@ -74,41 +77,28 @@ export declare enum ConnectionStatus {
|
|
|
74
77
|
* This will be the case even when a device is physically connected
|
|
75
78
|
* but has not been connected via the browser security UI.
|
|
76
79
|
*/
|
|
77
|
-
NO_AUTHORIZED_DEVICE = "
|
|
80
|
+
NO_AUTHORIZED_DEVICE = "NO_AUTHORIZED_DEVICE",
|
|
78
81
|
/**
|
|
79
82
|
* Authorized device available but we haven't connected to it.
|
|
80
83
|
*/
|
|
81
|
-
|
|
84
|
+
DISCONNECTED = "DISCONNECTED",
|
|
82
85
|
/**
|
|
83
86
|
* Connected.
|
|
84
87
|
*/
|
|
85
|
-
CONNECTED = "CONNECTED"
|
|
86
|
-
}
|
|
87
|
-
export declare class FlashDataError extends Error {
|
|
88
|
-
}
|
|
89
|
-
export interface FlashDataSource {
|
|
88
|
+
CONNECTED = "CONNECTED",
|
|
90
89
|
/**
|
|
91
|
-
*
|
|
92
|
-
* This can be generated from microbit-fs directly (via getIntelHexBytes())
|
|
93
|
-
* or from an existing Intel Hex via slicePad.
|
|
94
|
-
*
|
|
95
|
-
* This interface is quite confusing and worth revisiting.
|
|
96
|
-
*
|
|
97
|
-
* @param boardId the id of the board.
|
|
98
|
-
* @throws FlashDataError if we cannot generate hex data.
|
|
90
|
+
* Connecting.
|
|
99
91
|
*/
|
|
100
|
-
|
|
92
|
+
CONNECTING = "CONNECTING",
|
|
101
93
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* @throws FlashDataError if we cannot generate hex data.
|
|
94
|
+
* Reconnecting. When there is unexpected disruption in the connection,
|
|
95
|
+
* a reconnection is attempted.
|
|
105
96
|
*/
|
|
106
|
-
|
|
97
|
+
RECONNECTING = "RECONNECTING"
|
|
107
98
|
}
|
|
108
|
-
export
|
|
109
|
-
serial?: boolean;
|
|
110
|
-
name?: string;
|
|
99
|
+
export declare class FlashDataError extends Error {
|
|
111
100
|
}
|
|
101
|
+
export type FlashDataSource = (boardVersion: BoardVersion) => Promise<string | Uint8Array>;
|
|
112
102
|
export type BoardVersion = "V1" | "V2";
|
|
113
103
|
export declare class ConnectionStatusEvent extends Event {
|
|
114
104
|
readonly status: ConnectionStatus;
|
|
@@ -134,6 +124,10 @@ export declare class BeforeRequestDevice extends Event {
|
|
|
134
124
|
export declare class AfterRequestDevice extends Event {
|
|
135
125
|
constructor();
|
|
136
126
|
}
|
|
127
|
+
export declare class BackgroundErrorEvent extends Event {
|
|
128
|
+
readonly errorMessage: string;
|
|
129
|
+
constructor(errorMessage: string);
|
|
130
|
+
}
|
|
137
131
|
export declare class DeviceConnectionEventMap {
|
|
138
132
|
"status": ConnectionStatusEvent;
|
|
139
133
|
"serialdata": SerialDataEvent;
|
|
@@ -142,6 +136,7 @@ export declare class DeviceConnectionEventMap {
|
|
|
142
136
|
"flash": Event;
|
|
143
137
|
"beforerequestdevice": Event;
|
|
144
138
|
"afterrequestdevice": Event;
|
|
139
|
+
"backgrounderror": BackgroundErrorEvent;
|
|
145
140
|
}
|
|
146
141
|
export interface DeviceConnection extends TypedEventTarget<DeviceConnectionEventMap> {
|
|
147
142
|
status: ConnectionStatus;
|
|
@@ -159,7 +154,7 @@ export interface DeviceConnection extends TypedEventTarget<DeviceConnectionEvent
|
|
|
159
154
|
*
|
|
160
155
|
* @returns the final connection status.
|
|
161
156
|
*/
|
|
162
|
-
connect(
|
|
157
|
+
connect(): Promise<ConnectionStatus>;
|
|
163
158
|
/**
|
|
164
159
|
* Get the board version.
|
|
165
160
|
*
|