@microbit/microbit-connection 0.0.0-alpha.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +94 -5
- package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +3 -3
- package/build/cjs/accelerometer-service.js +106 -0
- package/build/cjs/accelerometer-service.js.map +1 -0
- package/build/cjs/accelerometer.js +16 -0
- package/build/cjs/accelerometer.js.map +1 -0
- package/build/cjs/async-util.js +27 -0
- package/build/cjs/async-util.js.map +1 -0
- package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +23 -15
- package/build/cjs/bluetooth-device-wrapper.js +467 -0
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
- package/build/cjs/bluetooth-profile.js +86 -0
- package/build/cjs/bluetooth-profile.js.map +1 -0
- package/build/cjs/bluetooth.d.ts +108 -0
- package/build/cjs/bluetooth.js +272 -0
- package/build/cjs/bluetooth.js.map +1 -0
- package/build/cjs/board-id.js +81 -0
- package/build/cjs/board-id.js.map +1 -0
- package/build/cjs/board-serial-info.js +51 -0
- package/build/cjs/board-serial-info.js.map +1 -0
- package/build/{button-service.d.ts → cjs/button-service.d.ts} +2 -2
- package/build/cjs/button-service.js +80 -0
- package/build/cjs/button-service.js.map +1 -0
- package/build/cjs/buttons.js +22 -0
- package/build/cjs/buttons.js.map +1 -0
- package/build/cjs/constants.js +73 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/{device.d.ts → cjs/device.d.ts} +35 -46
- package/build/cjs/device.js +133 -0
- package/build/cjs/device.js.map +1 -0
- package/build/{events.d.ts → cjs/events.d.ts} +12 -3
- package/build/cjs/events.js +109 -0
- package/build/cjs/events.js.map +1 -0
- package/build/cjs/hex-flash-data-source.js +26 -0
- package/build/cjs/hex-flash-data-source.js.map +1 -0
- package/build/cjs/index.d.ts +17 -0
- package/build/cjs/index.js +36 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/led-service.d.ts +20 -0
- package/build/cjs/led-service.js +120 -0
- package/build/cjs/led-service.js.map +1 -0
- package/build/cjs/led.d.ts +6 -0
- package/build/cjs/led.js +3 -0
- package/build/cjs/led.js.map +1 -0
- package/build/{logging.d.ts → cjs/logging.d.ts} +3 -3
- package/build/cjs/logging.js +16 -0
- package/build/cjs/logging.js.map +1 -0
- package/build/cjs/magnetometer-service.d.ts +22 -0
- package/build/cjs/magnetometer-service.js +129 -0
- package/build/cjs/magnetometer-service.js.map +1 -0
- package/build/cjs/magnetometer.d.ts +9 -0
- package/build/cjs/magnetometer.js +16 -0
- package/build/cjs/magnetometer.js.map +1 -0
- package/build/cjs/package.json +1 -0
- package/build/cjs/promise-queue.d.ts +27 -0
- package/build/cjs/promise-queue.js +78 -0
- package/build/cjs/promise-queue.js.map +1 -0
- package/build/cjs/serial-events.d.ts +20 -0
- package/build/cjs/serial-events.js +69 -0
- package/build/cjs/serial-events.js.map +1 -0
- package/build/{service-events.d.ts → cjs/service-events.d.ts} +4 -0
- package/build/cjs/service-events.js +39 -0
- package/build/cjs/service-events.js.map +1 -0
- package/build/cjs/setupTests.js.map +1 -0
- package/build/cjs/uart-service.d.ts +13 -0
- package/build/cjs/uart-service.js +76 -0
- package/build/cjs/uart-service.js.map +1 -0
- package/build/cjs/uart.d.ts +4 -0
- package/build/cjs/uart.js +16 -0
- package/build/cjs/uart.js.map +1 -0
- package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +2 -6
- package/build/cjs/usb-device-wrapper.js +412 -0
- package/build/cjs/usb-device-wrapper.js.map +1 -0
- package/build/cjs/usb-partial-flashing-utils.js +133 -0
- package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
- package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -3
- package/build/cjs/usb-partial-flashing.js +341 -0
- package/build/cjs/usb-partial-flashing.js.map +1 -0
- package/build/cjs/usb-radio-bridge.d.ts +24 -0
- package/build/cjs/usb-radio-bridge.js +516 -0
- package/build/cjs/usb-radio-bridge.js.map +1 -0
- package/build/cjs/usb-serial-protocol.js +183 -0
- package/build/cjs/usb-serial-protocol.js.map +1 -0
- package/build/cjs/usb.d.ts +64 -0
- package/build/cjs/usb.js +647 -0
- package/build/cjs/usb.js.map +1 -0
- package/build/esm/accelerometer-service.d.ts +18 -0
- package/build/{accelerometer-service.js → esm/accelerometer-service.js} +4 -20
- package/build/esm/accelerometer-service.js.map +1 -0
- package/build/esm/accelerometer.d.ts +9 -0
- package/build/esm/accelerometer.js.map +1 -0
- package/build/esm/async-util.d.ts +13 -0
- package/build/esm/async-util.js.map +1 -0
- package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
- package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +105 -75
- package/build/esm/bluetooth-device-wrapper.js.map +1 -0
- package/build/esm/bluetooth-profile.d.ts +139 -0
- package/build/esm/bluetooth-profile.js.map +1 -0
- package/build/esm/bluetooth.d.ts +108 -0
- package/build/{bluetooth.js → esm/bluetooth.js} +73 -36
- package/build/esm/bluetooth.js.map +1 -0
- package/build/esm/board-id.d.ts +36 -0
- package/build/esm/board-id.js.map +1 -0
- package/build/esm/board-serial-info.d.ts +14 -0
- package/build/esm/board-serial-info.js.map +1 -0
- package/build/esm/button-service.d.ts +13 -0
- package/build/esm/button-service.js.map +1 -0
- package/build/esm/buttons.d.ts +10 -0
- package/build/esm/buttons.js.map +1 -0
- package/build/esm/constants.d.ts +48 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/device.d.ts +181 -0
- package/build/{device.js → esm/device.js} +11 -58
- package/build/esm/device.js.map +1 -0
- package/build/esm/events.d.ts +110 -0
- package/build/esm/events.js +104 -0
- package/build/esm/events.js.map +1 -0
- package/build/esm/hex-flash-data-source.d.ts +7 -0
- package/build/esm/hex-flash-data-source.js.map +1 -0
- package/build/esm/index.d.ts +17 -0
- package/build/esm/index.js +12 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/led-service.d.ts +20 -0
- package/build/esm/led-service.js +116 -0
- package/build/esm/led-service.js.map +1 -0
- package/build/esm/led.d.ts +6 -0
- package/build/esm/led.js +2 -0
- package/build/esm/led.js.map +1 -0
- package/build/esm/logging.d.ts +21 -0
- package/build/esm/logging.js.map +1 -0
- package/build/esm/magnetometer-service.d.ts +22 -0
- package/build/esm/magnetometer-service.js +125 -0
- package/build/esm/magnetometer-service.js.map +1 -0
- package/build/esm/magnetometer.d.ts +9 -0
- package/build/esm/magnetometer.js +12 -0
- package/build/esm/magnetometer.js.map +1 -0
- package/build/esm/package.json +1 -0
- package/build/esm/promise-queue.d.ts +27 -0
- package/build/esm/promise-queue.js +74 -0
- package/build/esm/promise-queue.js.map +1 -0
- package/build/esm/serial-events.d.ts +20 -0
- package/build/esm/serial-events.js +61 -0
- package/build/esm/serial-events.js.map +1 -0
- package/build/esm/service-events.d.ts +17 -0
- package/build/{service-events.js → esm/service-events.js} +12 -0
- package/build/esm/service-events.js.map +1 -0
- package/build/esm/setupTests.d.ts +6 -0
- package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
- package/build/esm/uart-service.d.ts +13 -0
- package/build/esm/uart-service.js +72 -0
- package/build/esm/uart-service.js.map +1 -0
- package/build/esm/uart.d.ts +4 -0
- package/build/esm/uart.js +12 -0
- package/build/esm/uart.js.map +1 -0
- package/build/esm/usb-device-wrapper.d.ts +47 -0
- package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +36 -12
- package/build/esm/usb-device-wrapper.js.map +1 -0
- package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
- package/build/esm/usb-partial-flashing-utils.js.map +1 -0
- package/build/esm/usb-partial-flashing.d.ts +69 -0
- package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
- package/build/esm/usb-partial-flashing.js.map +1 -0
- package/build/esm/usb-radio-bridge.d.ts +24 -0
- package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +133 -47
- package/build/esm/usb-radio-bridge.js.map +1 -0
- package/build/esm/usb-serial-protocol.d.ts +66 -0
- package/build/esm/usb-serial-protocol.js.map +1 -0
- package/build/esm/usb.d.ts +64 -0
- package/build/{usb.js → esm/usb.js} +188 -67
- package/build/esm/usb.js.map +1 -0
- package/package.json +23 -9
- package/typedoc.json +14 -0
- package/build/accelerometer-service.js.map +0 -1
- package/build/accelerometer.js.map +0 -1
- package/build/async-util.js.map +0 -1
- package/build/bluetooth-device-wrapper.js.map +0 -1
- package/build/bluetooth-profile.js.map +0 -1
- 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 +0 -49
- package/build/bluetooth.js.map +0 -1
- package/build/board-id.js.map +0 -1
- package/build/board-serial-info.js.map +0 -1
- package/build/button-service.js.map +0 -1
- package/build/buttons.js.map +0 -1
- package/build/constants.js.map +0 -1
- package/build/device.js.map +0 -1
- package/build/events.js +0 -19
- package/build/events.js.map +0 -1
- package/build/hex-flash-data-source.js.map +0 -1
- package/build/index.d.ts +0 -10
- package/build/index.js +0 -8
- package/build/index.js.map +0 -1
- package/build/logging.js.map +0 -1
- package/build/service-events.js.map +0 -1
- package/build/usb-device-wrapper.js.map +0 -1
- package/build/usb-partial-flashing-utils.js.map +0 -1
- package/build/usb-partial-flashing.js.map +0 -1
- package/build/usb-radio-bridge.d.ts +0 -37
- package/build/usb-radio-bridge.js.map +0 -1
- package/build/usb-serial-protocol.js.map +0 -1
- package/build/usb.d.ts +0 -60
- package/build/usb.js.map +0 -1
- package/vite.config.ts +0 -32
- /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
- /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
- /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +0 -0
- /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
- /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
- /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
- /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
- /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
- /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
- /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
- /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
- /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
- /package/build/{async-util.js → esm/async-util.js} +0 -0
- /package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +0 -0
- /package/build/{board-id.js → esm/board-id.js} +0 -0
- /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
- /package/build/{button-service.js → esm/button-service.js} +0 -0
- /package/build/{buttons.js → esm/buttons.js} +0 -0
- /package/build/{constants.js → esm/constants.js} +0 -0
- /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
- /package/build/{logging.js → esm/logging.js} +0 -0
- /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
- /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { AccelerometerData } from "./accelerometer.js";
|
|
7
|
+
import { DeviceConnection } from "./device.js";
|
|
8
|
+
import { LedMatrix } from "./led.js";
|
|
9
|
+
import { Logging } from "./logging.js";
|
|
10
|
+
import { MagnetometerData } from "./magnetometer.js";
|
|
11
|
+
import { ServiceConnectionEventMap } from "./service-events.js";
|
|
12
|
+
export interface MicrobitWebBluetoothConnectionOptions {
|
|
13
|
+
logging?: Logging;
|
|
14
|
+
}
|
|
15
|
+
export interface MicrobitWebBluetoothConnection extends DeviceConnection<ServiceConnectionEventMap> {
|
|
16
|
+
/**
|
|
17
|
+
* Sets micro:bit name filter for device requesting.
|
|
18
|
+
*
|
|
19
|
+
* @param name The name of the micro:bit.
|
|
20
|
+
*/
|
|
21
|
+
setNameFilter(name: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Gets micro:bit accelerometer data.
|
|
24
|
+
*
|
|
25
|
+
* @returns accelerometer data or undefined if there is no connection.
|
|
26
|
+
*/
|
|
27
|
+
getAccelerometerData(): Promise<AccelerometerData | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Gets micro:bit accelerometer period.
|
|
30
|
+
*
|
|
31
|
+
* @returns accelerometer period or undefined if there is no connection.
|
|
32
|
+
*/
|
|
33
|
+
getAccelerometerPeriod(): Promise<number | undefined>;
|
|
34
|
+
/**
|
|
35
|
+
* Sets micro:bit accelerometer period.
|
|
36
|
+
*
|
|
37
|
+
* @param value The accelerometer period.
|
|
38
|
+
*/
|
|
39
|
+
setAccelerometerPeriod(value: number): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Sets micro:bit LED text.
|
|
42
|
+
*
|
|
43
|
+
* @param text The text displayed on micro:bit LED.
|
|
44
|
+
*/
|
|
45
|
+
setLedText(text: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Gets micro:bit LED scrolling delay.
|
|
48
|
+
*
|
|
49
|
+
* @returns LED scrolling delay in milliseconds.
|
|
50
|
+
*/
|
|
51
|
+
getLedScrollingDelay(): Promise<number | undefined>;
|
|
52
|
+
/**
|
|
53
|
+
* Sets micro:bit LED scrolling delay.
|
|
54
|
+
*
|
|
55
|
+
* @param delayInMillis LED scrolling delay in milliseconds.
|
|
56
|
+
*/
|
|
57
|
+
setLedScrollingDelay(delayInMillis: number): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Gets micro:bit LED matrix.
|
|
60
|
+
*
|
|
61
|
+
* @returns a boolean matrix representing the micro:bit LED display.
|
|
62
|
+
*/
|
|
63
|
+
getLedMatrix(): Promise<LedMatrix | undefined>;
|
|
64
|
+
/**
|
|
65
|
+
* Sets micro:bit LED matrix.
|
|
66
|
+
*
|
|
67
|
+
* @param matrix an boolean matrix representing the micro:bit LED display.
|
|
68
|
+
*/
|
|
69
|
+
setLedMatrix(matrix: LedMatrix): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Gets micro:bit magnetometer data.
|
|
72
|
+
*
|
|
73
|
+
* @returns magnetometer data.
|
|
74
|
+
*/
|
|
75
|
+
getMagnetometerData(): Promise<MagnetometerData | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* Gets micro:bit magnetometer bearing.
|
|
78
|
+
*
|
|
79
|
+
* @returns magnetometer bearing.
|
|
80
|
+
*/
|
|
81
|
+
getMagnetometerBearing(): Promise<number | undefined>;
|
|
82
|
+
/**
|
|
83
|
+
* Gets micro:bit magnetometer period.
|
|
84
|
+
*
|
|
85
|
+
* @returns magnetometer period.
|
|
86
|
+
*/
|
|
87
|
+
getMagnetometerPeriod(): Promise<number | undefined>;
|
|
88
|
+
/**
|
|
89
|
+
* Sets micro:bit magnetometer period.
|
|
90
|
+
*
|
|
91
|
+
* @param value magnetometer period.
|
|
92
|
+
*/
|
|
93
|
+
setMagnetometerPeriod(value: number): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Triggers micro:bit magnetometer calibration.
|
|
96
|
+
*/
|
|
97
|
+
triggerMagnetometerCalibration(): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Write UART messages.
|
|
100
|
+
*
|
|
101
|
+
* @param data UART message.
|
|
102
|
+
*/
|
|
103
|
+
uartWrite(data: Uint8Array): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A Bluetooth connection factory.
|
|
107
|
+
*/
|
|
108
|
+
export declare const createWebBluetoothConnection: (options?: MicrobitWebBluetoothConnectionOptions) => MicrobitWebBluetoothConnection;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWebBluetoothConnection = void 0;
|
|
4
|
+
const bluetooth_device_wrapper_js_1 = require("./bluetooth-device-wrapper.js");
|
|
5
|
+
const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
|
|
6
|
+
const device_js_1 = require("./device.js");
|
|
7
|
+
const events_js_1 = require("./events.js");
|
|
8
|
+
const logging_js_1 = require("./logging.js");
|
|
9
|
+
const requestDeviceTimeoutDuration = 30000;
|
|
10
|
+
/**
|
|
11
|
+
* A Bluetooth connection factory.
|
|
12
|
+
*/
|
|
13
|
+
const createWebBluetoothConnection = (options) => new MicrobitWebBluetoothConnectionImpl(options);
|
|
14
|
+
exports.createWebBluetoothConnection = createWebBluetoothConnection;
|
|
15
|
+
/**
|
|
16
|
+
* A Bluetooth connection to a micro:bit device.
|
|
17
|
+
*/
|
|
18
|
+
class MicrobitWebBluetoothConnectionImpl extends events_js_1.TypedEventTarget {
|
|
19
|
+
constructor(options = {}) {
|
|
20
|
+
super();
|
|
21
|
+
Object.defineProperty(this, "status", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: device_js_1.ConnectionStatus.SUPPORT_NOT_KNOWN
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* The USB device we last connected to.
|
|
29
|
+
* Cleared if it is disconnected.
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(this, "device", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: void 0
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(this, "logging", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(this, "connection", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: void 0
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(this, "availabilityListener", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
configurable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
value: (e) => {
|
|
54
|
+
// TODO: is this called? is `value` correct?
|
|
55
|
+
const value = e.value;
|
|
56
|
+
this.availability = value;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(this, "availability", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
configurable: true,
|
|
62
|
+
writable: true,
|
|
63
|
+
value: void 0
|
|
64
|
+
});
|
|
65
|
+
Object.defineProperty(this, "nameFilter", {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
value: void 0
|
|
70
|
+
});
|
|
71
|
+
this.logging = options.logging || new logging_js_1.NullLogging();
|
|
72
|
+
}
|
|
73
|
+
eventActivated(type) {
|
|
74
|
+
this.connection?.startNotifications(type);
|
|
75
|
+
}
|
|
76
|
+
eventDeactivated(type) {
|
|
77
|
+
this.connection?.stopNotifications(type);
|
|
78
|
+
}
|
|
79
|
+
log(v) {
|
|
80
|
+
this.logging.log(v);
|
|
81
|
+
}
|
|
82
|
+
async initialize() {
|
|
83
|
+
navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
|
|
84
|
+
this.availability = await navigator.bluetooth?.getAvailability();
|
|
85
|
+
this.setStatus(this.availability
|
|
86
|
+
? device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE
|
|
87
|
+
: device_js_1.ConnectionStatus.NOT_SUPPORTED);
|
|
88
|
+
}
|
|
89
|
+
dispose() {
|
|
90
|
+
navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
|
|
91
|
+
}
|
|
92
|
+
async connect() {
|
|
93
|
+
await this.connectInternal();
|
|
94
|
+
return this.status;
|
|
95
|
+
}
|
|
96
|
+
getBoardVersion() {
|
|
97
|
+
return this.connection?.boardVersion;
|
|
98
|
+
}
|
|
99
|
+
async disconnect() {
|
|
100
|
+
try {
|
|
101
|
+
if (this.connection) {
|
|
102
|
+
await this.connection.disconnect();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
this.log("Error during disconnection:\r\n" + e);
|
|
107
|
+
this.logging.event({
|
|
108
|
+
type: "Bluetooth-error",
|
|
109
|
+
message: "error-disconnecting",
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
this.connection = undefined;
|
|
114
|
+
this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
|
|
115
|
+
this.logging.log("Disconnection complete");
|
|
116
|
+
this.logging.event({
|
|
117
|
+
type: "Bluetooth-info",
|
|
118
|
+
message: "disconnected",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
setStatus(newStatus) {
|
|
123
|
+
this.status = newStatus;
|
|
124
|
+
this.log("Bluetooth connection status " + newStatus);
|
|
125
|
+
this.dispatchTypedEvent("status", new device_js_1.ConnectionStatusEvent(newStatus));
|
|
126
|
+
}
|
|
127
|
+
serialWrite(data) {
|
|
128
|
+
if (this.connection) {
|
|
129
|
+
// TODO
|
|
130
|
+
}
|
|
131
|
+
return Promise.resolve();
|
|
132
|
+
}
|
|
133
|
+
async clearDevice() {
|
|
134
|
+
await this.disconnect();
|
|
135
|
+
this.device = undefined;
|
|
136
|
+
this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
137
|
+
}
|
|
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
|
+
setNameFilter(name) {
|
|
159
|
+
this.nameFilter = name;
|
|
160
|
+
}
|
|
161
|
+
async chooseDevice() {
|
|
162
|
+
if (this.device) {
|
|
163
|
+
return this.device;
|
|
164
|
+
}
|
|
165
|
+
this.dispatchTypedEvent("beforerequestdevice", new device_js_1.BeforeRequestDevice());
|
|
166
|
+
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;
|
|
203
|
+
}
|
|
204
|
+
this.device = result;
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
this.logging.error("Bluetooth request device failed/cancelled", e);
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
this.dispatchTypedEvent("afterrequestdevice", new device_js_1.AfterRequestDevice());
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async getAccelerometerData() {
|
|
216
|
+
const accelerometerService = await this.connection?.getAccelerometerService();
|
|
217
|
+
return accelerometerService?.getData();
|
|
218
|
+
}
|
|
219
|
+
async getAccelerometerPeriod() {
|
|
220
|
+
const accelerometerService = await this.connection?.getAccelerometerService();
|
|
221
|
+
return accelerometerService?.getPeriod();
|
|
222
|
+
}
|
|
223
|
+
async setAccelerometerPeriod(value) {
|
|
224
|
+
const accelerometerService = await this.connection?.getAccelerometerService();
|
|
225
|
+
return accelerometerService?.setPeriod(value);
|
|
226
|
+
}
|
|
227
|
+
async setLedText(text) {
|
|
228
|
+
const ledService = await this.connection?.getLedService();
|
|
229
|
+
return ledService?.setText(text);
|
|
230
|
+
}
|
|
231
|
+
async getLedScrollingDelay() {
|
|
232
|
+
const ledService = await this.connection?.getLedService();
|
|
233
|
+
return ledService?.getScrollingDelay();
|
|
234
|
+
}
|
|
235
|
+
async setLedScrollingDelay(delayInMillis) {
|
|
236
|
+
const ledService = await this.connection?.getLedService();
|
|
237
|
+
await ledService?.setScrollingDelay(delayInMillis);
|
|
238
|
+
}
|
|
239
|
+
async getLedMatrix() {
|
|
240
|
+
const ledService = await this.connection?.getLedService();
|
|
241
|
+
return ledService?.getLedMatrix();
|
|
242
|
+
}
|
|
243
|
+
async setLedMatrix(matrix) {
|
|
244
|
+
const ledService = await this.connection?.getLedService();
|
|
245
|
+
ledService?.setLedMatrix(matrix);
|
|
246
|
+
}
|
|
247
|
+
async getMagnetometerData() {
|
|
248
|
+
const magnetometerService = await this.connection?.getMagnetometerService();
|
|
249
|
+
return magnetometerService?.getData();
|
|
250
|
+
}
|
|
251
|
+
async getMagnetometerPeriod() {
|
|
252
|
+
const magnetometerService = await this.connection?.getMagnetometerService();
|
|
253
|
+
return magnetometerService?.getPeriod();
|
|
254
|
+
}
|
|
255
|
+
async setMagnetometerPeriod(value) {
|
|
256
|
+
const magnetometerService = await this.connection?.getMagnetometerService();
|
|
257
|
+
return magnetometerService?.setPeriod(value);
|
|
258
|
+
}
|
|
259
|
+
async getMagnetometerBearing() {
|
|
260
|
+
const magnetometerService = await this.connection?.getMagnetometerService();
|
|
261
|
+
return magnetometerService?.getBearing();
|
|
262
|
+
}
|
|
263
|
+
async triggerMagnetometerCalibration() {
|
|
264
|
+
const magnetometerService = await this.connection?.getMagnetometerService();
|
|
265
|
+
return magnetometerService?.triggerCalibration();
|
|
266
|
+
}
|
|
267
|
+
async uartWrite(data) {
|
|
268
|
+
const uartService = await this.connection?.getUARTService();
|
|
269
|
+
uartService?.writeData(data);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=bluetooth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../../lib/bluetooth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: MIT
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.BoardId = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Validates micro:bit board IDs.
|
|
11
|
+
*/
|
|
12
|
+
class BoardId {
|
|
13
|
+
constructor(id) {
|
|
14
|
+
Object.defineProperty(this, "id", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: id
|
|
19
|
+
});
|
|
20
|
+
if (!this.isV1() && !this.isV2()) {
|
|
21
|
+
throw new Error(`Could not recognise the Board ID ${id.toString(16)}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
toBoardVersion() {
|
|
25
|
+
return this.isV1() ? "V1" : "V2";
|
|
26
|
+
}
|
|
27
|
+
isV1() {
|
|
28
|
+
return this.id === 0x9900 || this.id === 0x9901;
|
|
29
|
+
}
|
|
30
|
+
isV2() {
|
|
31
|
+
return (this.id === 0x9903 ||
|
|
32
|
+
this.id === 0x9904 ||
|
|
33
|
+
this.id === 0x9905 ||
|
|
34
|
+
this.id === 0x9906);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Return the board ID using the default ID for the board type.
|
|
38
|
+
* Used to integrate with MicropythonFsHex.
|
|
39
|
+
*/
|
|
40
|
+
normalize() {
|
|
41
|
+
return this.isV1() ? BoardId.v1Normalized : BoardId.v2Normalized;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* toString matches the input to parse.
|
|
45
|
+
*
|
|
46
|
+
* @returns the ID as a string.
|
|
47
|
+
*/
|
|
48
|
+
toString() {
|
|
49
|
+
return this.id.toString(16);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @param value The ID as a hex string with no 0x prefix (e.g. 9900).
|
|
53
|
+
* @returns the valid board ID
|
|
54
|
+
* @throws if the ID isn't known.
|
|
55
|
+
*/
|
|
56
|
+
static parse(value) {
|
|
57
|
+
return new BoardId(parseInt(value, 16));
|
|
58
|
+
}
|
|
59
|
+
static forVersion(boardVersion) {
|
|
60
|
+
switch (boardVersion) {
|
|
61
|
+
case "V1":
|
|
62
|
+
return this.v1Normalized;
|
|
63
|
+
case "V2":
|
|
64
|
+
return this.v2Normalized;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.BoardId = BoardId;
|
|
69
|
+
Object.defineProperty(BoardId, "v1Normalized", {
|
|
70
|
+
enumerable: true,
|
|
71
|
+
configurable: true,
|
|
72
|
+
writable: true,
|
|
73
|
+
value: new BoardId(0x9900)
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(BoardId, "v2Normalized", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
configurable: true,
|
|
78
|
+
writable: true,
|
|
79
|
+
value: new BoardId(0x9903)
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=board-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-id.js","sourceRoot":"","sources":["../../lib/board-id.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH;;GAEG;AACH,MAAa,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;;AA5DH,0BA6DC;AA5DgB;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BoardSerialInfo = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
*/
|
|
9
|
+
const board_id_js_1 = require("./board-id.js");
|
|
10
|
+
class BoardSerialInfo {
|
|
11
|
+
constructor(id, familyId, hic) {
|
|
12
|
+
Object.defineProperty(this, "id", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: id
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "familyId", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: familyId
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "hic", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: hic
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static parse(device, log) {
|
|
32
|
+
const serial = device.serialNumber;
|
|
33
|
+
if (!serial) {
|
|
34
|
+
throw new Error("Could not detected ID from connected board.");
|
|
35
|
+
}
|
|
36
|
+
if (serial.length !== 48) {
|
|
37
|
+
log(`USB serial number unexpected length: ${serial.length}`);
|
|
38
|
+
}
|
|
39
|
+
const id = serial.substring(0, 4);
|
|
40
|
+
const familyId = serial.substring(4, 8);
|
|
41
|
+
const hic = serial.slice(-8);
|
|
42
|
+
return new BoardSerialInfo(board_id_js_1.BoardId.parse(id), familyId, hic);
|
|
43
|
+
}
|
|
44
|
+
eq(other) {
|
|
45
|
+
return (other.id === this.id &&
|
|
46
|
+
other.familyId === this.familyId &&
|
|
47
|
+
other.hic === this.hic);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.BoardSerialInfo = BoardSerialInfo;
|
|
51
|
+
//# sourceMappingURL=board-serial-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-serial-info.js","sourceRoot":"","sources":["../../lib/board-serial-info.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,+CAAwC;AAExC,MAAa,eAAe;IAC1B,YACS,EAAW,EACX,QAAgB,EAChB,GAAW;QAFlB;;;;mBAAO,EAAE;WAAS;QAClB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,GAAG;WAAQ;IACjB,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,GAA0B;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,eAAe,CAAC,qBAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAsB;QACvB,OAAO,CACL,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACpB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAChC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CACvB,CAAC;IACJ,CAAC;CACF;AA3BD,0CA2BC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
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
4
|
private buttonACharacteristic;
|
|
5
5
|
private buttonBCharacteristic;
|
|
6
6
|
private dispatchTypedEvent;
|
|
7
7
|
constructor(buttonACharacteristic: BluetoothRemoteGATTCharacteristic, buttonBCharacteristic: BluetoothRemoteGATTCharacteristic, dispatchTypedEvent: TypedServiceEventDispatcher);
|
|
8
|
-
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: (
|
|
8
|
+
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<ButtonService | undefined>;
|
|
9
9
|
private dataViewToButtonState;
|
|
10
10
|
startNotifications(type: TypedServiceEvent): Promise<void>;
|
|
11
11
|
stopNotifications(type: TypedServiceEvent): Promise<void>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ButtonService = void 0;
|
|
4
|
+
const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
|
|
5
|
+
const buttons_js_1 = require("./buttons.js");
|
|
6
|
+
const device_js_1 = require("./device.js");
|
|
7
|
+
class ButtonService {
|
|
8
|
+
constructor(buttonACharacteristic, buttonBCharacteristic, dispatchTypedEvent) {
|
|
9
|
+
Object.defineProperty(this, "buttonACharacteristic", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: buttonACharacteristic
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "buttonBCharacteristic", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: buttonBCharacteristic
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(this, "dispatchTypedEvent", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: dispatchTypedEvent
|
|
26
|
+
});
|
|
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
|
+
}
|
|
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);
|
|
55
|
+
}
|
|
56
|
+
dataViewToButtonState(dataView) {
|
|
57
|
+
return dataView.getUint8(0);
|
|
58
|
+
}
|
|
59
|
+
async startNotifications(type) {
|
|
60
|
+
await this.characteristicForEvent(type)?.startNotifications();
|
|
61
|
+
}
|
|
62
|
+
async stopNotifications(type) {
|
|
63
|
+
await this.characteristicForEvent(type)?.stopNotifications();
|
|
64
|
+
}
|
|
65
|
+
characteristicForEvent(type) {
|
|
66
|
+
switch (type) {
|
|
67
|
+
case "buttonachanged": {
|
|
68
|
+
return this.buttonACharacteristic;
|
|
69
|
+
}
|
|
70
|
+
case "buttonbchanged": {
|
|
71
|
+
return this.buttonBCharacteristic;
|
|
72
|
+
}
|
|
73
|
+
default: {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ButtonService = ButtonService;
|
|
80
|
+
//# sourceMappingURL=button-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button-service.js","sourceRoot":"","sources":["../../lib/button-service.ts"],"names":[],"mappings":";;;AACA,iEAAiD;AACjD,6CAAwD;AACxD,2CAAgE;AAOhE,MAAa,aAAa;IACxB,YACU,qBAAwD,EACxD,qBAAwD,EACxD,kBAA+C;QAFvD;;;;mBAAQ,qBAAqB;WAAmC;QAChE;;;;mBAAQ,qBAAqB;WAAmC;QAChE;;;;mBAAQ,kBAAkB;WAA6B;QAEvD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,EAAE,CAAC;YACjE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CACjD,4BAA4B,EAC5B,CAAC,KAAY,EAAE,EAAE;gBACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAkC,CAAC;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,wBAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7D,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,UAAqC,EACrC,UAAuC,EACvC,kBAA+D,EAC/D,YAAqB;QAErB,IAAI,aAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,8BAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,iBAAiB,EAAE,IAAI,gCAAoB,CAAC,GAAa,CAAC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,uBAAW,CAAC;oBACpB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,GAAa;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,qBAAqB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CACjE,8BAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC;QACF,MAAM,qBAAqB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CACjE,8BAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,aAAa,CACtB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,QAAkB;QAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IAEO,sBAAsB,CAAC,IAAuB;QACpD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;YACpC,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA5ED,sCA4EC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ButtonEvent = exports.ButtonState = void 0;
|
|
4
|
+
var ButtonState;
|
|
5
|
+
(function (ButtonState) {
|
|
6
|
+
ButtonState[ButtonState["NotPressed"] = 0] = "NotPressed";
|
|
7
|
+
ButtonState[ButtonState["ShortPress"] = 1] = "ShortPress";
|
|
8
|
+
ButtonState[ButtonState["LongPress"] = 2] = "LongPress";
|
|
9
|
+
})(ButtonState || (exports.ButtonState = ButtonState = {}));
|
|
10
|
+
class ButtonEvent extends Event {
|
|
11
|
+
constructor(type, state) {
|
|
12
|
+
super(type);
|
|
13
|
+
Object.defineProperty(this, "state", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: state
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ButtonEvent = ButtonEvent;
|
|
22
|
+
//# sourceMappingURL=buttons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../lib/buttons.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,uDAAa,CAAA;AACf,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAID,MAAa,WAAY,SAAQ,KAAK;IACpC,YACE,IAAqB,EACL,KAAkB;QAElC,KAAK,CAAC,IAAI,CAAC,CAAC;QAFZ;;;;mBAAgB,KAAK;WAAa;IAGpC,CAAC;CACF;AAPD,kCAOC"}
|