@microbit/microbit-connection 0.0.0-tab.change.177 → 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/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} +7 -1
- 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/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} +6 -31
- package/build/cjs/device.js +133 -0
- package/build/cjs/device.js.map +1 -0
- package/build/{events.d.ts → cjs/events.d.ts} +1 -2
- 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.js +120 -0
- package/build/{led-service.js.map → cjs/led-service.js.map} +1 -1
- 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.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} +1 -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} +1 -1
- 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} +39 -10
- 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} +29 -4
- 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} +1 -57
- package/build/esm/device.js.map +1 -0
- package/build/esm/events.d.ts +110 -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.map +1 -0
- package/build/esm/led.d.ts +6 -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.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} +10 -9
- 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} +11 -4
- 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} +228 -35
- package/build/esm/usb.js.map +1 -0
- package/package.json +21 -8
- 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.d.ts +0 -54
- 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.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/led.js.map +0 -1
- package/build/logging.js.map +0 -1
- package/build/promise-queue.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 -41
- package/build/usb-radio-bridge.js.map +0 -1
- package/build/usb-serial-protocol.js.map +0 -1
- package/build/usb.d.ts +0 -54
- package/build/usb.js.map +0 -1
- package/vite.config.ts +0 -34
- /package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +0 -0
- /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/{button-service.d.ts → cjs/button-service.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/{led-service.d.ts → cjs/led-service.d.ts} +0 -0
- /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
- /package/build/{promise-queue.d.ts → cjs/promise-queue.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/{events.js → esm/events.js} +0 -0
- /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
- /package/build/{led-service.js → esm/led-service.js} +0 -0
- /package/build/{led.js → esm/led.js} +0 -0
- /package/build/{logging.js → esm/logging.js} +0 -0
- /package/build/{promise-queue.js → esm/promise-queue.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,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* (c) 2024, Micro:bit Educational Foundation and contributors
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: MIT
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateRandomRadioFrequency = exports.generateCmdRemoteMbId = exports.generateCmdRadioFrequency = exports.generateCmdStop = exports.generateCmdStart = exports.generateCmdHandshake = exports.processPeriodicMessage = exports.processResponseMessage = exports.splitMessages = exports.version = exports.ResponseTypes = exports.CommandTypes = void 0;
|
|
9
|
+
var MessageTypes;
|
|
10
|
+
(function (MessageTypes) {
|
|
11
|
+
MessageTypes["Command"] = "C";
|
|
12
|
+
MessageTypes["Response"] = "R";
|
|
13
|
+
MessageTypes["Periodic"] = "P";
|
|
14
|
+
})(MessageTypes || (MessageTypes = {}));
|
|
15
|
+
var CommandTypes;
|
|
16
|
+
(function (CommandTypes) {
|
|
17
|
+
CommandTypes["Handshake"] = "HS";
|
|
18
|
+
CommandTypes["RadioFrequency"] = "RF";
|
|
19
|
+
CommandTypes["RemoteMbId"] = "RMBID";
|
|
20
|
+
CommandTypes["SoftwareVersion"] = "SWVER";
|
|
21
|
+
CommandTypes["HardwareVersion"] = "HWVER";
|
|
22
|
+
CommandTypes["Zstart"] = "ZSTART";
|
|
23
|
+
CommandTypes["Stop"] = "STOP";
|
|
24
|
+
})(CommandTypes || (exports.CommandTypes = CommandTypes = {}));
|
|
25
|
+
var ResponseExtraTypes;
|
|
26
|
+
(function (ResponseExtraTypes) {
|
|
27
|
+
ResponseExtraTypes["Error"] = "ERROR";
|
|
28
|
+
})(ResponseExtraTypes || (ResponseExtraTypes = {}));
|
|
29
|
+
exports.ResponseTypes = { ...CommandTypes, ...ResponseExtraTypes };
|
|
30
|
+
// Currently implemented protocol version
|
|
31
|
+
exports.version = 1;
|
|
32
|
+
const splitMessages = (message) => {
|
|
33
|
+
if (!message) {
|
|
34
|
+
return {
|
|
35
|
+
messages: [],
|
|
36
|
+
remainingInput: "",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
let messages = message.split("\n");
|
|
40
|
+
let remainingInput = messages.pop() || "";
|
|
41
|
+
// Throw away any empty messages and messages that don't start with a valid type
|
|
42
|
+
messages = messages.filter((msg) => msg.length > 0 &&
|
|
43
|
+
Object.values(MessageTypes).includes(msg[0]));
|
|
44
|
+
// Any remaining input will be the start of the next message, so if it doesn't start
|
|
45
|
+
// with a valid type throw it away as it'll be prepended to the next serial string
|
|
46
|
+
if (remainingInput.length > 0 &&
|
|
47
|
+
!Object.values(MessageTypes).includes(remainingInput[0])) {
|
|
48
|
+
remainingInput = "";
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
messages,
|
|
52
|
+
remainingInput,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
exports.splitMessages = splitMessages;
|
|
56
|
+
const processResponseMessage = (message) => {
|
|
57
|
+
// Regex for a message response with 3 groups:
|
|
58
|
+
// id -> The message ID, 1-8 hex characters
|
|
59
|
+
// cmd -> The command type, a string, only capital letters, matching CommandTypes
|
|
60
|
+
// value -> The response value, empty string or a word, number,
|
|
61
|
+
// or version (e.g 1.2.3) depending on the command type
|
|
62
|
+
const responseMatch = /^R\[(?<id>[0-9A-Fa-f]{1,8})\](?<cmd>[A-Z]+)\[(?<value>-?[\w.]*)\]$/.exec(message);
|
|
63
|
+
if (!responseMatch || !responseMatch.groups) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const messageId = parseInt(responseMatch.groups["id"], 16);
|
|
67
|
+
if (isNaN(messageId)) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const responseType = responseMatch.groups["cmd"];
|
|
71
|
+
if (!Object.values(exports.ResponseTypes).includes(responseType)) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
let value = responseMatch.groups["value"];
|
|
75
|
+
switch (responseType) {
|
|
76
|
+
// Commands with numeric values
|
|
77
|
+
case exports.ResponseTypes.Handshake:
|
|
78
|
+
case exports.ResponseTypes.RadioFrequency:
|
|
79
|
+
case exports.ResponseTypes.RemoteMbId:
|
|
80
|
+
case exports.ResponseTypes.HardwareVersion:
|
|
81
|
+
case exports.ResponseTypes.Error:
|
|
82
|
+
value = Number(value);
|
|
83
|
+
if (isNaN(value) || value < 0 || value > 0xffffffff) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
// Commands without values
|
|
88
|
+
case exports.ResponseTypes.Zstart:
|
|
89
|
+
case exports.ResponseTypes.Stop:
|
|
90
|
+
if (value !== "") {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
// Semver-ish values (valid range 00.00.00 to 99.99.99)
|
|
95
|
+
case exports.ResponseTypes.SoftwareVersion:
|
|
96
|
+
if (!/^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$/.test(value)) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
message,
|
|
103
|
+
messageId,
|
|
104
|
+
type: responseType,
|
|
105
|
+
value,
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
exports.processResponseMessage = processResponseMessage;
|
|
109
|
+
const processPeriodicMessage = (message) => {
|
|
110
|
+
// Basic checks to match the message being a compact periodic message
|
|
111
|
+
if (message.length !== 13 || message[0] !== MessageTypes.Periodic) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
// All characters except the first one should be hex
|
|
115
|
+
if (!/^[0-9A-Fa-f]+$/.test(message.substring(1))) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
// Only the two Least Significant Bits from the buttons are used
|
|
119
|
+
const buttons = parseInt(message[12], 16);
|
|
120
|
+
if (buttons > 3) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
// The accelerometer data has been clamped to -2048 to 2047, and an offset
|
|
125
|
+
// added to make the values positive, so that needs to be reversed
|
|
126
|
+
accelerometerX: parseInt(message.substring(3, 6), 16) - 2048,
|
|
127
|
+
accelerometerY: parseInt(message.substring(6, 9), 16) - 2048,
|
|
128
|
+
accelerometerZ: parseInt(message.substring(9, 12), 16) - 2048,
|
|
129
|
+
// Button A is the LSB, button B is the next bit
|
|
130
|
+
buttonA: buttons & 1,
|
|
131
|
+
buttonB: (buttons >> 1) & 1,
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
exports.processPeriodicMessage = processPeriodicMessage;
|
|
135
|
+
const generateCommand = (cmdType, cmdData = "") => {
|
|
136
|
+
// Generate an random (enough) ID with max value of 8 hex digits
|
|
137
|
+
const msgID = Math.floor(Math.random() * 0xffffffff);
|
|
138
|
+
return {
|
|
139
|
+
message: `C[${msgID.toString(16).toUpperCase()}]${cmdType}[${cmdData}]\n`,
|
|
140
|
+
messageId: msgID,
|
|
141
|
+
type: cmdType,
|
|
142
|
+
value: cmdData,
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
const generateCmdHandshake = () => {
|
|
146
|
+
return generateCommand(CommandTypes.Handshake);
|
|
147
|
+
};
|
|
148
|
+
exports.generateCmdHandshake = generateCmdHandshake;
|
|
149
|
+
const generateCmdStart = (sensors) => {
|
|
150
|
+
let cmdData = "";
|
|
151
|
+
if (sensors.accelerometer) {
|
|
152
|
+
cmdData += "A";
|
|
153
|
+
}
|
|
154
|
+
if (sensors.buttons) {
|
|
155
|
+
cmdData += "B";
|
|
156
|
+
}
|
|
157
|
+
return generateCommand(CommandTypes.Zstart, cmdData);
|
|
158
|
+
};
|
|
159
|
+
exports.generateCmdStart = generateCmdStart;
|
|
160
|
+
const generateCmdStop = () => {
|
|
161
|
+
return generateCommand(CommandTypes.Stop);
|
|
162
|
+
};
|
|
163
|
+
exports.generateCmdStop = generateCmdStop;
|
|
164
|
+
const generateCmdRadioFrequency = (frequency) => {
|
|
165
|
+
if (frequency < 0 || frequency > 83) {
|
|
166
|
+
throw new Error("Radio frequency out of range");
|
|
167
|
+
}
|
|
168
|
+
return generateCommand(CommandTypes.RadioFrequency, frequency.toString());
|
|
169
|
+
};
|
|
170
|
+
exports.generateCmdRadioFrequency = generateCmdRadioFrequency;
|
|
171
|
+
const generateCmdRemoteMbId = (remoteMicrobitId) => {
|
|
172
|
+
if (remoteMicrobitId < 0 || remoteMicrobitId > 0xffffffff) {
|
|
173
|
+
throw new Error("Remote micro:bit ID out of range");
|
|
174
|
+
}
|
|
175
|
+
return generateCommand(CommandTypes.RemoteMbId, remoteMicrobitId.toString());
|
|
176
|
+
};
|
|
177
|
+
exports.generateCmdRemoteMbId = generateCmdRemoteMbId;
|
|
178
|
+
const generateRandomRadioFrequency = () => {
|
|
179
|
+
// The value range for radio frequencies is 0 to 83
|
|
180
|
+
return Math.floor(Math.random() * 84);
|
|
181
|
+
};
|
|
182
|
+
exports.generateRandomRadioFrequency = generateRandomRadioFrequency;
|
|
183
|
+
//# sourceMappingURL=usb-serial-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usb-serial-protocol.js","sourceRoot":"","sources":["../../lib/usb-serial-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { DeviceConnection, FlashDataSource } from "./device.js";
|
|
2
|
+
import { Logging } from "./logging.js";
|
|
3
|
+
import { SerialConnectionEventMap } from "./serial-events.js";
|
|
4
|
+
export declare const isChromeOS105: () => boolean;
|
|
5
|
+
export declare enum DeviceSelectionMode {
|
|
6
|
+
/**
|
|
7
|
+
* Attempts to connect to known device, otherwise asks which device to
|
|
8
|
+
* connect to.
|
|
9
|
+
*/
|
|
10
|
+
AlwaysAsk = "AlwaysAsk",
|
|
11
|
+
/**
|
|
12
|
+
* Attempts to connect to known device, otherwise attempts to connect to any
|
|
13
|
+
* allowed devices. If that fails, asks which device to connect to.
|
|
14
|
+
*/
|
|
15
|
+
UseAnyAllowed = "UseAnyAllowed"
|
|
16
|
+
}
|
|
17
|
+
export interface MicrobitWebUSBConnectionOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Determines logging behaviour for events, errors, and logs.
|
|
20
|
+
*/
|
|
21
|
+
logging?: Logging;
|
|
22
|
+
/**
|
|
23
|
+
* Determines how a device should be selected.
|
|
24
|
+
*/
|
|
25
|
+
deviceSelectionMode?: DeviceSelectionMode;
|
|
26
|
+
}
|
|
27
|
+
export interface MicrobitWebUSBConnection extends DeviceConnection<SerialConnectionEventMap> {
|
|
28
|
+
/**
|
|
29
|
+
* Gets micro:bit deviceId.
|
|
30
|
+
*
|
|
31
|
+
* @returns the device id or undefined if there is no connection.
|
|
32
|
+
*/
|
|
33
|
+
getDeviceId(): number | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Sets device request exclusion filters.
|
|
36
|
+
*/
|
|
37
|
+
setRequestDeviceExclusionFilters(exclusionFilters: USBDeviceFilter[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Flash the micro:bit.
|
|
40
|
+
*
|
|
41
|
+
* @param dataSource The data to use.
|
|
42
|
+
* @param options Flash options and progress callback.
|
|
43
|
+
*/
|
|
44
|
+
flash(dataSource: FlashDataSource, options: {}): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Gets micro:bit device.
|
|
47
|
+
*
|
|
48
|
+
* @returns the USB device or undefined if there is no connection.
|
|
49
|
+
*/
|
|
50
|
+
getDevice(): USBDevice | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Resets the micro:bit in software.
|
|
53
|
+
*/
|
|
54
|
+
softwareReset(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A WebUSB connection factory.
|
|
58
|
+
*/
|
|
59
|
+
export declare const createWebUSBConnection: (options?: MicrobitWebUSBConnectionOptions) => MicrobitWebUSBConnection;
|
|
60
|
+
/**
|
|
61
|
+
* Applying WebUSB device filter. Exported for testing.
|
|
62
|
+
* Based on: https://wicg.github.io/webusb/#enumeration
|
|
63
|
+
*/
|
|
64
|
+
export declare const applyDeviceFilters: (device: USBDevice, filters: USBDeviceFilter[], exclusionFilters: USBDeviceFilter[]) => boolean;
|