@microbit/microbit-connection 0.9.0-apps.alpha.14 → 0.9.0-apps.alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/accelerometer-service.js.map +1 -1
- package/build/cjs/accelerometer.js.map +1 -1
- package/build/cjs/async-util.js.map +1 -1
- package/build/cjs/async-util.test.d.ts +1 -0
- package/build/cjs/async-util.test.js +20 -0
- package/build/cjs/async-util.test.js.map +1 -0
- package/build/cjs/availability.js.map +1 -1
- package/build/cjs/bluetooth-device-wrapper.d.ts +15 -1
- package/build/cjs/bluetooth-device-wrapper.js +89 -19
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
- package/build/cjs/bluetooth-profile.d.ts +8 -0
- package/build/cjs/bluetooth-profile.js +6 -0
- package/build/cjs/bluetooth-profile.js.map +1 -1
- package/build/cjs/bluetooth.d.ts +2 -0
- package/build/cjs/bluetooth.js +52 -8
- package/build/cjs/bluetooth.js.map +1 -1
- package/build/cjs/bluetooth.test.d.ts +1 -0
- package/build/cjs/bluetooth.test.js +88 -0
- package/build/cjs/bluetooth.test.js.map +1 -0
- package/build/cjs/board-id.js.map +1 -1
- package/build/cjs/board-serial-info.js.map +1 -1
- package/build/cjs/board-serial-info.test.d.ts +1 -0
- package/build/cjs/board-serial-info.test.js +48 -0
- package/build/cjs/board-serial-info.test.js.map +1 -0
- package/build/cjs/button-service.js.map +1 -1
- package/build/cjs/buttons.js.map +1 -1
- package/build/cjs/constants.js.map +1 -1
- package/build/cjs/device-bond-state.d.ts +14 -0
- package/build/cjs/device-bond-state.js +26 -0
- package/build/cjs/device-bond-state.js.map +1 -0
- package/build/cjs/device-information-service.js.map +1 -1
- package/build/cjs/device.d.ts +2 -2
- package/build/cjs/device.js.map +1 -1
- package/build/cjs/dfu-service.js.map +1 -1
- package/build/cjs/events.js.map +1 -1
- package/build/cjs/events.test.d.ts +1 -0
- package/build/cjs/events.test.js +109 -0
- package/build/cjs/events.test.js.map +1 -0
- package/build/cjs/flashing/flashing-full.js.map +1 -1
- package/build/cjs/flashing/flashing-makecode.d.ts +5 -1
- package/build/cjs/flashing/flashing-makecode.js +5 -2
- package/build/cjs/flashing/flashing-makecode.js.map +1 -1
- package/build/cjs/flashing/flashing-makecode.test.d.ts +1 -0
- package/build/cjs/flashing/flashing-makecode.test.js +253 -0
- package/build/cjs/flashing/flashing-makecode.test.js.map +1 -0
- package/build/cjs/flashing/flashing-partial.d.ts +3 -2
- package/build/cjs/flashing/flashing-partial.js +108 -62
- package/build/cjs/flashing/flashing-partial.js.map +1 -1
- package/build/cjs/flashing/flashing-v1.js.map +1 -1
- package/build/cjs/flashing/nordic-dfu.js +14 -3
- package/build/cjs/flashing/nordic-dfu.js.map +1 -1
- package/build/cjs/flashing/zip.js.map +1 -1
- package/build/cjs/flashing/zip.test.d.ts +1 -0
- package/build/cjs/flashing/zip.test.js +96 -0
- package/build/cjs/flashing/zip.test.js.map +1 -0
- package/build/cjs/hex-flash-data-source.d.ts +1 -0
- package/build/cjs/hex-flash-data-source.js +12 -1
- package/build/cjs/hex-flash-data-source.js.map +1 -1
- package/build/cjs/index.d.ts +2 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/led-service.js.map +1 -1
- package/build/cjs/led.js.map +1 -1
- package/build/cjs/logging.js.map +1 -1
- package/build/cjs/magnetometer-service.js.map +1 -1
- package/build/cjs/magnetometer.js.map +1 -1
- package/build/cjs/partial-flashing-service.js.map +1 -1
- package/build/cjs/promise-queue.js.map +1 -1
- package/build/cjs/promise-queue.test.d.ts +1 -0
- package/build/cjs/promise-queue.test.js +68 -0
- package/build/cjs/promise-queue.test.js.map +1 -0
- package/build/cjs/serial-events.js.map +1 -1
- package/build/cjs/service-events.js.map +1 -1
- package/build/cjs/setupTests.js +8 -0
- package/build/cjs/setupTests.js.map +1 -1
- package/build/cjs/uart-service.js.map +1 -1
- package/build/cjs/uart.js.map +1 -1
- package/build/cjs/usb-device-wrapper.js.map +1 -1
- package/build/cjs/usb-partial-flashing-utils.js.map +1 -1
- package/build/cjs/usb-partial-flashing.js +2 -1
- package/build/cjs/usb-partial-flashing.js.map +1 -1
- package/build/cjs/usb-radio-bridge.js.map +1 -1
- package/build/cjs/usb-serial-protocol.js.map +1 -1
- package/build/cjs/usb.js.map +1 -1
- package/build/cjs/usb.test.d.ts +1 -0
- package/build/cjs/usb.test.js +256 -0
- package/build/cjs/usb.test.js.map +1 -0
- package/build/esm/accelerometer-service.js.map +1 -1
- package/build/esm/accelerometer.js.map +1 -1
- package/build/esm/async-util.js.map +1 -1
- package/build/esm/async-util.test.d.ts +1 -0
- package/build/esm/async-util.test.js +18 -0
- package/build/esm/async-util.test.js.map +1 -0
- package/build/esm/availability.js.map +1 -1
- package/build/esm/bluetooth-device-wrapper.d.ts +15 -1
- package/build/esm/bluetooth-device-wrapper.js +88 -19
- package/build/esm/bluetooth-device-wrapper.js.map +1 -1
- package/build/esm/bluetooth-profile.d.ts +8 -0
- package/build/esm/bluetooth-profile.js +6 -0
- package/build/esm/bluetooth-profile.js.map +1 -1
- package/build/esm/bluetooth.d.ts +2 -0
- package/build/esm/bluetooth.js +52 -8
- package/build/esm/bluetooth.js.map +1 -1
- package/build/esm/bluetooth.test.d.ts +1 -0
- package/build/esm/bluetooth.test.js +86 -0
- package/build/esm/bluetooth.test.js.map +1 -0
- package/build/esm/board-id.js.map +1 -1
- package/build/esm/board-serial-info.js.map +1 -1
- package/build/esm/board-serial-info.test.d.ts +1 -0
- package/build/esm/board-serial-info.test.js +46 -0
- package/build/esm/board-serial-info.test.js.map +1 -0
- package/build/esm/button-service.js.map +1 -1
- package/build/esm/buttons.js.map +1 -1
- package/build/esm/constants.js.map +1 -1
- package/build/esm/device-bond-state.d.ts +14 -0
- package/build/esm/device-bond-state.js +22 -0
- package/build/esm/device-bond-state.js.map +1 -0
- package/build/esm/device-information-service.js.map +1 -1
- package/build/esm/device.d.ts +2 -2
- package/build/esm/device.js.map +1 -1
- package/build/esm/dfu-service.js.map +1 -1
- package/build/esm/events.js.map +1 -1
- package/build/esm/events.test.d.ts +1 -0
- package/build/esm/events.test.js +107 -0
- package/build/esm/events.test.js.map +1 -0
- package/build/esm/flashing/flashing-full.js.map +1 -1
- package/build/esm/flashing/flashing-makecode.d.ts +5 -1
- package/build/esm/flashing/flashing-makecode.js +5 -2
- package/build/esm/flashing/flashing-makecode.js.map +1 -1
- package/build/esm/flashing/flashing-makecode.test.d.ts +1 -0
- package/build/esm/flashing/flashing-makecode.test.js +248 -0
- package/build/esm/flashing/flashing-makecode.test.js.map +1 -0
- package/build/esm/flashing/flashing-partial.d.ts +3 -2
- package/build/esm/flashing/flashing-partial.js +111 -65
- package/build/esm/flashing/flashing-partial.js.map +1 -1
- package/build/esm/flashing/flashing-v1.js.map +1 -1
- package/build/esm/flashing/nordic-dfu.js +14 -3
- package/build/esm/flashing/nordic-dfu.js.map +1 -1
- package/build/esm/flashing/zip.js.map +1 -1
- package/build/esm/flashing/zip.test.d.ts +1 -0
- package/build/esm/flashing/zip.test.js +94 -0
- package/build/esm/flashing/zip.test.js.map +1 -0
- package/build/esm/hex-flash-data-source.d.ts +1 -0
- package/build/esm/hex-flash-data-source.js +10 -0
- package/build/esm/hex-flash-data-source.js.map +1 -1
- package/build/esm/index.d.ts +2 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/led-service.js.map +1 -1
- package/build/esm/led.js.map +1 -1
- package/build/esm/logging.js.map +1 -1
- package/build/esm/magnetometer-service.js.map +1 -1
- package/build/esm/magnetometer.js.map +1 -1
- package/build/esm/partial-flashing-service.js.map +1 -1
- package/build/esm/promise-queue.js.map +1 -1
- package/build/esm/promise-queue.test.d.ts +1 -0
- package/build/esm/promise-queue.test.js +66 -0
- package/build/esm/promise-queue.test.js.map +1 -0
- package/build/esm/serial-events.js.map +1 -1
- package/build/esm/service-events.js.map +1 -1
- package/build/esm/setupTests.js +7 -0
- package/build/esm/setupTests.js.map +1 -1
- package/build/esm/uart-service.js.map +1 -1
- package/build/esm/uart.js.map +1 -1
- package/build/esm/usb-device-wrapper.js.map +1 -1
- package/build/esm/usb-partial-flashing-utils.js.map +1 -1
- package/build/esm/usb-partial-flashing.js +2 -1
- package/build/esm/usb-partial-flashing.js.map +1 -1
- package/build/esm/usb-radio-bridge.js.map +1 -1
- package/build/esm/usb-serial-protocol.js.map +1 -1
- package/build/esm/usb.js.map +1 -1
- package/build/esm/usb.test.d.ts +1 -0
- package/build/esm/usb.test.js +254 -0
- package/build/esm/usb.test.js.map +1 -0
- package/package.json +13 -14
- package/LICENSE.md +0 -21
- package/README.md +0 -125
- package/typedoc.json +0 -14
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (c) 2021, Micro:bit Educational Foundation and contributors
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*
|
|
6
|
+
* @jest-environment node
|
|
7
|
+
*
|
|
8
|
+
* Without node environment USB code fails with a buffer type check.
|
|
9
|
+
* It might be we could create a custom environment that was web but
|
|
10
|
+
* with a tweak to Buffer.
|
|
11
|
+
*/
|
|
12
|
+
import { ConnectionStatus } from "./device.js";
|
|
13
|
+
import { applyDeviceFilters, createWebUSBConnection } from "./usb.js";
|
|
14
|
+
import { beforeAll, beforeEach, expect, vi, describe, it } from "vitest";
|
|
15
|
+
vi.mock("./usb-device-wrapper.js", () => ({
|
|
16
|
+
DAPWrapper: class DapWrapper {
|
|
17
|
+
constructor() {
|
|
18
|
+
Object.defineProperty(this, "startSerial", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: vi.fn().mockReturnValue(Promise.resolve())
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "reconnectAsync", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: vi.fn().mockResolvedValue(undefined)
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(this, "disconnectAsync", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: vi.fn().mockResolvedValue(undefined)
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(this, "stopSerial", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: vi.fn()
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
45
|
+
const describeDeviceOnly = process.env.TEST_MODE_DEVICE
|
|
46
|
+
? describe
|
|
47
|
+
: describe.skip;
|
|
48
|
+
describe("MicrobitWebUSBConnection (WebUSB unsupported)", () => {
|
|
49
|
+
it("checkAvailability returns unsupported when WebUSB isn't available", async () => {
|
|
50
|
+
vi.stubGlobal("navigator", {});
|
|
51
|
+
const microbit = createWebUSBConnection();
|
|
52
|
+
expect(await microbit.checkAvailability()).toBe("unsupported");
|
|
53
|
+
vi.unstubAllGlobals();
|
|
54
|
+
});
|
|
55
|
+
it("still triggers afterrequestdevice if requestDevice throws", async () => {
|
|
56
|
+
vi.stubGlobal("navigator", {
|
|
57
|
+
usb: {
|
|
58
|
+
requestDevice: () => {
|
|
59
|
+
throw new Error();
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const microbit = createWebUSBConnection();
|
|
64
|
+
expect(microbit.status).toBe(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
65
|
+
const afterRequestDevice = vi.fn();
|
|
66
|
+
microbit.addEventListener("afterrequestdevice", afterRequestDevice);
|
|
67
|
+
await expect(() => microbit.connect()).rejects.toThrow();
|
|
68
|
+
expect(afterRequestDevice.mock.calls.length).toEqual(1);
|
|
69
|
+
vi.unstubAllGlobals();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describeDeviceOnly("MicrobitWebUSBConnection (WebUSB supported)", () => {
|
|
73
|
+
beforeAll(() => {
|
|
74
|
+
const usb = {
|
|
75
|
+
addEventListener: vi.fn(),
|
|
76
|
+
removeEventListener: vi.fn(),
|
|
77
|
+
requestDevice() {
|
|
78
|
+
const device = {};
|
|
79
|
+
return device;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
// Maybe we can move this to a custom jest environment?
|
|
83
|
+
vi.stubGlobal("navigator", {
|
|
84
|
+
usb,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it("shows no device as initial status", () => {
|
|
88
|
+
const microbit = createWebUSBConnection();
|
|
89
|
+
expect(microbit.status).toBe(ConnectionStatus.NO_AUTHORIZED_DEVICE);
|
|
90
|
+
});
|
|
91
|
+
it("connects and disconnects updating status and events", async () => {
|
|
92
|
+
const events = [];
|
|
93
|
+
const connection = createWebUSBConnection();
|
|
94
|
+
connection.addEventListener("status", (event) => {
|
|
95
|
+
events.push(event.status);
|
|
96
|
+
});
|
|
97
|
+
await connection.connect();
|
|
98
|
+
expect(connection.status).toEqual(ConnectionStatus.CONNECTED);
|
|
99
|
+
expect(events).toEqual([ConnectionStatus.CONNECTED]);
|
|
100
|
+
// without this it breaks! something is up!
|
|
101
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
102
|
+
await connection.disconnect();
|
|
103
|
+
connection.dispose();
|
|
104
|
+
expect(connection.status).toEqual(ConnectionStatus.DISCONNECTED);
|
|
105
|
+
expect(events).toEqual([
|
|
106
|
+
ConnectionStatus.CONNECTED,
|
|
107
|
+
ConnectionStatus.DISCONNECTED,
|
|
108
|
+
]);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
const mockDevice = (config) => ({
|
|
112
|
+
vendorId: config?.vendorId || 0x2341,
|
|
113
|
+
productId: config?.productId || 0x0043,
|
|
114
|
+
serialNumber: config?.serialNumber || "MOCK123456",
|
|
115
|
+
configuration: {
|
|
116
|
+
interfaces: config?.interfaces || [
|
|
117
|
+
{
|
|
118
|
+
alternates: [
|
|
119
|
+
{
|
|
120
|
+
alternateSetting: 0,
|
|
121
|
+
interfaceClass: config?.interfaceClass || 2,
|
|
122
|
+
interfaceSubclass: config?.interfaceSubclass || 2,
|
|
123
|
+
interfaceProtocol: config?.interfaceProtocol || 0,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
const filter = {
|
|
131
|
+
classCode: 123,
|
|
132
|
+
productId: 456,
|
|
133
|
+
protocolCode: 789,
|
|
134
|
+
serialNumber: "012",
|
|
135
|
+
subclassCode: 345,
|
|
136
|
+
vendorId: 690,
|
|
137
|
+
};
|
|
138
|
+
describe("Tab visibility and PAUSED state", () => {
|
|
139
|
+
let visibilityState = "visible";
|
|
140
|
+
let visibilityListeners = [];
|
|
141
|
+
beforeAll(() => {
|
|
142
|
+
vi.stubGlobal("navigator", {
|
|
143
|
+
usb: {
|
|
144
|
+
addEventListener: vi.fn(),
|
|
145
|
+
removeEventListener: vi.fn(),
|
|
146
|
+
requestDevice: () => ({}),
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
vi.stubGlobal("document", {
|
|
150
|
+
get visibilityState() {
|
|
151
|
+
return visibilityState;
|
|
152
|
+
},
|
|
153
|
+
addEventListener: (_, listener) => {
|
|
154
|
+
visibilityListeners.push(listener);
|
|
155
|
+
},
|
|
156
|
+
removeEventListener: vi.fn(),
|
|
157
|
+
});
|
|
158
|
+
vi.stubGlobal("window", {
|
|
159
|
+
document,
|
|
160
|
+
addEventListener: vi.fn(),
|
|
161
|
+
removeEventListener: vi.fn(),
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
beforeEach(() => {
|
|
165
|
+
visibilityState = "visible";
|
|
166
|
+
visibilityListeners = [];
|
|
167
|
+
});
|
|
168
|
+
const waitForStatus = (connection, status) => new Promise((resolve) => {
|
|
169
|
+
if (connection.status === status) {
|
|
170
|
+
resolve();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const listener = (event) => {
|
|
174
|
+
if (event.status === status) {
|
|
175
|
+
connection.removeEventListener("status", listener);
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
connection.addEventListener("status", listener);
|
|
180
|
+
});
|
|
181
|
+
it("pauses when tab becomes hidden while connected", async () => {
|
|
182
|
+
const connection = createWebUSBConnection();
|
|
183
|
+
await connection.initialize();
|
|
184
|
+
await connection.connect();
|
|
185
|
+
expect(connection.status).toBe(ConnectionStatus.CONNECTED);
|
|
186
|
+
visibilityState = "hidden";
|
|
187
|
+
visibilityListeners.forEach((l) => l());
|
|
188
|
+
await waitForStatus(connection, ConnectionStatus.PAUSED);
|
|
189
|
+
expect(connection.status).toBe(ConnectionStatus.PAUSED);
|
|
190
|
+
});
|
|
191
|
+
it("reconnects when tab becomes visible while paused", async () => {
|
|
192
|
+
const connection = createWebUSBConnection();
|
|
193
|
+
await connection.initialize();
|
|
194
|
+
await connection.connect();
|
|
195
|
+
visibilityState = "hidden";
|
|
196
|
+
visibilityListeners.forEach((l) => l());
|
|
197
|
+
await waitForStatus(connection, ConnectionStatus.PAUSED);
|
|
198
|
+
visibilityState = "visible";
|
|
199
|
+
visibilityListeners.forEach((l) => l());
|
|
200
|
+
await waitForStatus(connection, ConnectionStatus.CONNECTED);
|
|
201
|
+
expect(connection.status).toBe(ConnectionStatus.CONNECTED);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe("applyDevicesFilter", () => {
|
|
205
|
+
it("has no filter", () => {
|
|
206
|
+
const device = mockDevice();
|
|
207
|
+
expect(applyDeviceFilters(device, [], [])).toEqual(true);
|
|
208
|
+
});
|
|
209
|
+
it("satisfies filter", () => {
|
|
210
|
+
const device = mockDevice({
|
|
211
|
+
interfaceClass: filter.classCode,
|
|
212
|
+
productId: filter.productId,
|
|
213
|
+
interfaceProtocol: filter.protocolCode,
|
|
214
|
+
serialNumber: filter.serialNumber,
|
|
215
|
+
interfaceSubclass: filter.subclassCode,
|
|
216
|
+
vendorId: filter.vendorId,
|
|
217
|
+
});
|
|
218
|
+
expect(applyDeviceFilters(device, [filter], [])).toEqual(true);
|
|
219
|
+
});
|
|
220
|
+
it("does not satisfies filter", () => {
|
|
221
|
+
const device = mockDevice({
|
|
222
|
+
interfaceClass: filter.classCode,
|
|
223
|
+
productId: filter.productId,
|
|
224
|
+
interfaceProtocol: filter.protocolCode,
|
|
225
|
+
serialNumber: "something else",
|
|
226
|
+
interfaceSubclass: filter.subclassCode,
|
|
227
|
+
vendorId: filter.vendorId,
|
|
228
|
+
});
|
|
229
|
+
expect(applyDeviceFilters(device, [filter], [])).toEqual(false);
|
|
230
|
+
});
|
|
231
|
+
it("satisfies exclusion filter", () => {
|
|
232
|
+
const device = mockDevice({
|
|
233
|
+
interfaceClass: filter.classCode,
|
|
234
|
+
productId: filter.productId,
|
|
235
|
+
interfaceProtocol: filter.protocolCode,
|
|
236
|
+
serialNumber: filter.serialNumber,
|
|
237
|
+
interfaceSubclass: filter.subclassCode,
|
|
238
|
+
vendorId: filter.vendorId,
|
|
239
|
+
});
|
|
240
|
+
expect(applyDeviceFilters(device, [], [filter])).toEqual(false);
|
|
241
|
+
});
|
|
242
|
+
it("satifies filter and does not satisfy exclusion filter", () => {
|
|
243
|
+
const device = mockDevice({
|
|
244
|
+
interfaceClass: filter.classCode,
|
|
245
|
+
productId: filter.productId,
|
|
246
|
+
interfaceProtocol: filter.protocolCode,
|
|
247
|
+
serialNumber: filter.serialNumber,
|
|
248
|
+
interfaceSubclass: filter.subclassCode,
|
|
249
|
+
vendorId: filter.vendorId,
|
|
250
|
+
});
|
|
251
|
+
expect(applyDeviceFilters(device, [filter], [{ ...filter, serialNumber: "not satisfied" }])).toEqual(true);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
//# sourceMappingURL=usb.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usb.test.js","sourceRoot":"","sources":["../../src/usb.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microbit/microbit-connection",
|
|
3
|
-
"version": "0.9.0-apps.alpha.
|
|
3
|
+
"version": "0.9.0-apps.alpha.16",
|
|
4
4
|
"main": "./build/cjs/index.js",
|
|
5
5
|
"module": "./build/esm/index.js",
|
|
6
6
|
"types": "./build/esm/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"build"
|
|
9
|
+
],
|
|
7
10
|
"exports": {
|
|
8
11
|
".": {
|
|
9
12
|
"import": {
|
|
@@ -17,35 +20,31 @@
|
|
|
17
20
|
}
|
|
18
21
|
},
|
|
19
22
|
"scripts": {
|
|
20
|
-
"dev": "vite",
|
|
21
23
|
"build:esm": "tsc -p tsconfig.json && echo '{\"type\": \"module\"}' > build/esm/package.json",
|
|
22
24
|
"build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > build/cjs/package.json",
|
|
23
25
|
"build:lib": "npm run build:esm && npm run build:cjs",
|
|
24
|
-
"build
|
|
25
|
-
"build": "npm run build:lib && npm run build:demo",
|
|
26
|
+
"build": "npm run build:lib",
|
|
26
27
|
"docs": "typedoc",
|
|
27
|
-
"ci": "npm run build:lib && npm run test
|
|
28
|
-
"test": "vitest"
|
|
29
|
-
"preview": "vite preview"
|
|
28
|
+
"ci": "npm run build:lib && npm run test",
|
|
29
|
+
"test": "vitest"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^20.14.10",
|
|
33
33
|
"jsdom": "^24.1.0",
|
|
34
|
-
"prettier": "3.3.2",
|
|
35
34
|
"typedoc": "^0.27.6",
|
|
36
35
|
"typescript": "^5.2.2",
|
|
37
|
-
"vite": "^6.3.5",
|
|
38
36
|
"vitest": "^3.2.4"
|
|
39
37
|
},
|
|
40
38
|
"dependencies": {
|
|
41
|
-
"@capacitor-community/bluetooth-le": "^7.3.0",
|
|
42
|
-
"@capacitor/core": "^7.4.4",
|
|
43
|
-
"@capacitor/filesystem": "^7.1.6",
|
|
44
|
-
"@microbit/capacitor-community-nordic-dfu": "^7.0.0-microbit.3",
|
|
45
39
|
"@microbit/microbit-universal-hex": "^0.2.2",
|
|
46
40
|
"@types/web-bluetooth": "^0.0.20",
|
|
47
|
-
"crelt": "^1.0.6",
|
|
48
41
|
"dapjs": "^2.3.0",
|
|
49
42
|
"nrf-intel-hex": "^1.4.0"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@capacitor-community/bluetooth-le": "^7.3.0",
|
|
46
|
+
"@capacitor/core": "^7.4.4",
|
|
47
|
+
"@capacitor/filesystem": "^7.1.6",
|
|
48
|
+
"@microbit/capacitor-community-nordic-dfu": "v7.0.0-microbit.4"
|
|
50
49
|
}
|
|
51
50
|
}
|
package/LICENSE.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024-2025 Micro:bit Educational Foundation and contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/README.md
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# micro:bit connection library
|
|
2
|
-
|
|
3
|
-
<a href="https://microbit-foundation.github.io/microbit-connection/" class="typedoc-ignore">This documentation is best viewed on the documentation site rather than GitHub or NPM package site.</a>
|
|
4
|
-
|
|
5
|
-
This is a JavaScript library for micro:bit connections in browsers via USB and Bluetooth.
|
|
6
|
-
|
|
7
|
-
This project is a work in progress. We are extracting WebUSB and Web Bluetooth code from the [micro:bit Python Editor](https://github.com/microbit-foundation/python-editor-v3/) and other projects. The API is not stable and it's not yet recommended that third parties use this project unless they are happy to update usage as the API evolves.
|
|
8
|
-
|
|
9
|
-
[Demo page](https://microbit-connection.pages.dev/) for this library.
|
|
10
|
-
|
|
11
|
-
[Alpha releases are now on NPM](https://www.npmjs.com/package/@microbit/microbit-connection).
|
|
12
|
-
|
|
13
|
-
[micro:bit CreateAI](https://github.com/microbit-foundation/ml-trainer/) is already using this library for WebUSB and Web Bluetooth.
|
|
14
|
-
|
|
15
|
-
[This Python Editor PR](https://github.com/microbit-foundation/python-editor-v3/pull/1190) tracks updating the micro:bit Python Editor to use this library.
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
18
|
-
|
|
19
|
-
### Flash a micro:bit
|
|
20
|
-
|
|
21
|
-
Instantiate a WebUSB connection using {@link createWebUSBConnection} class and use it to connect to a micro:bit.
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
import { createWebUSBConnection } from "@microbit/microbit-connection";
|
|
25
|
-
|
|
26
|
-
const usb = createWebUSBConnection();
|
|
27
|
-
const connectionStatus = await usb.connect();
|
|
28
|
-
|
|
29
|
-
console.log("Connection status: ", connectionStatus);
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
{@link ConnectionStatus | Connection status} is `"CONNECTED"` if connection succeeds.
|
|
33
|
-
|
|
34
|
-
Flash a universal hex that supports both V1 and V2:
|
|
35
|
-
|
|
36
|
-
```ts
|
|
37
|
-
import { createUniversalHexFlashDataSource } from "@microbit/microbit-connection";
|
|
38
|
-
|
|
39
|
-
await usb.flash(createUniversalHexFlashDataSource(universalHexString), {
|
|
40
|
-
partial: true,
|
|
41
|
-
progress: (stage, percentage) => {
|
|
42
|
-
console.log(stage, percentage);
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
This code will also work for non-universal hex files so is a good default for unknown hex files.
|
|
48
|
-
|
|
49
|
-
Alternatively, you can create and flash a hex for a specific micro:bit version by providing a function that takes a {@link BoardVersion} and returns a hex.
|
|
50
|
-
This can reduce download size or help integrate with APIs that produce a hex for a particular device version.
|
|
51
|
-
This example uses the [@microbit/microbit-fs library](https://microbit-foundation.github.io/microbit-fs/) which can return a hex based on board id.
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
import { MicropythonFsHex, microbitBoardId } from "@microbit/microbit-fs";
|
|
55
|
-
import { BoardId } from "@microbit/microbit-connection";
|
|
56
|
-
|
|
57
|
-
const micropythonFs = new MicropythonFsHex([
|
|
58
|
-
{ hex: microPythonV1HexFile, boardId: microbitBoardId.V1 },
|
|
59
|
-
{ hex: microPythonV2HexFile, boardId: microbitBoardId.V2 },
|
|
60
|
-
]);
|
|
61
|
-
// Add files to MicroPython file system here (omitted for simplicity)
|
|
62
|
-
// Flash the device
|
|
63
|
-
await usb.flash(
|
|
64
|
-
async (boardVersion) => {
|
|
65
|
-
const boardId = BoardId.forVersion(boardVersion).id;
|
|
66
|
-
return micropythonFs.getIntelHex(boardId);
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
partial: true,
|
|
70
|
-
progress: (stage, percentage) => {
|
|
71
|
-
console.log(stage, percentage);
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
);
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
For more examples of using other methods in the {@link MicrobitWebUSBConnection} class, see our [demo code](https://github.com/microbit-foundation/microbit-connection/blob/main/src/demo.ts) for our [demo site](https://microbit-connection.pages.dev/).
|
|
78
|
-
|
|
79
|
-
### Connect via Bluetooth
|
|
80
|
-
|
|
81
|
-
By default, the micro:bit's Bluetooth service is not enabled. Visit our [Bluetooth tech site page](https://tech.microbit.org/bluetooth/) to download a hex file that would enable the bluetooth service.
|
|
82
|
-
|
|
83
|
-
Instantiate a Bluetooth connection using {@link createWebBluetoothConnection} class and use it to connect to a micro:bit.
|
|
84
|
-
|
|
85
|
-
```ts
|
|
86
|
-
import { createWebBluetoothConnection } from "@microbit/microbit-connection";
|
|
87
|
-
|
|
88
|
-
const bluetooth = createWebBluetoothConnection();
|
|
89
|
-
const connectionStatus = await bluetooth.connect();
|
|
90
|
-
|
|
91
|
-
console.log("Connection status: ", connectionStatus);
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
{@link ConnectionStatus | Connection status} is `"CONNECTED"` if connection succeeds.
|
|
95
|
-
|
|
96
|
-
For more examples of using other methods in the {@link createWebBluetoothConnection} class, see our [demo code](https://github.com/microbit-foundation/microbit-connection/blob/main/src/demo.ts) for our [demo site](https://microbit-connection.pages.dev/).
|
|
97
|
-
|
|
98
|
-
## License
|
|
99
|
-
|
|
100
|
-
This software is under the MIT open source license.
|
|
101
|
-
|
|
102
|
-
[SPDX-License-Identifier: MIT](LICENSE)
|
|
103
|
-
|
|
104
|
-
We use dependencies via the NPM registry as specified by the package.json file under common Open Source licenses.
|
|
105
|
-
|
|
106
|
-
Full details of each package can be found by running `license-checker`:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
$ npx license-checker --direct --summary --production
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Omit the flags as desired to obtain more detail.
|
|
113
|
-
|
|
114
|
-
## Code of conduct
|
|
115
|
-
|
|
116
|
-
Trust, partnership, simplicity and passion are our core values we live and
|
|
117
|
-
breathe in our daily work life and within our projects. Our open-source
|
|
118
|
-
projects are no exception. We have an active community which spans the globe
|
|
119
|
-
and we welcome and encourage participation and contributions to our projects
|
|
120
|
-
by everyone. We work to foster a positive, open, inclusive and supportive
|
|
121
|
-
environment and trust that our community respects the micro:bit code of
|
|
122
|
-
conduct. Please see our [code of conduct](https://microbit.org/safeguarding/)
|
|
123
|
-
which outlines our expectations for all those that participate in our
|
|
124
|
-
community and details on how to report any concerns and what would happen
|
|
125
|
-
should breaches occur.
|
package/typedoc.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "micro:bit connection library",
|
|
3
|
-
"navigationLinks": {
|
|
4
|
-
"micro:bit tech site": "https://tech.microbit.org",
|
|
5
|
-
"GitHub": "https://github.com/microbit-foundation/microbit-connection"
|
|
6
|
-
},
|
|
7
|
-
"entryPoints": ["./lib/index.ts"],
|
|
8
|
-
"out": "./docs/build",
|
|
9
|
-
"readme": "./README.md",
|
|
10
|
-
"headings": {
|
|
11
|
-
"readme": false
|
|
12
|
-
},
|
|
13
|
-
"customCss": "./docs/custom.css"
|
|
14
|
-
}
|