@microbit/microbit-connection 0.1.0 → 0.9.0-apps.alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +4 -4
  2. package/build/cjs/accelerometer-service.d.ts +5 -5
  3. package/build/cjs/accelerometer-service.js +41 -42
  4. package/build/cjs/accelerometer-service.js.map +1 -1
  5. package/build/cjs/async-util.d.ts +9 -0
  6. package/build/cjs/async-util.js +27 -7
  7. package/build/cjs/async-util.js.map +1 -1
  8. package/build/cjs/bluetooth-device-wrapper.d.ts +61 -27
  9. package/build/cjs/bluetooth-device-wrapper.js +285 -266
  10. package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
  11. package/build/cjs/bluetooth-profile.d.ts +43 -35
  12. package/build/cjs/bluetooth-profile.js +35 -29
  13. package/build/cjs/bluetooth-profile.js.map +1 -1
  14. package/build/cjs/bluetooth.d.ts +10 -6
  15. package/build/cjs/bluetooth.js +286 -100
  16. package/build/cjs/bluetooth.js.map +1 -1
  17. package/build/cjs/button-service.d.ts +5 -5
  18. package/build/cjs/button-service.js +31 -45
  19. package/build/cjs/button-service.js.map +1 -1
  20. package/build/cjs/device-information-service.d.ts +6 -0
  21. package/build/cjs/device-information-service.js +34 -0
  22. package/build/cjs/device-information-service.js.map +1 -0
  23. package/build/cjs/device.d.ts +65 -8
  24. package/build/cjs/device.js +16 -2
  25. package/build/cjs/device.js.map +1 -1
  26. package/build/cjs/dfu-service.d.ts +9 -0
  27. package/build/cjs/dfu-service.js +26 -0
  28. package/build/cjs/dfu-service.js.map +1 -0
  29. package/build/cjs/flashing/flashing-full.d.ts +14 -0
  30. package/build/cjs/flashing/flashing-full.js +87 -0
  31. package/build/cjs/flashing/flashing-full.js.map +1 -0
  32. package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
  33. package/build/cjs/flashing/flashing-makecode.js +48 -0
  34. package/build/cjs/flashing/flashing-makecode.js.map +1 -0
  35. package/build/cjs/flashing/flashing-partial.d.ts +9 -0
  36. package/build/cjs/flashing/flashing-partial.js +98 -0
  37. package/build/cjs/flashing/flashing-partial.js.map +1 -0
  38. package/build/cjs/flashing/flashing-v1.d.ts +11 -0
  39. package/build/cjs/flashing/flashing-v1.js +24 -0
  40. package/build/cjs/flashing/flashing-v1.js.map +1 -0
  41. package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
  42. package/build/cjs/flashing/nordic-dfu.js +214 -0
  43. package/build/cjs/flashing/nordic-dfu.js.map +1 -0
  44. package/build/cjs/flashing/zip.d.ts +12 -0
  45. package/build/cjs/flashing/zip.js +177 -0
  46. package/build/cjs/flashing/zip.js.map +1 -0
  47. package/build/cjs/index.d.ts +3 -3
  48. package/build/cjs/index.js +2 -1
  49. package/build/cjs/index.js.map +1 -1
  50. package/build/cjs/led-service.d.ts +5 -7
  51. package/build/cjs/led-service.js +13 -44
  52. package/build/cjs/led-service.js.map +1 -1
  53. package/build/cjs/logging.d.ts +1 -1
  54. package/build/cjs/logging.js +3 -3
  55. package/build/cjs/logging.js.map +1 -1
  56. package/build/cjs/magnetometer-service.d.ts +5 -9
  57. package/build/cjs/magnetometer-service.js +30 -65
  58. package/build/cjs/magnetometer-service.js.map +1 -1
  59. package/build/cjs/partial-flashing-service.d.ts +45 -0
  60. package/build/cjs/partial-flashing-service.js +110 -0
  61. package/build/cjs/partial-flashing-service.js.map +1 -0
  62. package/build/cjs/uart-service.d.ts +4 -5
  63. package/build/cjs/uart-service.js +19 -40
  64. package/build/cjs/uart-service.js.map +1 -1
  65. package/build/cjs/usb-device-wrapper.js +33 -8
  66. package/build/cjs/usb-device-wrapper.js.map +1 -1
  67. package/build/cjs/usb-partial-flashing.d.ts +1 -3
  68. package/build/cjs/usb-partial-flashing.js +4 -3
  69. package/build/cjs/usb-partial-flashing.js.map +1 -1
  70. package/build/cjs/usb-radio-bridge.js +1 -2
  71. package/build/cjs/usb-radio-bridge.js.map +1 -1
  72. package/build/cjs/usb.d.ts +4 -2
  73. package/build/cjs/usb.js +31 -16
  74. package/build/cjs/usb.js.map +1 -1
  75. package/build/esm/accelerometer-service.d.ts +5 -5
  76. package/build/esm/accelerometer-service.js +42 -43
  77. package/build/esm/accelerometer-service.js.map +1 -1
  78. package/build/esm/async-util.d.ts +9 -0
  79. package/build/esm/async-util.js +22 -6
  80. package/build/esm/async-util.js.map +1 -1
  81. package/build/esm/bluetooth-device-wrapper.d.ts +61 -27
  82. package/build/esm/bluetooth-device-wrapper.js +284 -265
  83. package/build/esm/bluetooth-device-wrapper.js.map +1 -1
  84. package/build/esm/bluetooth-profile.d.ts +43 -35
  85. package/build/esm/bluetooth-profile.js +35 -29
  86. package/build/esm/bluetooth-profile.js.map +1 -1
  87. package/build/esm/bluetooth.d.ts +10 -6
  88. package/build/esm/bluetooth.js +263 -103
  89. package/build/esm/bluetooth.js.map +1 -1
  90. package/build/esm/button-service.d.ts +5 -5
  91. package/build/esm/button-service.js +32 -46
  92. package/build/esm/button-service.js.map +1 -1
  93. package/build/esm/device-information-service.d.ts +6 -0
  94. package/build/esm/device-information-service.js +30 -0
  95. package/build/esm/device-information-service.js.map +1 -0
  96. package/build/esm/device.d.ts +65 -8
  97. package/build/esm/device.js +15 -1
  98. package/build/esm/device.js.map +1 -1
  99. package/build/esm/dfu-service.d.ts +9 -0
  100. package/build/esm/dfu-service.js +22 -0
  101. package/build/esm/dfu-service.js.map +1 -0
  102. package/build/esm/flashing/flashing-full.d.ts +14 -0
  103. package/build/esm/flashing/flashing-full.js +84 -0
  104. package/build/esm/flashing/flashing-full.js.map +1 -0
  105. package/build/esm/flashing/flashing-makecode.d.ts +6 -0
  106. package/build/esm/flashing/flashing-makecode.js +44 -0
  107. package/build/esm/flashing/flashing-makecode.js.map +1 -0
  108. package/build/esm/flashing/flashing-partial.d.ts +9 -0
  109. package/build/esm/flashing/flashing-partial.js +95 -0
  110. package/build/esm/flashing/flashing-partial.js.map +1 -0
  111. package/build/esm/flashing/flashing-v1.d.ts +11 -0
  112. package/build/esm/flashing/flashing-v1.js +20 -0
  113. package/build/esm/flashing/flashing-v1.js.map +1 -0
  114. package/build/esm/flashing/nordic-dfu.d.ts +3 -0
  115. package/build/esm/flashing/nordic-dfu.js +211 -0
  116. package/build/esm/flashing/nordic-dfu.js.map +1 -0
  117. package/build/esm/flashing/zip.d.ts +12 -0
  118. package/build/esm/flashing/zip.js +174 -0
  119. package/build/esm/flashing/zip.js.map +1 -0
  120. package/build/esm/index.d.ts +3 -3
  121. package/build/esm/index.js +2 -2
  122. package/build/esm/index.js.map +1 -1
  123. package/build/esm/led-service.d.ts +5 -7
  124. package/build/esm/led-service.js +13 -44
  125. package/build/esm/led-service.js.map +1 -1
  126. package/build/esm/logging.d.ts +1 -1
  127. package/build/esm/logging.js +1 -1
  128. package/build/esm/logging.js.map +1 -1
  129. package/build/esm/magnetometer-service.d.ts +5 -9
  130. package/build/esm/magnetometer-service.js +31 -66
  131. package/build/esm/magnetometer-service.js.map +1 -1
  132. package/build/esm/partial-flashing-service.d.ts +45 -0
  133. package/build/esm/partial-flashing-service.js +106 -0
  134. package/build/esm/partial-flashing-service.js.map +1 -0
  135. package/build/esm/uart-service.d.ts +4 -5
  136. package/build/esm/uart-service.js +19 -40
  137. package/build/esm/uart-service.js.map +1 -1
  138. package/build/esm/usb-device-wrapper.js +33 -8
  139. package/build/esm/usb-device-wrapper.js.map +1 -1
  140. package/build/esm/usb-partial-flashing.d.ts +1 -3
  141. package/build/esm/usb-partial-flashing.js +4 -3
  142. package/build/esm/usb-partial-flashing.js.map +1 -1
  143. package/build/esm/usb-radio-bridge.js +2 -3
  144. package/build/esm/usb-radio-bridge.js.map +1 -1
  145. package/build/esm/usb.d.ts +4 -2
  146. package/build/esm/usb.js +33 -18
  147. package/build/esm/usb.js.map +1 -1
  148. package/package.json +5 -1
@@ -1,12 +1,48 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
2
28
  Object.defineProperty(exports, "__esModule", { value: true });
3
29
  exports.createWebBluetoothConnection = void 0;
30
+ /**
31
+ * (c) 2021, Micro:bit Educational Foundation and contributors
32
+ *
33
+ * SPDX-License-Identifier: MIT
34
+ */
35
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
36
+ const core_1 = require("@capacitor/core");
37
+ const nrf_intel_hex_1 = __importDefault(require("nrf-intel-hex"));
4
38
  const bluetooth_device_wrapper_js_1 = require("./bluetooth-device-wrapper.js");
5
39
  const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
6
40
  const device_js_1 = require("./device.js");
7
41
  const events_js_1 = require("./events.js");
8
42
  const logging_js_1 = require("./logging.js");
9
- const requestDeviceTimeoutDuration = 30000;
43
+ const flashing_full_js_1 = require("./flashing/flashing-full.js");
44
+ const flashing_partial_js_1 = __importStar(require("./flashing/flashing-partial.js"));
45
+ let bleClientInitialized = false;
10
46
  /**
11
47
  * A Bluetooth connection factory.
12
48
  */
@@ -68,7 +104,13 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
68
104
  writable: true,
69
105
  value: void 0
70
106
  });
71
- this.logging = options.logging || new logging_js_1.NullLogging();
107
+ Object.defineProperty(this, "deferStatusUpdates", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: false
112
+ });
113
+ this.logging = options.logging || new logging_js_1.ConsoleLogging();
72
114
  }
73
115
  eventActivated(type) {
74
116
  this.connection?.startNotifications(type);
@@ -79,6 +121,9 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
79
121
  log(v) {
80
122
  this.logging.log(v);
81
123
  }
124
+ error(message, e) {
125
+ this.logging.error(message, e);
126
+ }
82
127
  async initialize() {
83
128
  navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
84
129
  this.availability = await navigator.bluetooth?.getAvailability();
@@ -89,13 +134,76 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
89
134
  dispose() {
90
135
  navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
91
136
  }
92
- async connect() {
93
- await this.connectInternal();
94
- return this.status;
95
- }
96
137
  getBoardVersion() {
97
138
  return this.connection?.boardVersion;
98
139
  }
140
+ async connect(options) {
141
+ const progress = options?.progress ?? (() => { });
142
+ progress(device_js_1.ProgressStage.Initializing);
143
+ await this.preConnectInitialization();
144
+ if (!this.connection) {
145
+ progress(device_js_1.ProgressStage.FindingDevice);
146
+ const device = await this.requestDevice();
147
+ this.connection = new bluetooth_device_wrapper_js_1.BluetoothDeviceWrapper(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
148
+ onConnecting: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTING),
149
+ onReconnecting: () => this.setStatus(device_js_1.ConnectionStatus.RECONNECTING),
150
+ onSuccess: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTED),
151
+ onFail: () => {
152
+ this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
153
+ this.connection = undefined;
154
+ },
155
+ });
156
+ }
157
+ progress(device_js_1.ProgressStage.Connecting);
158
+ await this.connection.connect();
159
+ }
160
+ /**
161
+ * Initializes BLE.
162
+ *
163
+ * This must happen before requesting a device or connecting.
164
+ *
165
+ * We do this just before use not at connection initialize because on Android/iOS
166
+ * that's the appropriate time to ask for permissions.
167
+ */
168
+ async preConnectInitialization() {
169
+ try {
170
+ if ((0, bluetooth_device_wrapper_js_1.isAndroid)()) {
171
+ const isLocationEnabled = await bluetooth_le_1.BleClient.isLocationEnabled();
172
+ if (!isLocationEnabled) {
173
+ throw new device_js_1.DeviceError({
174
+ code: "bluetooth-missing-permissions",
175
+ message: "Location services is disabled",
176
+ });
177
+ }
178
+ }
179
+ if (!bleClientInitialized) {
180
+ await bluetooth_le_1.BleClient.initialize({ androidNeverForLocation: true });
181
+ bleClientInitialized = true;
182
+ }
183
+ const isBluetoothEnabled = await bluetooth_le_1.BleClient.isEnabled();
184
+ if (!isBluetoothEnabled) {
185
+ throw new device_js_1.DeviceError({
186
+ code: "bluetooth-disabled",
187
+ message: "Bluetooth is disabled",
188
+ });
189
+ }
190
+ }
191
+ catch (e) {
192
+ this.error("Error initializing Bluetooth", e);
193
+ const error = e;
194
+ if (error.message === "BLE permission denied") {
195
+ // Error thrown for iOS platform.
196
+ throw new device_js_1.DeviceError({
197
+ code: "bluetooth-disabled",
198
+ message: "Bluetooth is disabled",
199
+ });
200
+ }
201
+ throw new device_js_1.DeviceError({
202
+ code: "bluetooth-missing-permissions",
203
+ message: "Missing permissions",
204
+ });
205
+ }
206
+ }
99
207
  async disconnect() {
100
208
  try {
101
209
  if (this.connection) {
@@ -103,7 +211,6 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
103
211
  }
104
212
  }
105
213
  catch (e) {
106
- this.log("Error during disconnection:\r\n" + e);
107
214
  this.logging.event({
108
215
  type: "Bluetooth-error",
109
216
  message: "error-disconnecting",
@@ -112,7 +219,6 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
112
219
  finally {
113
220
  this.connection = undefined;
114
221
  this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
115
- this.logging.log("Disconnection complete");
116
222
  this.logging.event({
117
223
  type: "Bluetooth-info",
118
224
  message: "disconnected",
@@ -122,7 +228,9 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
122
228
  setStatus(newStatus) {
123
229
  this.status = newStatus;
124
230
  this.log("Bluetooth connection status " + newStatus);
125
- this.dispatchTypedEvent("status", new device_js_1.ConnectionStatusEvent(newStatus));
231
+ if (!this.deferStatusUpdates) {
232
+ this.dispatchTypedEvent("status", new device_js_1.ConnectionStatusEvent(newStatus));
233
+ }
126
234
  }
127
235
  serialWrite(data) {
128
236
  if (this.connection) {
@@ -135,138 +243,216 @@ class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
135
243
  this.device = undefined;
136
244
  this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
137
245
  }
138
- async connectInternal() {
139
- if (!this.connection) {
140
- const device = await this.chooseDevice();
141
- if (!device) {
142
- this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
143
- return;
144
- }
145
- this.connection = await (0, bluetooth_device_wrapper_js_1.createBluetoothDeviceWrapper)(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
146
- onConnecting: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTING),
147
- onReconnecting: () => this.setStatus(device_js_1.ConnectionStatus.RECONNECTING),
148
- onSuccess: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTED),
149
- onFail: () => {
150
- this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
151
- this.connection = undefined;
152
- },
153
- });
154
- return;
155
- }
156
- // TODO: timeout unification?
157
- }
158
246
  setNameFilter(name) {
159
247
  this.nameFilter = name;
160
248
  }
161
- async chooseDevice() {
249
+ async requestDevice() {
162
250
  if (this.device) {
163
251
  return this.device;
164
252
  }
165
253
  this.dispatchTypedEvent("beforerequestdevice", new device_js_1.BeforeRequestDevice());
166
254
  try {
167
- // In some situations the Chrome device prompt simply doesn't appear so we time this out after 30 seconds and reload the page
168
- // TODO: give control over this to the caller
169
- const result = await Promise.race([
170
- navigator.bluetooth.requestDevice({
171
- filters: [
172
- {
173
- namePrefix: this.nameFilter
174
- ? `BBC micro:bit [${this.nameFilter}]`
175
- : "BBC micro:bit",
176
- },
177
- {
178
- // See https://github.com/bsiever/microbit-pxt-blehid/issues/31
179
- namePrefix: this.nameFilter
180
- ? `uBit [${this.nameFilter}]`
181
- : "uBit",
182
- },
183
- ],
184
- optionalServices: [
185
- bluetooth_profile_js_1.profile.accelerometer.id,
186
- bluetooth_profile_js_1.profile.button.id,
187
- bluetooth_profile_js_1.profile.deviceInformation.id,
188
- bluetooth_profile_js_1.profile.dfuControl.id,
189
- bluetooth_profile_js_1.profile.event.id,
190
- bluetooth_profile_js_1.profile.ioPin.id,
191
- bluetooth_profile_js_1.profile.led.id,
192
- bluetooth_profile_js_1.profile.magnetometer.id,
193
- bluetooth_profile_js_1.profile.temperature.id,
194
- bluetooth_profile_js_1.profile.uart.id,
195
- ],
196
- }),
197
- new Promise((resolve) => setTimeout(() => resolve("timeout"), requestDeviceTimeoutDuration)),
198
- ]);
199
- if (result === "timeout") {
200
- // btSelectMicrobitDialogOnLoad.set(true);
201
- window.location.reload();
202
- return undefined;
255
+ const namePrefix = this.nameFilter
256
+ ? `BBC micro:bit [${this.nameFilter}]`
257
+ : "BBC micro:bit";
258
+ if (core_1.Capacitor.isNativePlatform()) {
259
+ this.device = await this.requestDeviceNative(namePrefix);
203
260
  }
204
- this.device = result;
205
- return result;
206
- }
207
- catch (e) {
208
- this.logging.error("Bluetooth request device failed/cancelled", e);
209
- return undefined;
261
+ else {
262
+ this.device = await this.requestDeviceWeb(namePrefix);
263
+ }
264
+ if (!this.device) {
265
+ this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
266
+ throw new device_js_1.DeviceError({
267
+ code: "timeout-error",
268
+ message: "Timeout scanning for device",
269
+ });
270
+ }
271
+ return this.device;
210
272
  }
211
273
  finally {
212
274
  this.dispatchTypedEvent("afterrequestdevice", new device_js_1.AfterRequestDevice());
213
275
  }
214
276
  }
215
277
  async getAccelerometerData() {
216
- const accelerometerService = await this.connection?.getAccelerometerService();
217
- return accelerometerService?.getData();
278
+ return this.connection?.accelerometer.getData();
218
279
  }
219
280
  async getAccelerometerPeriod() {
220
- const accelerometerService = await this.connection?.getAccelerometerService();
221
- return accelerometerService?.getPeriod();
281
+ return this.connection?.accelerometer.getPeriod();
222
282
  }
223
283
  async setAccelerometerPeriod(value) {
224
- const accelerometerService = await this.connection?.getAccelerometerService();
225
- return accelerometerService?.setPeriod(value);
284
+ return this.connection?.accelerometer.setPeriod(value);
226
285
  }
227
286
  async setLedText(text) {
228
- const ledService = await this.connection?.getLedService();
229
- return ledService?.setText(text);
287
+ return this.connection?.led.setText(text);
230
288
  }
231
289
  async getLedScrollingDelay() {
232
- const ledService = await this.connection?.getLedService();
233
- return ledService?.getScrollingDelay();
290
+ return this.connection?.led.getScrollingDelay();
234
291
  }
235
292
  async setLedScrollingDelay(delayInMillis) {
236
- const ledService = await this.connection?.getLedService();
237
- await ledService?.setScrollingDelay(delayInMillis);
293
+ await this.connection?.led.setScrollingDelay(delayInMillis);
238
294
  }
239
295
  async getLedMatrix() {
240
- const ledService = await this.connection?.getLedService();
241
- return ledService?.getLedMatrix();
296
+ return await this.connection?.led.getLedMatrix();
242
297
  }
243
298
  async setLedMatrix(matrix) {
244
- const ledService = await this.connection?.getLedService();
245
- ledService?.setLedMatrix(matrix);
299
+ await this.connection?.led.setLedMatrix(matrix);
246
300
  }
247
301
  async getMagnetometerData() {
248
- const magnetometerService = await this.connection?.getMagnetometerService();
249
- return magnetometerService?.getData();
302
+ return this.connection?.magnetometer.getData();
250
303
  }
251
304
  async getMagnetometerPeriod() {
252
- const magnetometerService = await this.connection?.getMagnetometerService();
253
- return magnetometerService?.getPeriod();
305
+ return this.connection?.magnetometer.getPeriod();
254
306
  }
255
307
  async setMagnetometerPeriod(value) {
256
- const magnetometerService = await this.connection?.getMagnetometerService();
257
- return magnetometerService?.setPeriod(value);
308
+ return this.connection?.magnetometer.setPeriod(value);
258
309
  }
259
310
  async getMagnetometerBearing() {
260
- const magnetometerService = await this.connection?.getMagnetometerService();
261
- return magnetometerService?.getBearing();
311
+ return this.connection?.magnetometer.getBearing();
262
312
  }
263
313
  async triggerMagnetometerCalibration() {
264
- const magnetometerService = await this.connection?.getMagnetometerService();
265
- return magnetometerService?.triggerCalibration();
314
+ await this.connection?.magnetometer.triggerCalibration();
266
315
  }
267
316
  async uartWrite(data) {
268
- const uartService = await this.connection?.getUARTService();
269
- uartService?.writeData(data);
317
+ await this.connection?.uart.writeData(data);
318
+ }
319
+ /**
320
+ * Flash the micro:bit.
321
+ *
322
+ * Note that this will always leave the connection disconnected.
323
+ *
324
+ * @param dataSource The data to use.
325
+ * @param options Flash options and progress callback.
326
+ */
327
+ async flash(dataSource, options = {}) {
328
+ const progress = options.progress ?? (() => { });
329
+ try {
330
+ // We'll disconnect/reconnect multiple times due to device resets, but reporting this is unhelpful.
331
+ this.deferStatusUpdates = true;
332
+ if (this.status !== device_js_1.ConnectionStatus.CONNECTED) {
333
+ await this.connect({ progress });
334
+ }
335
+ const connection = this.connection;
336
+ try {
337
+ const boardVersion = connection.boardVersion;
338
+ if (!boardVersion) {
339
+ throw new device_js_1.DeviceError({
340
+ code: "device-disconnected",
341
+ message: "No board version found",
342
+ });
343
+ }
344
+ const memoryMap = convertDataToMemoryMap(await dataSource(boardVersion));
345
+ if (!memoryMap) {
346
+ throw new device_js_1.FlashDataError("Could not convert hex to memory map");
347
+ }
348
+ if (!this.device) {
349
+ throw new device_js_1.DeviceError({
350
+ code: "device-disconnected",
351
+ message: "No device",
352
+ });
353
+ }
354
+ this.log(`Got board version ${boardVersion}`);
355
+ const partialFlashResult = await (0, flashing_partial_js_1.default)(connection, memoryMap, progress);
356
+ if (partialFlashResult === flashing_partial_js_1.PartialFlashResult.AttemptFullFlash) {
357
+ await (0, flashing_full_js_1.fullFlash)(connection, boardVersion, memoryMap, progress);
358
+ }
359
+ }
360
+ catch (e) {
361
+ this.error("Failed to flash", e);
362
+ throw e;
363
+ }
364
+ finally {
365
+ await this.disconnect();
366
+ }
367
+ }
368
+ finally {
369
+ this.deferStatusUpdates = false;
370
+ this.dispatchTypedEvent("status", new device_js_1.ConnectionStatusEvent(this.status));
371
+ }
372
+ }
373
+ async requestDeviceWeb(namePrefix) {
374
+ return await bluetooth_le_1.BleClient.requestDevice({
375
+ namePrefix: this.nameFilter
376
+ ? `BBC micro:bit [${namePrefix}]`
377
+ : "BBC micro:bit",
378
+ // TODO: is this possible to reinstate?
379
+ // See https://github.com/bsiever/microbit-pxt-blehid/issues/31
380
+ //namePrefix: this.nameFilter
381
+ // ? `uBit [${this.nameFilter}]`
382
+ // : "uBit",
383
+ optionalServices: [
384
+ bluetooth_profile_js_1.profile.accelerometer.id,
385
+ bluetooth_profile_js_1.profile.button.id,
386
+ bluetooth_profile_js_1.profile.deviceInformation.id,
387
+ bluetooth_profile_js_1.profile.dfuControl.id,
388
+ bluetooth_profile_js_1.profile.event.id,
389
+ bluetooth_profile_js_1.profile.ioPin.id,
390
+ bluetooth_profile_js_1.profile.led.id,
391
+ bluetooth_profile_js_1.profile.magnetometer.id,
392
+ bluetooth_profile_js_1.profile.temperature.id,
393
+ bluetooth_profile_js_1.profile.uart.id,
394
+ ],
395
+ });
396
+ }
397
+ /**
398
+ * Finds device with specified name prefix.
399
+ *
400
+ * @returns device or undefined if none can be found.
401
+ */
402
+ async requestDeviceNative(namePrefix) {
403
+ // Check for existing bonded devices.
404
+ const bonded = await this.checkBondedDevices((device) => {
405
+ const name = device.name;
406
+ return !!name && name.startsWith(namePrefix);
407
+ });
408
+ if (bonded) {
409
+ return bonded;
410
+ }
411
+ this.log(`Scanning for device - ${namePrefix}`);
412
+ let found = false;
413
+ const scanPromise = new Promise((resolve) =>
414
+ // This only resolves when we stop the scan.
415
+ void bluetooth_le_1.BleClient.requestLEScan({}, async (result) => {
416
+ // For a V1 in the Nordic bootloader, we see a name of "DfuTarg" that
417
+ // isn't matched by the name filter but the advertising name is in the
418
+ // localName on the device. So we filter here instead. This happens on
419
+ // iOS if DFU fails / is interrupted.
420
+ if (result.device.name?.startsWith(namePrefix) ||
421
+ result.localName?.startsWith(namePrefix)) {
422
+ found = true;
423
+ await bluetooth_le_1.BleClient.stopLEScan();
424
+ resolve(result.device);
425
+ }
426
+ }));
427
+ const scanTimeoutPromise = new Promise((resolve) => setTimeout(async () => {
428
+ if (!found) {
429
+ await bluetooth_le_1.BleClient.stopLEScan();
430
+ this.log("Timeout scanning for device");
431
+ resolve(undefined);
432
+ }
433
+ }, bluetooth_device_wrapper_js_1.scanningTimeoutInMs));
434
+ return await Promise.race([scanPromise, scanTimeoutPromise]);
435
+ }
436
+ async checkBondedDevices(predicate) {
437
+ if (!(0, bluetooth_device_wrapper_js_1.isAndroid)()) {
438
+ // Not supported.
439
+ return undefined;
440
+ }
441
+ const bondedDevices = await bluetooth_le_1.BleClient.getBondedDevices();
442
+ const result = bondedDevices.find(predicate);
443
+ this.log(result === undefined
444
+ ? "No matching bonded device"
445
+ : "Found matching bonded device");
446
+ return result;
270
447
  }
271
448
  }
449
+ const convertDataToMemoryMap = (data) => {
450
+ if (data instanceof nrf_intel_hex_1.default) {
451
+ return data;
452
+ }
453
+ if (data instanceof Uint8Array) {
454
+ return nrf_intel_hex_1.default.fromPaddedUint8Array(data);
455
+ }
456
+ return nrf_intel_hex_1.default.fromHex(data);
457
+ };
272
458
  //# 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 buttonACharacteristic;
5
- private buttonBCharacteristic;
4
+ private deviceId;
6
5
  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>;
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 characteristicForEvent;
12
+ private characteristicForButtonEventType;
13
13
  }
@@ -1,80 +1,66 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ButtonService = void 0;
4
+ const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
4
5
  const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
5
6
  const buttons_js_1 = require("./buttons.js");
6
7
  const device_js_1 = require("./device.js");
7
8
  class ButtonService {
8
- constructor(buttonACharacteristic, buttonBCharacteristic, dispatchTypedEvent) {
9
- Object.defineProperty(this, "buttonACharacteristic", {
9
+ constructor(deviceId, dispatchTypedEvent) {
10
+ Object.defineProperty(this, "deviceId", {
10
11
  enumerable: true,
11
12
  configurable: true,
12
13
  writable: true,
13
- value: buttonACharacteristic
14
+ value: deviceId
14
15
  });
15
- Object.defineProperty(this, "buttonBCharacteristic", {
16
+ Object.defineProperty(this, "dispatchTypedEvent", {
16
17
  enumerable: true,
17
18
  configurable: true,
18
19
  writable: true,
19
- value: buttonBCharacteristic
20
+ value: dispatchTypedEvent
20
21
  });
21
- Object.defineProperty(this, "dispatchTypedEvent", {
22
+ Object.defineProperty(this, "uuid", {
22
23
  enumerable: true,
23
24
  configurable: true,
24
25
  writable: true,
25
- value: dispatchTypedEvent
26
+ value: bluetooth_profile_js_1.profile.button.id
26
27
  });
27
- for (const type of ["buttonachanged", "buttonbchanged"]) {
28
- this.characteristicForEvent(type)?.addEventListener("characteristicvaluechanged", (event) => {
29
- const target = event.target;
30
- const data = this.dataViewToButtonState(target.value);
31
- this.dispatchTypedEvent(type, new buttons_js_1.ButtonEvent(type, data));
32
- });
33
- }
34
28
  }
35
- static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
36
- let buttonService;
37
- try {
38
- buttonService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.button.id);
39
- }
40
- catch (err) {
41
- if (listenerInit) {
42
- dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
43
- return;
44
- }
45
- else {
46
- throw new device_js_1.DeviceError({
47
- code: "service-missing",
48
- message: err,
49
- });
50
- }
51
- }
52
- const buttonACharacteristic = await buttonService.getCharacteristic(bluetooth_profile_js_1.profile.button.characteristics.a.id);
53
- const buttonBCharacteristic = await buttonService.getCharacteristic(bluetooth_profile_js_1.profile.button.characteristics.b.id);
54
- return new ButtonService(buttonACharacteristic, buttonBCharacteristic, dispatcher);
29
+ getRelevantEvents() {
30
+ return ["buttonachanged", "buttonbchanged"];
55
31
  }
56
32
  dataViewToButtonState(dataView) {
57
33
  return dataView.getUint8(0);
58
34
  }
59
35
  async startNotifications(type) {
60
- await this.characteristicForEvent(type)?.startNotifications();
36
+ switch (type) {
37
+ case "buttonachanged":
38
+ case "buttonbchanged": {
39
+ try {
40
+ await bluetooth_le_1.BleClient.startNotifications(this.deviceId, bluetooth_profile_js_1.profile.button.id, this.characteristicForButtonEventType(type).id, (value) => {
41
+ const data = this.dataViewToButtonState(value);
42
+ this.dispatchTypedEvent(type, new buttons_js_1.ButtonEvent(type, data));
43
+ });
44
+ }
45
+ catch (e) {
46
+ this.dispatchTypedEvent("backgrounderror", new device_js_1.BackgroundErrorEvent("Failed to start notifications", e));
47
+ }
48
+ }
49
+ }
61
50
  }
62
51
  async stopNotifications(type) {
63
- await this.characteristicForEvent(type)?.stopNotifications();
64
- }
65
- characteristicForEvent(type) {
66
52
  switch (type) {
67
- case "buttonachanged": {
68
- return this.buttonACharacteristic;
69
- }
53
+ case "buttonachanged":
70
54
  case "buttonbchanged": {
71
- return this.buttonBCharacteristic;
72
- }
73
- default: {
74
- return undefined;
55
+ await bluetooth_le_1.BleClient.stopNotifications(this.deviceId, bluetooth_profile_js_1.profile.button.id, this.characteristicForButtonEventType(type).id);
75
56
  }
76
57
  }
77
58
  }
59
+ characteristicForButtonEventType(type) {
60
+ return type === "buttonachanged"
61
+ ? bluetooth_profile_js_1.profile.button.characteristics.a
62
+ : bluetooth_profile_js_1.profile.button.characteristics.b;
63
+ }
78
64
  }
79
65
  exports.ButtonService = ButtonService;
80
66
  //# sourceMappingURL=button-service.js.map