@microbit/microbit-connection 0.1.0 → 0.9.0-apps.alpha.1
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 +7 -3
package/build/esm/bluetooth.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { BleClient } from "@capacitor-community/bluetooth-le";
|
|
7
|
+
import { Capacitor } from "@capacitor/core";
|
|
8
|
+
import MemoryMap from "nrf-intel-hex";
|
|
9
|
+
import { BluetoothDeviceWrapper, isAndroid, scanningTimeoutInMs, } from "./bluetooth-device-wrapper.js";
|
|
2
10
|
import { profile } from "./bluetooth-profile.js";
|
|
3
|
-
import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, } from "./device.js";
|
|
11
|
+
import { AfterRequestDevice, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceError, FlashDataError, ProgressStage, } from "./device.js";
|
|
4
12
|
import { TypedEventTarget } from "./events.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
13
|
+
import { ConsoleLogging } from "./logging.js";
|
|
14
|
+
import { fullFlash } from "./flashing/flashing-full.js";
|
|
15
|
+
import partialFlash, { PartialFlashResult, } from "./flashing/flashing-partial.js";
|
|
16
|
+
let bleClientInitialized = false;
|
|
7
17
|
/**
|
|
8
18
|
* A Bluetooth connection factory.
|
|
9
19
|
*/
|
|
@@ -64,7 +74,13 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
64
74
|
writable: true,
|
|
65
75
|
value: void 0
|
|
66
76
|
});
|
|
67
|
-
this
|
|
77
|
+
Object.defineProperty(this, "deferStatusUpdates", {
|
|
78
|
+
enumerable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true,
|
|
81
|
+
value: false
|
|
82
|
+
});
|
|
83
|
+
this.logging = options.logging || new ConsoleLogging();
|
|
68
84
|
}
|
|
69
85
|
eventActivated(type) {
|
|
70
86
|
this.connection?.startNotifications(type);
|
|
@@ -75,6 +91,9 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
75
91
|
log(v) {
|
|
76
92
|
this.logging.log(v);
|
|
77
93
|
}
|
|
94
|
+
error(message, e) {
|
|
95
|
+
this.logging.error(message, e);
|
|
96
|
+
}
|
|
78
97
|
async initialize() {
|
|
79
98
|
navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
|
|
80
99
|
this.availability = await navigator.bluetooth?.getAvailability();
|
|
@@ -85,13 +104,76 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
85
104
|
dispose() {
|
|
86
105
|
navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
|
|
87
106
|
}
|
|
88
|
-
async connect() {
|
|
89
|
-
await this.connectInternal();
|
|
90
|
-
return this.status;
|
|
91
|
-
}
|
|
92
107
|
getBoardVersion() {
|
|
93
108
|
return this.connection?.boardVersion;
|
|
94
109
|
}
|
|
110
|
+
async connect(options) {
|
|
111
|
+
const progress = options?.progress ?? (() => { });
|
|
112
|
+
progress(ProgressStage.Initializing);
|
|
113
|
+
await this.preConnectInitialization();
|
|
114
|
+
if (!this.connection) {
|
|
115
|
+
progress(ProgressStage.FindingDevice);
|
|
116
|
+
const device = await this.requestDevice();
|
|
117
|
+
this.connection = new BluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
|
|
118
|
+
onConnecting: () => this.setStatus(ConnectionStatus.CONNECTING),
|
|
119
|
+
onReconnecting: () => this.setStatus(ConnectionStatus.RECONNECTING),
|
|
120
|
+
onSuccess: () => this.setStatus(ConnectionStatus.CONNECTED),
|
|
121
|
+
onFail: () => {
|
|
122
|
+
this.setStatus(ConnectionStatus.DISCONNECTED);
|
|
123
|
+
this.connection = undefined;
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
progress(ProgressStage.Connecting);
|
|
128
|
+
await this.connection.connect();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Initializes BLE.
|
|
132
|
+
*
|
|
133
|
+
* This must happen before requesting a device or connecting.
|
|
134
|
+
*
|
|
135
|
+
* We do this just before use not at connection initialize because on Android/iOS
|
|
136
|
+
* that's the appropriate time to ask for permissions.
|
|
137
|
+
*/
|
|
138
|
+
async preConnectInitialization() {
|
|
139
|
+
try {
|
|
140
|
+
if (isAndroid()) {
|
|
141
|
+
const isLocationEnabled = await BleClient.isLocationEnabled();
|
|
142
|
+
if (!isLocationEnabled) {
|
|
143
|
+
throw new DeviceError({
|
|
144
|
+
code: "bluetooth-missing-permissions",
|
|
145
|
+
message: "Location services is disabled",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!bleClientInitialized) {
|
|
150
|
+
await BleClient.initialize({ androidNeverForLocation: true });
|
|
151
|
+
bleClientInitialized = true;
|
|
152
|
+
}
|
|
153
|
+
const isBluetoothEnabled = await BleClient.isEnabled();
|
|
154
|
+
if (!isBluetoothEnabled) {
|
|
155
|
+
throw new DeviceError({
|
|
156
|
+
code: "bluetooth-disabled",
|
|
157
|
+
message: "Bluetooth is disabled",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
this.error("Error initializing Bluetooth", e);
|
|
163
|
+
const error = e;
|
|
164
|
+
if (error.message === "BLE permission denied") {
|
|
165
|
+
// Error thrown for iOS platform.
|
|
166
|
+
throw new DeviceError({
|
|
167
|
+
code: "bluetooth-disabled",
|
|
168
|
+
message: "Bluetooth is disabled",
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
throw new DeviceError({
|
|
172
|
+
code: "bluetooth-missing-permissions",
|
|
173
|
+
message: "Missing permissions",
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
95
177
|
async disconnect() {
|
|
96
178
|
try {
|
|
97
179
|
if (this.connection) {
|
|
@@ -99,7 +181,6 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
99
181
|
}
|
|
100
182
|
}
|
|
101
183
|
catch (e) {
|
|
102
|
-
this.log("Error during disconnection:\r\n" + e);
|
|
103
184
|
this.logging.event({
|
|
104
185
|
type: "Bluetooth-error",
|
|
105
186
|
message: "error-disconnecting",
|
|
@@ -108,7 +189,6 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
108
189
|
finally {
|
|
109
190
|
this.connection = undefined;
|
|
110
191
|
this.setStatus(ConnectionStatus.DISCONNECTED);
|
|
111
|
-
this.logging.log("Disconnection complete");
|
|
112
192
|
this.logging.event({
|
|
113
193
|
type: "Bluetooth-info",
|
|
114
194
|
message: "disconnected",
|
|
@@ -118,7 +198,9 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
118
198
|
setStatus(newStatus) {
|
|
119
199
|
this.status = newStatus;
|
|
120
200
|
this.log("Bluetooth connection status " + newStatus);
|
|
121
|
-
this.
|
|
201
|
+
if (!this.deferStatusUpdates) {
|
|
202
|
+
this.dispatchTypedEvent("status", new ConnectionStatusEvent(newStatus));
|
|
203
|
+
}
|
|
122
204
|
}
|
|
123
205
|
serialWrite(data) {
|
|
124
206
|
if (this.connection) {
|
|
@@ -131,138 +213,216 @@ class MicrobitWebBluetoothConnectionImpl extends TypedEventTarget {
|
|
|
131
213
|
this.device = undefined;
|
|
132
214
|
this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
133
215
|
}
|
|
134
|
-
async connectInternal() {
|
|
135
|
-
if (!this.connection) {
|
|
136
|
-
const device = await this.chooseDevice();
|
|
137
|
-
if (!device) {
|
|
138
|
-
this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
this.connection = await createBluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
|
|
142
|
-
onConnecting: () => this.setStatus(ConnectionStatus.CONNECTING),
|
|
143
|
-
onReconnecting: () => this.setStatus(ConnectionStatus.RECONNECTING),
|
|
144
|
-
onSuccess: () => this.setStatus(ConnectionStatus.CONNECTED),
|
|
145
|
-
onFail: () => {
|
|
146
|
-
this.setStatus(ConnectionStatus.DISCONNECTED);
|
|
147
|
-
this.connection = undefined;
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
// TODO: timeout unification?
|
|
153
|
-
}
|
|
154
216
|
setNameFilter(name) {
|
|
155
217
|
this.nameFilter = name;
|
|
156
218
|
}
|
|
157
|
-
async
|
|
219
|
+
async requestDevice() {
|
|
158
220
|
if (this.device) {
|
|
159
221
|
return this.device;
|
|
160
222
|
}
|
|
161
223
|
this.dispatchTypedEvent("beforerequestdevice", new BeforeRequestDevice());
|
|
162
224
|
try {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
{
|
|
169
|
-
namePrefix: this.nameFilter
|
|
170
|
-
? `BBC micro:bit [${this.nameFilter}]`
|
|
171
|
-
: "BBC micro:bit",
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
// See https://github.com/bsiever/microbit-pxt-blehid/issues/31
|
|
175
|
-
namePrefix: this.nameFilter
|
|
176
|
-
? `uBit [${this.nameFilter}]`
|
|
177
|
-
: "uBit",
|
|
178
|
-
},
|
|
179
|
-
],
|
|
180
|
-
optionalServices: [
|
|
181
|
-
profile.accelerometer.id,
|
|
182
|
-
profile.button.id,
|
|
183
|
-
profile.deviceInformation.id,
|
|
184
|
-
profile.dfuControl.id,
|
|
185
|
-
profile.event.id,
|
|
186
|
-
profile.ioPin.id,
|
|
187
|
-
profile.led.id,
|
|
188
|
-
profile.magnetometer.id,
|
|
189
|
-
profile.temperature.id,
|
|
190
|
-
profile.uart.id,
|
|
191
|
-
],
|
|
192
|
-
}),
|
|
193
|
-
new Promise((resolve) => setTimeout(() => resolve("timeout"), requestDeviceTimeoutDuration)),
|
|
194
|
-
]);
|
|
195
|
-
if (result === "timeout") {
|
|
196
|
-
// btSelectMicrobitDialogOnLoad.set(true);
|
|
197
|
-
window.location.reload();
|
|
198
|
-
return undefined;
|
|
225
|
+
const namePrefix = this.nameFilter
|
|
226
|
+
? `BBC micro:bit [${this.nameFilter}]`
|
|
227
|
+
: "BBC micro:bit";
|
|
228
|
+
if (Capacitor.isNativePlatform()) {
|
|
229
|
+
this.device = await this.requestDeviceNative(namePrefix);
|
|
199
230
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
231
|
+
else {
|
|
232
|
+
this.device = await this.requestDeviceWeb(namePrefix);
|
|
233
|
+
}
|
|
234
|
+
if (!this.device) {
|
|
235
|
+
this.setStatus(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
236
|
+
throw new DeviceError({
|
|
237
|
+
code: "timeout-error",
|
|
238
|
+
message: "Timeout scanning for device",
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return this.device;
|
|
206
242
|
}
|
|
207
243
|
finally {
|
|
208
244
|
this.dispatchTypedEvent("afterrequestdevice", new AfterRequestDevice());
|
|
209
245
|
}
|
|
210
246
|
}
|
|
211
247
|
async getAccelerometerData() {
|
|
212
|
-
|
|
213
|
-
return accelerometerService?.getData();
|
|
248
|
+
return this.connection?.accelerometer.getData();
|
|
214
249
|
}
|
|
215
250
|
async getAccelerometerPeriod() {
|
|
216
|
-
|
|
217
|
-
return accelerometerService?.getPeriod();
|
|
251
|
+
return this.connection?.accelerometer.getPeriod();
|
|
218
252
|
}
|
|
219
253
|
async setAccelerometerPeriod(value) {
|
|
220
|
-
|
|
221
|
-
return accelerometerService?.setPeriod(value);
|
|
254
|
+
return this.connection?.accelerometer.setPeriod(value);
|
|
222
255
|
}
|
|
223
256
|
async setLedText(text) {
|
|
224
|
-
|
|
225
|
-
return ledService?.setText(text);
|
|
257
|
+
return this.connection?.led.setText(text);
|
|
226
258
|
}
|
|
227
259
|
async getLedScrollingDelay() {
|
|
228
|
-
|
|
229
|
-
return ledService?.getScrollingDelay();
|
|
260
|
+
return this.connection?.led.getScrollingDelay();
|
|
230
261
|
}
|
|
231
262
|
async setLedScrollingDelay(delayInMillis) {
|
|
232
|
-
|
|
233
|
-
await ledService?.setScrollingDelay(delayInMillis);
|
|
263
|
+
await this.connection?.led.setScrollingDelay(delayInMillis);
|
|
234
264
|
}
|
|
235
265
|
async getLedMatrix() {
|
|
236
|
-
|
|
237
|
-
return ledService?.getLedMatrix();
|
|
266
|
+
return await this.connection?.led.getLedMatrix();
|
|
238
267
|
}
|
|
239
268
|
async setLedMatrix(matrix) {
|
|
240
|
-
|
|
241
|
-
ledService?.setLedMatrix(matrix);
|
|
269
|
+
await this.connection?.led.setLedMatrix(matrix);
|
|
242
270
|
}
|
|
243
271
|
async getMagnetometerData() {
|
|
244
|
-
|
|
245
|
-
return magnetometerService?.getData();
|
|
272
|
+
return this.connection?.magnetometer.getData();
|
|
246
273
|
}
|
|
247
274
|
async getMagnetometerPeriod() {
|
|
248
|
-
|
|
249
|
-
return magnetometerService?.getPeriod();
|
|
275
|
+
return this.connection?.magnetometer.getPeriod();
|
|
250
276
|
}
|
|
251
277
|
async setMagnetometerPeriod(value) {
|
|
252
|
-
|
|
253
|
-
return magnetometerService?.setPeriod(value);
|
|
278
|
+
return this.connection?.magnetometer.setPeriod(value);
|
|
254
279
|
}
|
|
255
280
|
async getMagnetometerBearing() {
|
|
256
|
-
|
|
257
|
-
return magnetometerService?.getBearing();
|
|
281
|
+
return this.connection?.magnetometer.getBearing();
|
|
258
282
|
}
|
|
259
283
|
async triggerMagnetometerCalibration() {
|
|
260
|
-
|
|
261
|
-
return magnetometerService?.triggerCalibration();
|
|
284
|
+
await this.connection?.magnetometer.triggerCalibration();
|
|
262
285
|
}
|
|
263
286
|
async uartWrite(data) {
|
|
264
|
-
|
|
265
|
-
|
|
287
|
+
await this.connection?.uart.writeData(data);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Flash the micro:bit.
|
|
291
|
+
*
|
|
292
|
+
* Note that this will always leave the connection disconnected.
|
|
293
|
+
*
|
|
294
|
+
* @param dataSource The data to use.
|
|
295
|
+
* @param options Flash options and progress callback.
|
|
296
|
+
*/
|
|
297
|
+
async flash(dataSource, options = {}) {
|
|
298
|
+
const progress = options.progress ?? (() => { });
|
|
299
|
+
try {
|
|
300
|
+
// We'll disconnect/reconnect multiple times due to device resets, but reporting this is unhelpful.
|
|
301
|
+
this.deferStatusUpdates = true;
|
|
302
|
+
if (this.status !== ConnectionStatus.CONNECTED) {
|
|
303
|
+
await this.connect({ progress });
|
|
304
|
+
}
|
|
305
|
+
const connection = this.connection;
|
|
306
|
+
try {
|
|
307
|
+
const boardVersion = connection.boardVersion;
|
|
308
|
+
if (!boardVersion) {
|
|
309
|
+
throw new DeviceError({
|
|
310
|
+
code: "device-disconnected",
|
|
311
|
+
message: "No board version found",
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
const memoryMap = convertDataToMemoryMap(await dataSource(boardVersion));
|
|
315
|
+
if (!memoryMap) {
|
|
316
|
+
throw new FlashDataError("Could not convert hex to memory map");
|
|
317
|
+
}
|
|
318
|
+
if (!this.device) {
|
|
319
|
+
throw new DeviceError({
|
|
320
|
+
code: "device-disconnected",
|
|
321
|
+
message: "No device",
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
this.log(`Got board version ${boardVersion}`);
|
|
325
|
+
const partialFlashResult = await partialFlash(connection, memoryMap, progress);
|
|
326
|
+
if (partialFlashResult === PartialFlashResult.AttemptFullFlash) {
|
|
327
|
+
await fullFlash(connection, boardVersion, memoryMap, progress);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
this.error("Failed to flash", e);
|
|
332
|
+
throw e;
|
|
333
|
+
}
|
|
334
|
+
finally {
|
|
335
|
+
await this.disconnect();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
finally {
|
|
339
|
+
this.deferStatusUpdates = false;
|
|
340
|
+
this.dispatchTypedEvent("status", new ConnectionStatusEvent(this.status));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
async requestDeviceWeb(namePrefix) {
|
|
344
|
+
return await BleClient.requestDevice({
|
|
345
|
+
namePrefix: this.nameFilter
|
|
346
|
+
? `BBC micro:bit [${namePrefix}]`
|
|
347
|
+
: "BBC micro:bit",
|
|
348
|
+
// TODO: is this possible to reinstate?
|
|
349
|
+
// See https://github.com/bsiever/microbit-pxt-blehid/issues/31
|
|
350
|
+
//namePrefix: this.nameFilter
|
|
351
|
+
// ? `uBit [${this.nameFilter}]`
|
|
352
|
+
// : "uBit",
|
|
353
|
+
optionalServices: [
|
|
354
|
+
profile.accelerometer.id,
|
|
355
|
+
profile.button.id,
|
|
356
|
+
profile.deviceInformation.id,
|
|
357
|
+
profile.dfuControl.id,
|
|
358
|
+
profile.event.id,
|
|
359
|
+
profile.ioPin.id,
|
|
360
|
+
profile.led.id,
|
|
361
|
+
profile.magnetometer.id,
|
|
362
|
+
profile.temperature.id,
|
|
363
|
+
profile.uart.id,
|
|
364
|
+
],
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Finds device with specified name prefix.
|
|
369
|
+
*
|
|
370
|
+
* @returns device or undefined if none can be found.
|
|
371
|
+
*/
|
|
372
|
+
async requestDeviceNative(namePrefix) {
|
|
373
|
+
// Check for existing bonded devices.
|
|
374
|
+
const bonded = await this.checkBondedDevices((device) => {
|
|
375
|
+
const name = device.name;
|
|
376
|
+
return !!name && name.startsWith(namePrefix);
|
|
377
|
+
});
|
|
378
|
+
if (bonded) {
|
|
379
|
+
return bonded;
|
|
380
|
+
}
|
|
381
|
+
this.log(`Scanning for device - ${namePrefix}`);
|
|
382
|
+
let found = false;
|
|
383
|
+
const scanPromise = new Promise((resolve) =>
|
|
384
|
+
// This only resolves when we stop the scan.
|
|
385
|
+
void BleClient.requestLEScan({}, async (result) => {
|
|
386
|
+
// For a V1 in the Nordic bootloader, we see a name of "DfuTarg" that
|
|
387
|
+
// isn't matched by the name filter but the advertising name is in the
|
|
388
|
+
// localName on the device. So we filter here instead. This happens on
|
|
389
|
+
// iOS if DFU fails / is interrupted.
|
|
390
|
+
if (result.device.name?.startsWith(namePrefix) ||
|
|
391
|
+
result.localName?.startsWith(namePrefix)) {
|
|
392
|
+
found = true;
|
|
393
|
+
await BleClient.stopLEScan();
|
|
394
|
+
resolve(result.device);
|
|
395
|
+
}
|
|
396
|
+
}));
|
|
397
|
+
const scanTimeoutPromise = new Promise((resolve) => setTimeout(async () => {
|
|
398
|
+
if (!found) {
|
|
399
|
+
await BleClient.stopLEScan();
|
|
400
|
+
this.log("Timeout scanning for device");
|
|
401
|
+
resolve(undefined);
|
|
402
|
+
}
|
|
403
|
+
}, scanningTimeoutInMs));
|
|
404
|
+
return await Promise.race([scanPromise, scanTimeoutPromise]);
|
|
405
|
+
}
|
|
406
|
+
async checkBondedDevices(predicate) {
|
|
407
|
+
if (!isAndroid()) {
|
|
408
|
+
// Not supported.
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
411
|
+
const bondedDevices = await BleClient.getBondedDevices();
|
|
412
|
+
const result = bondedDevices.find(predicate);
|
|
413
|
+
this.log(result === undefined
|
|
414
|
+
? "No matching bonded device"
|
|
415
|
+
: "Found matching bonded device");
|
|
416
|
+
return result;
|
|
266
417
|
}
|
|
267
418
|
}
|
|
419
|
+
const convertDataToMemoryMap = (data) => {
|
|
420
|
+
if (data instanceof MemoryMap) {
|
|
421
|
+
return data;
|
|
422
|
+
}
|
|
423
|
+
if (data instanceof Uint8Array) {
|
|
424
|
+
return MemoryMap.fromPaddedUint8Array(data);
|
|
425
|
+
}
|
|
426
|
+
return MemoryMap.fromHex(data);
|
|
427
|
+
};
|
|
268
428
|
//# sourceMappingURL=bluetooth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../../lib/bluetooth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../../lib/bluetooth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Service } from "./bluetooth-device-wrapper.js";
|
|
2
2
|
import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
|
|
3
3
|
export declare class ButtonService implements Service {
|
|
4
|
-
private
|
|
5
|
-
private buttonBCharacteristic;
|
|
4
|
+
private deviceId;
|
|
6
5
|
private dispatchTypedEvent;
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
uuid: string;
|
|
7
|
+
constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
|
|
8
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
9
9
|
private dataViewToButtonState;
|
|
10
10
|
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
11
11
|
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
12
|
-
private
|
|
12
|
+
private characteristicForButtonEventType;
|
|
13
13
|
}
|
|
@@ -1,76 +1,62 @@
|
|
|
1
|
+
import { BleClient } from "@capacitor-community/bluetooth-le";
|
|
1
2
|
import { profile } from "./bluetooth-profile.js";
|
|
2
3
|
import { ButtonEvent } from "./buttons.js";
|
|
3
|
-
import { BackgroundErrorEvent
|
|
4
|
+
import { BackgroundErrorEvent } from "./device.js";
|
|
4
5
|
export class ButtonService {
|
|
5
|
-
constructor(
|
|
6
|
-
Object.defineProperty(this, "
|
|
6
|
+
constructor(deviceId, dispatchTypedEvent) {
|
|
7
|
+
Object.defineProperty(this, "deviceId", {
|
|
7
8
|
enumerable: true,
|
|
8
9
|
configurable: true,
|
|
9
10
|
writable: true,
|
|
10
|
-
value:
|
|
11
|
+
value: deviceId
|
|
11
12
|
});
|
|
12
|
-
Object.defineProperty(this, "
|
|
13
|
+
Object.defineProperty(this, "dispatchTypedEvent", {
|
|
13
14
|
enumerable: true,
|
|
14
15
|
configurable: true,
|
|
15
16
|
writable: true,
|
|
16
|
-
value:
|
|
17
|
+
value: dispatchTypedEvent
|
|
17
18
|
});
|
|
18
|
-
Object.defineProperty(this, "
|
|
19
|
+
Object.defineProperty(this, "uuid", {
|
|
19
20
|
enumerable: true,
|
|
20
21
|
configurable: true,
|
|
21
22
|
writable: true,
|
|
22
|
-
value:
|
|
23
|
+
value: profile.button.id
|
|
23
24
|
});
|
|
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
25
|
}
|
|
32
|
-
|
|
33
|
-
|
|
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);
|
|
26
|
+
getRelevantEvents() {
|
|
27
|
+
return ["buttonachanged", "buttonbchanged"];
|
|
52
28
|
}
|
|
53
29
|
dataViewToButtonState(dataView) {
|
|
54
30
|
return dataView.getUint8(0);
|
|
55
31
|
}
|
|
56
32
|
async startNotifications(type) {
|
|
57
|
-
|
|
33
|
+
switch (type) {
|
|
34
|
+
case "buttonachanged":
|
|
35
|
+
case "buttonbchanged": {
|
|
36
|
+
try {
|
|
37
|
+
await BleClient.startNotifications(this.deviceId, profile.button.id, this.characteristicForButtonEventType(type).id, (value) => {
|
|
38
|
+
const data = this.dataViewToButtonState(value);
|
|
39
|
+
this.dispatchTypedEvent(type, new ButtonEvent(type, data));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
this.dispatchTypedEvent("backgrounderror", new BackgroundErrorEvent("Failed to start notifications", e));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
58
47
|
}
|
|
59
48
|
async stopNotifications(type) {
|
|
60
|
-
await this.characteristicForEvent(type)?.stopNotifications();
|
|
61
|
-
}
|
|
62
|
-
characteristicForEvent(type) {
|
|
63
49
|
switch (type) {
|
|
64
|
-
case "buttonachanged":
|
|
65
|
-
return this.buttonACharacteristic;
|
|
66
|
-
}
|
|
50
|
+
case "buttonachanged":
|
|
67
51
|
case "buttonbchanged": {
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
default: {
|
|
71
|
-
return undefined;
|
|
52
|
+
await BleClient.stopNotifications(this.deviceId, profile.button.id, this.characteristicForButtonEventType(type).id);
|
|
72
53
|
}
|
|
73
54
|
}
|
|
74
55
|
}
|
|
56
|
+
characteristicForButtonEventType(type) {
|
|
57
|
+
return type === "buttonachanged"
|
|
58
|
+
? profile.button.characteristics.a
|
|
59
|
+
: profile.button.characteristics.b;
|
|
60
|
+
}
|
|
75
61
|
}
|
|
76
62
|
//# sourceMappingURL=button-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-service.js","sourceRoot":"","sources":["../../lib/button-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"button-service.js","sourceRoot":"","sources":["../../lib/button-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAKxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,OAAO,aAAa;IAGxB,YACU,QAAgB,EAChB,kBAA+C;QADvD;;;;mBAAQ,QAAQ;WAAQ;QACxB;;;;mBAAQ,kBAAkB;WAA6B;QAJzD;;;;mBAAO,OAAO,CAAC,MAAM,CAAC,EAAE;WAAC;IAKtB,CAAC;IAEJ,iBAAiB;QACf,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAEO,qBAAqB,CAAC,QAAkB;QAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,kBAAkB,CAChC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,EAAE,EAC9C,CAAC,KAAK,EAAE,EAAE;wBACR,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;wBAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7D,CAAC,CACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,kBAAkB,CACrB,iBAAiB,EACjB,IAAI,oBAAoB,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAC7D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,CAAC,iBAAiB,CAC/B,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gCAAgC,CACtC,IAAyC;QAEzC,OAAO,IAAI,KAAK,gBAAgB;YAC9B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACvC,CAAC;CACF"}
|