@microbit/microbit-connection 0.1.0 → 0.9.0-apps.alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/cjs/accelerometer-service.d.ts +5 -5
- package/build/cjs/accelerometer-service.js +41 -42
- package/build/cjs/accelerometer-service.js.map +1 -1
- package/build/cjs/async-util.d.ts +9 -0
- package/build/cjs/async-util.js +27 -7
- package/build/cjs/async-util.js.map +1 -1
- package/build/cjs/bluetooth-device-wrapper.d.ts +61 -27
- package/build/cjs/bluetooth-device-wrapper.js +285 -266
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
- package/build/cjs/bluetooth-profile.d.ts +43 -35
- package/build/cjs/bluetooth-profile.js +35 -29
- package/build/cjs/bluetooth-profile.js.map +1 -1
- package/build/cjs/bluetooth.d.ts +10 -6
- package/build/cjs/bluetooth.js +286 -100
- package/build/cjs/bluetooth.js.map +1 -1
- package/build/cjs/button-service.d.ts +5 -5
- package/build/cjs/button-service.js +31 -45
- package/build/cjs/button-service.js.map +1 -1
- package/build/cjs/device-information-service.d.ts +6 -0
- package/build/cjs/device-information-service.js +34 -0
- package/build/cjs/device-information-service.js.map +1 -0
- package/build/cjs/device.d.ts +65 -8
- package/build/cjs/device.js +16 -2
- package/build/cjs/device.js.map +1 -1
- package/build/cjs/dfu-service.d.ts +9 -0
- package/build/cjs/dfu-service.js +26 -0
- package/build/cjs/dfu-service.js.map +1 -0
- package/build/cjs/flashing/flashing-full.d.ts +14 -0
- package/build/cjs/flashing/flashing-full.js +87 -0
- package/build/cjs/flashing/flashing-full.js.map +1 -0
- package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
- package/build/cjs/flashing/flashing-makecode.js +48 -0
- package/build/cjs/flashing/flashing-makecode.js.map +1 -0
- package/build/cjs/flashing/flashing-partial.d.ts +9 -0
- package/build/cjs/flashing/flashing-partial.js +98 -0
- package/build/cjs/flashing/flashing-partial.js.map +1 -0
- package/build/cjs/flashing/flashing-v1.d.ts +11 -0
- package/build/cjs/flashing/flashing-v1.js +24 -0
- package/build/cjs/flashing/flashing-v1.js.map +1 -0
- package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
- package/build/cjs/flashing/nordic-dfu.js +214 -0
- package/build/cjs/flashing/nordic-dfu.js.map +1 -0
- package/build/cjs/flashing/zip.d.ts +12 -0
- package/build/cjs/flashing/zip.js +177 -0
- package/build/cjs/flashing/zip.js.map +1 -0
- package/build/cjs/index.d.ts +3 -3
- package/build/cjs/index.js +2 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/led-service.d.ts +5 -7
- package/build/cjs/led-service.js +13 -44
- package/build/cjs/led-service.js.map +1 -1
- package/build/cjs/logging.d.ts +1 -1
- package/build/cjs/logging.js +3 -3
- package/build/cjs/logging.js.map +1 -1
- package/build/cjs/magnetometer-service.d.ts +5 -9
- package/build/cjs/magnetometer-service.js +30 -65
- package/build/cjs/magnetometer-service.js.map +1 -1
- package/build/cjs/partial-flashing-service.d.ts +45 -0
- package/build/cjs/partial-flashing-service.js +110 -0
- package/build/cjs/partial-flashing-service.js.map +1 -0
- package/build/cjs/uart-service.d.ts +4 -5
- package/build/cjs/uart-service.js +19 -40
- package/build/cjs/uart-service.js.map +1 -1
- package/build/cjs/usb-device-wrapper.js +33 -8
- package/build/cjs/usb-device-wrapper.js.map +1 -1
- package/build/cjs/usb-partial-flashing.d.ts +1 -3
- package/build/cjs/usb-partial-flashing.js +4 -3
- package/build/cjs/usb-partial-flashing.js.map +1 -1
- package/build/cjs/usb-radio-bridge.js +1 -2
- package/build/cjs/usb-radio-bridge.js.map +1 -1
- package/build/cjs/usb.d.ts +4 -2
- package/build/cjs/usb.js +31 -16
- package/build/cjs/usb.js.map +1 -1
- package/build/esm/accelerometer-service.d.ts +5 -5
- package/build/esm/accelerometer-service.js +42 -43
- package/build/esm/accelerometer-service.js.map +1 -1
- package/build/esm/async-util.d.ts +9 -0
- package/build/esm/async-util.js +22 -6
- package/build/esm/async-util.js.map +1 -1
- package/build/esm/bluetooth-device-wrapper.d.ts +61 -27
- package/build/esm/bluetooth-device-wrapper.js +284 -265
- package/build/esm/bluetooth-device-wrapper.js.map +1 -1
- package/build/esm/bluetooth-profile.d.ts +43 -35
- package/build/esm/bluetooth-profile.js +35 -29
- package/build/esm/bluetooth-profile.js.map +1 -1
- package/build/esm/bluetooth.d.ts +10 -6
- package/build/esm/bluetooth.js +263 -103
- package/build/esm/bluetooth.js.map +1 -1
- package/build/esm/button-service.d.ts +5 -5
- package/build/esm/button-service.js +32 -46
- package/build/esm/button-service.js.map +1 -1
- package/build/esm/device-information-service.d.ts +6 -0
- package/build/esm/device-information-service.js +30 -0
- package/build/esm/device-information-service.js.map +1 -0
- package/build/esm/device.d.ts +65 -8
- package/build/esm/device.js +15 -1
- package/build/esm/device.js.map +1 -1
- package/build/esm/dfu-service.d.ts +9 -0
- package/build/esm/dfu-service.js +22 -0
- package/build/esm/dfu-service.js.map +1 -0
- package/build/esm/flashing/flashing-full.d.ts +14 -0
- package/build/esm/flashing/flashing-full.js +84 -0
- package/build/esm/flashing/flashing-full.js.map +1 -0
- package/build/esm/flashing/flashing-makecode.d.ts +6 -0
- package/build/esm/flashing/flashing-makecode.js +44 -0
- package/build/esm/flashing/flashing-makecode.js.map +1 -0
- package/build/esm/flashing/flashing-partial.d.ts +9 -0
- package/build/esm/flashing/flashing-partial.js +95 -0
- package/build/esm/flashing/flashing-partial.js.map +1 -0
- package/build/esm/flashing/flashing-v1.d.ts +11 -0
- package/build/esm/flashing/flashing-v1.js +20 -0
- package/build/esm/flashing/flashing-v1.js.map +1 -0
- package/build/esm/flashing/nordic-dfu.d.ts +3 -0
- package/build/esm/flashing/nordic-dfu.js +211 -0
- package/build/esm/flashing/nordic-dfu.js.map +1 -0
- package/build/esm/flashing/zip.d.ts +12 -0
- package/build/esm/flashing/zip.js +174 -0
- package/build/esm/flashing/zip.js.map +1 -0
- package/build/esm/index.d.ts +3 -3
- package/build/esm/index.js +2 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/led-service.d.ts +5 -7
- package/build/esm/led-service.js +13 -44
- package/build/esm/led-service.js.map +1 -1
- package/build/esm/logging.d.ts +1 -1
- package/build/esm/logging.js +1 -1
- package/build/esm/logging.js.map +1 -1
- package/build/esm/magnetometer-service.d.ts +5 -9
- package/build/esm/magnetometer-service.js +31 -66
- package/build/esm/magnetometer-service.js.map +1 -1
- package/build/esm/partial-flashing-service.d.ts +45 -0
- package/build/esm/partial-flashing-service.js +106 -0
- package/build/esm/partial-flashing-service.js.map +1 -0
- package/build/esm/uart-service.d.ts +4 -5
- package/build/esm/uart-service.js +19 -40
- package/build/esm/uart-service.js.map +1 -1
- package/build/esm/usb-device-wrapper.js +33 -8
- package/build/esm/usb-device-wrapper.js.map +1 -1
- package/build/esm/usb-partial-flashing.d.ts +1 -3
- package/build/esm/usb-partial-flashing.js +4 -3
- package/build/esm/usb-partial-flashing.js.map +1 -1
- package/build/esm/usb-radio-bridge.js +2 -3
- package/build/esm/usb-radio-bridge.js.map +1 -1
- package/build/esm/usb.d.ts +4 -2
- package/build/esm/usb.js +33 -18
- package/build/esm/usb.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flashDfu = flashDfu;
|
|
4
|
+
const core_1 = require("@capacitor/core");
|
|
5
|
+
const filesystem_1 = require("@capacitor/filesystem");
|
|
6
|
+
const capacitor_community_nordic_dfu_1 = require("@microbit/capacitor-community-nordic-dfu");
|
|
7
|
+
const zip_1 = require("./zip");
|
|
8
|
+
const device_1 = require("../device");
|
|
9
|
+
const appBinFilename = "application.bin";
|
|
10
|
+
const appDatFilename = "application.dat";
|
|
11
|
+
const manifestData = JSON.stringify({
|
|
12
|
+
manifest: {
|
|
13
|
+
application: {
|
|
14
|
+
bin_file: appBinFilename,
|
|
15
|
+
dat_file: appDatFilename,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
function uint8ArrayToBase64(uint8Array) {
|
|
20
|
+
let binary = "";
|
|
21
|
+
const len = uint8Array.byteLength;
|
|
22
|
+
for (let i = 0; i < len; i++) {
|
|
23
|
+
binary += String.fromCharCode(uint8Array[i]);
|
|
24
|
+
}
|
|
25
|
+
return btoa(binary);
|
|
26
|
+
}
|
|
27
|
+
async function writeCacheFile(options) {
|
|
28
|
+
const directory = filesystem_1.Directory.Cache;
|
|
29
|
+
const { uri } = await filesystem_1.Filesystem.writeFile({ directory, ...options });
|
|
30
|
+
return uri;
|
|
31
|
+
}
|
|
32
|
+
async function createDfuZipFile(boardVersion, appBin) {
|
|
33
|
+
const createInitPacket = boardVersion === "V1" ? createLegacyInitPacketV1 : createInitPacketV2;
|
|
34
|
+
const encoder = new TextEncoder();
|
|
35
|
+
const zipData = (0, zip_1.createZip)([
|
|
36
|
+
{ name: appDatFilename, data: createInitPacket(appBin) },
|
|
37
|
+
{ name: appBinFilename, data: appBin },
|
|
38
|
+
{ name: "manifest.json", data: encoder.encode(manifestData) },
|
|
39
|
+
]);
|
|
40
|
+
return await writeCacheFile({
|
|
41
|
+
path: "dfu.zip",
|
|
42
|
+
data: uint8ArrayToBase64(zipData),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async function getFilePath(boardVersion, appBin) {
|
|
46
|
+
const uri = await createDfuZipFile(boardVersion, appBin);
|
|
47
|
+
return { uri, filename: "dfu.zip" };
|
|
48
|
+
}
|
|
49
|
+
async function cleanupTemporaryFile(connection, filename) {
|
|
50
|
+
try {
|
|
51
|
+
await filesystem_1.Filesystem.deleteFile({
|
|
52
|
+
directory: filesystem_1.Directory.Cache,
|
|
53
|
+
path: filename,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
// File might not exist or already deleted, ignore errors
|
|
58
|
+
connection.error(`Could not delete temporary file ${filename}`, error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function flashDfu(connection, boardVersion, appBin, progress) {
|
|
62
|
+
const { device } = connection;
|
|
63
|
+
const { uri: filePath, filename } = await getFilePath(boardVersion, appBin);
|
|
64
|
+
let listener;
|
|
65
|
+
try {
|
|
66
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
67
|
+
await new Promise(async (resolve, reject) => {
|
|
68
|
+
listener = await capacitor_community_nordic_dfu_1.NordicDfu.addListener("DFUStateChanged", ({ state, data }) => {
|
|
69
|
+
switch (state) {
|
|
70
|
+
case capacitor_community_nordic_dfu_1.DfuState.DFU_COMPLETED: {
|
|
71
|
+
progress(device_1.ProgressStage.FullFlashing, 1);
|
|
72
|
+
resolve();
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case capacitor_community_nordic_dfu_1.DfuState.DFU_ABORTED: {
|
|
76
|
+
reject(new device_1.DeviceError({
|
|
77
|
+
code: "flash-cancelled",
|
|
78
|
+
message: "Flash operation was cancelled",
|
|
79
|
+
}));
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case capacitor_community_nordic_dfu_1.DfuState.DFU_PROGRESS: {
|
|
83
|
+
if (typeof data.percent === "number") {
|
|
84
|
+
progress(device_1.ProgressStage.FullFlashing, data.percent / 100);
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case capacitor_community_nordic_dfu_1.DfuState.DFU_FAILED: {
|
|
89
|
+
reject(new device_1.DeviceError({
|
|
90
|
+
code: "flash-full-failed",
|
|
91
|
+
message: "Full flash via DFU failed",
|
|
92
|
+
}));
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
default: {
|
|
96
|
+
connection.log(`DFU state: ${state}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// Note this doesn't await the whole DFU process, just its initialization
|
|
101
|
+
const error = await capacitor_community_nordic_dfu_1.NordicDfu.startDFU({
|
|
102
|
+
deviceName: device.name,
|
|
103
|
+
deviceAddress: device.deviceId,
|
|
104
|
+
filePath,
|
|
105
|
+
dfuOptions: core_1.Capacitor.getPlatform() === "android"
|
|
106
|
+
? {
|
|
107
|
+
...{
|
|
108
|
+
V1: { forceDfu: true },
|
|
109
|
+
V2: {
|
|
110
|
+
unsafeExperimentalButtonlessServiceInSecureDfuEnabled: true,
|
|
111
|
+
disableNotification: true,
|
|
112
|
+
restoreBond: true,
|
|
113
|
+
},
|
|
114
|
+
}[boardVersion],
|
|
115
|
+
startAsForegroundService: false,
|
|
116
|
+
keepBond: true,
|
|
117
|
+
packetReceiptNotificationsEnabled: true,
|
|
118
|
+
}
|
|
119
|
+
: {},
|
|
120
|
+
});
|
|
121
|
+
if (error) {
|
|
122
|
+
connection.error(`DFU Error: ${error.message}`, error);
|
|
123
|
+
reject(new device_1.DeviceError({
|
|
124
|
+
code: "flash-full-failed",
|
|
125
|
+
message: error.message || "Full flash via DFU failed",
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
// Final resolution will come from listener callbacks.
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
await listener?.remove();
|
|
133
|
+
await cleanupTemporaryFile(connection, filename);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const createLegacyInitPacketV1 = (appData) => {
|
|
137
|
+
// Legacy DFU init packet structure for micro:bit V1
|
|
138
|
+
// Based on: dev-type 0xFFFF, dev-revision 0xFFFFFFFF, application-version 0xFFFFFFFF, sd-req 0x64
|
|
139
|
+
const buffer = new ArrayBuffer(14);
|
|
140
|
+
const view = new DataView(buffer);
|
|
141
|
+
const uint8View = new Uint8Array(buffer);
|
|
142
|
+
let offset = 0;
|
|
143
|
+
// Device Type (2 bytes, little-endian) - 0xFFFF (wildcard)
|
|
144
|
+
view.setUint16(offset, 0xffff, true);
|
|
145
|
+
offset += 2;
|
|
146
|
+
// Device Revision (2 bytes, little-endian) - 0xFFFF (wildcard, truncated from 0xFFFFFFFF)
|
|
147
|
+
view.setUint16(offset, 0xffff, true);
|
|
148
|
+
offset += 2;
|
|
149
|
+
// Application Version (4 bytes, little-endian) - 0xFFFFFFFF (wildcard)
|
|
150
|
+
view.setUint32(offset, 0xffffffff, true);
|
|
151
|
+
offset += 4;
|
|
152
|
+
// SoftDevice length (2 bytes, little-endian) - 1 (one SoftDevice requirement)
|
|
153
|
+
view.setUint16(offset, 1, true);
|
|
154
|
+
offset += 2;
|
|
155
|
+
// SoftDevice requirement (2 bytes, little-endian) - 0x0064 (S110 v10.0)
|
|
156
|
+
view.setUint16(offset, 0x0064, true);
|
|
157
|
+
offset += 2;
|
|
158
|
+
// CRC-16 of the application (2 bytes, little-endian)
|
|
159
|
+
const crc16 = calculateCRC16(appData);
|
|
160
|
+
view.setUint16(offset, crc16, true);
|
|
161
|
+
return uint8View;
|
|
162
|
+
};
|
|
163
|
+
const calculateCRC16 = (data) => {
|
|
164
|
+
// CRC-16/CCITT-FALSE (polynomial 0x1021, initial value 0xFFFF)
|
|
165
|
+
let crc = 0xffff;
|
|
166
|
+
for (let i = 0; i < data.length; i++) {
|
|
167
|
+
crc ^= data[i] << 8;
|
|
168
|
+
for (let j = 0; j < 8; j++) {
|
|
169
|
+
if (crc & 0x8000) {
|
|
170
|
+
crc = (crc << 1) ^ 0x1021;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
crc = crc << 1;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return crc & 0xffff;
|
|
178
|
+
};
|
|
179
|
+
const createInitPacketV2 = (appBin) => {
|
|
180
|
+
//typedef struct {
|
|
181
|
+
// uint8_t magic[12]; // identify this struct "microbit_app"
|
|
182
|
+
// uint32_t version; // version of this struct == 1
|
|
183
|
+
// uint32_t app_size; // only used for DFU_FW_TYPE_APPLICATION
|
|
184
|
+
// uint32_t hash_size; // 32 => DFU_HASH_TYPE_SHA256 or zero to bypass hash check
|
|
185
|
+
// uint8_t hash_bytes[32]; // hash of whole DFU download
|
|
186
|
+
//} microbit_dfu_app_t;
|
|
187
|
+
const appSize = appBin.length;
|
|
188
|
+
const magic = "microbit_app";
|
|
189
|
+
const version = 1;
|
|
190
|
+
const hashSize = 0;
|
|
191
|
+
const hash = new Uint8Array(32).fill(0);
|
|
192
|
+
const buffer = new ArrayBuffer(12 + 4 + 4 + 4 + 32); // total: 56 bytes
|
|
193
|
+
const view = new DataView(buffer);
|
|
194
|
+
const uint8View = new Uint8Array(buffer);
|
|
195
|
+
let offset = 0;
|
|
196
|
+
// Write magic string (12 bytes)
|
|
197
|
+
const encoder = new TextEncoder();
|
|
198
|
+
const magicBytes = encoder.encode(magic);
|
|
199
|
+
uint8View.set(magicBytes, offset);
|
|
200
|
+
offset += 12;
|
|
201
|
+
// Write version (4 bytes, little-endian)
|
|
202
|
+
view.setUint32(offset, version, true);
|
|
203
|
+
offset += 4;
|
|
204
|
+
// Write appSize (4 bytes, little-endian)
|
|
205
|
+
view.setUint32(offset, appSize, true);
|
|
206
|
+
offset += 4;
|
|
207
|
+
// Write hashSize (4 bytes, little-endian)
|
|
208
|
+
view.setUint32(offset, hashSize, true);
|
|
209
|
+
offset += 4;
|
|
210
|
+
// Write hash (32 bytes)
|
|
211
|
+
uint8View.set(hash, offset);
|
|
212
|
+
return uint8View;
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=nordic-dfu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nordic-dfu.js","sourceRoot":"","sources":["../../../lib/flashing/nordic-dfu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal ZIP file creator using STORE method (no compression).
|
|
3
|
+
* Sufficient for creating Nordic DFU packages.
|
|
4
|
+
*/
|
|
5
|
+
export interface ZipEntry {
|
|
6
|
+
name: string;
|
|
7
|
+
data: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a ZIP file containing the given entries with no compression.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createZip(entries: ZipEntry[]): Uint8Array;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal ZIP file creator using STORE method (no compression).
|
|
4
|
+
* Sufficient for creating Nordic DFU packages.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createZip = createZip;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a ZIP file containing the given entries with no compression.
|
|
10
|
+
*/
|
|
11
|
+
function createZip(entries) {
|
|
12
|
+
const encoder = new TextEncoder();
|
|
13
|
+
// Calculate total size needed
|
|
14
|
+
let totalSize = 22; // End of central directory
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
const nameBytes = encoder.encode(entry.name);
|
|
17
|
+
totalSize += 30 + nameBytes.length + entry.data.length; // Local file header + data
|
|
18
|
+
totalSize += 46 + nameBytes.length; // Central directory entry
|
|
19
|
+
}
|
|
20
|
+
const buffer = new ArrayBuffer(totalSize);
|
|
21
|
+
const view = new DataView(buffer);
|
|
22
|
+
const bytes = new Uint8Array(buffer);
|
|
23
|
+
let localOffset = 0;
|
|
24
|
+
const centralDirectoryEntries = [];
|
|
25
|
+
// Write local file headers and data
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const nameBytes = encoder.encode(entry.name);
|
|
28
|
+
const crc = crc32(entry.data);
|
|
29
|
+
const fileOffset = localOffset;
|
|
30
|
+
// Local file header signature
|
|
31
|
+
view.setUint32(localOffset, 0x04034b50, true);
|
|
32
|
+
localOffset += 4;
|
|
33
|
+
// Version needed to extract (2.0)
|
|
34
|
+
view.setUint16(localOffset, 20, true);
|
|
35
|
+
localOffset += 2;
|
|
36
|
+
// General purpose bit flag
|
|
37
|
+
view.setUint16(localOffset, 0, true);
|
|
38
|
+
localOffset += 2;
|
|
39
|
+
// Compression method (0 = STORE)
|
|
40
|
+
view.setUint16(localOffset, 0, true);
|
|
41
|
+
localOffset += 2;
|
|
42
|
+
// Last mod file time (0)
|
|
43
|
+
view.setUint16(localOffset, 0, true);
|
|
44
|
+
localOffset += 2;
|
|
45
|
+
// Last mod file date (0)
|
|
46
|
+
view.setUint16(localOffset, 0, true);
|
|
47
|
+
localOffset += 2;
|
|
48
|
+
// CRC-32
|
|
49
|
+
view.setUint32(localOffset, crc, true);
|
|
50
|
+
localOffset += 4;
|
|
51
|
+
// Compressed size (same as uncompressed for STORE)
|
|
52
|
+
view.setUint32(localOffset, entry.data.length, true);
|
|
53
|
+
localOffset += 4;
|
|
54
|
+
// Uncompressed size
|
|
55
|
+
view.setUint32(localOffset, entry.data.length, true);
|
|
56
|
+
localOffset += 4;
|
|
57
|
+
// File name length
|
|
58
|
+
view.setUint16(localOffset, nameBytes.length, true);
|
|
59
|
+
localOffset += 2;
|
|
60
|
+
// Extra field length
|
|
61
|
+
view.setUint16(localOffset, 0, true);
|
|
62
|
+
localOffset += 2;
|
|
63
|
+
// File name
|
|
64
|
+
bytes.set(nameBytes, localOffset);
|
|
65
|
+
localOffset += nameBytes.length;
|
|
66
|
+
// File data
|
|
67
|
+
bytes.set(entry.data, localOffset);
|
|
68
|
+
localOffset += entry.data.length;
|
|
69
|
+
centralDirectoryEntries.push({
|
|
70
|
+
nameBytes,
|
|
71
|
+
crc,
|
|
72
|
+
size: entry.data.length,
|
|
73
|
+
offset: fileOffset,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const centralDirectoryOffset = localOffset;
|
|
77
|
+
// Write central directory
|
|
78
|
+
for (const entry of centralDirectoryEntries) {
|
|
79
|
+
// Central file header signature
|
|
80
|
+
view.setUint32(localOffset, 0x02014b50, true);
|
|
81
|
+
localOffset += 4;
|
|
82
|
+
// Version made by (2.0, DOS)
|
|
83
|
+
view.setUint16(localOffset, 20, true);
|
|
84
|
+
localOffset += 2;
|
|
85
|
+
// Version needed to extract (2.0)
|
|
86
|
+
view.setUint16(localOffset, 20, true);
|
|
87
|
+
localOffset += 2;
|
|
88
|
+
// General purpose bit flag
|
|
89
|
+
view.setUint16(localOffset, 0, true);
|
|
90
|
+
localOffset += 2;
|
|
91
|
+
// Compression method (0 = STORE)
|
|
92
|
+
view.setUint16(localOffset, 0, true);
|
|
93
|
+
localOffset += 2;
|
|
94
|
+
// Last mod file time
|
|
95
|
+
view.setUint16(localOffset, 0, true);
|
|
96
|
+
localOffset += 2;
|
|
97
|
+
// Last mod file date
|
|
98
|
+
view.setUint16(localOffset, 0, true);
|
|
99
|
+
localOffset += 2;
|
|
100
|
+
// CRC-32
|
|
101
|
+
view.setUint32(localOffset, entry.crc, true);
|
|
102
|
+
localOffset += 4;
|
|
103
|
+
// Compressed size
|
|
104
|
+
view.setUint32(localOffset, entry.size, true);
|
|
105
|
+
localOffset += 4;
|
|
106
|
+
// Uncompressed size
|
|
107
|
+
view.setUint32(localOffset, entry.size, true);
|
|
108
|
+
localOffset += 4;
|
|
109
|
+
// File name length
|
|
110
|
+
view.setUint16(localOffset, entry.nameBytes.length, true);
|
|
111
|
+
localOffset += 2;
|
|
112
|
+
// Extra field length
|
|
113
|
+
view.setUint16(localOffset, 0, true);
|
|
114
|
+
localOffset += 2;
|
|
115
|
+
// File comment length
|
|
116
|
+
view.setUint16(localOffset, 0, true);
|
|
117
|
+
localOffset += 2;
|
|
118
|
+
// Disk number start
|
|
119
|
+
view.setUint16(localOffset, 0, true);
|
|
120
|
+
localOffset += 2;
|
|
121
|
+
// Internal file attributes
|
|
122
|
+
view.setUint16(localOffset, 0, true);
|
|
123
|
+
localOffset += 2;
|
|
124
|
+
// External file attributes
|
|
125
|
+
view.setUint32(localOffset, 0, true);
|
|
126
|
+
localOffset += 4;
|
|
127
|
+
// Relative offset of local header
|
|
128
|
+
view.setUint32(localOffset, entry.offset, true);
|
|
129
|
+
localOffset += 4;
|
|
130
|
+
// File name
|
|
131
|
+
bytes.set(entry.nameBytes, localOffset);
|
|
132
|
+
localOffset += entry.nameBytes.length;
|
|
133
|
+
}
|
|
134
|
+
const centralDirectorySize = localOffset - centralDirectoryOffset;
|
|
135
|
+
// End of central directory record
|
|
136
|
+
// Signature
|
|
137
|
+
view.setUint32(localOffset, 0x06054b50, true);
|
|
138
|
+
localOffset += 4;
|
|
139
|
+
// Number of this disk
|
|
140
|
+
view.setUint16(localOffset, 0, true);
|
|
141
|
+
localOffset += 2;
|
|
142
|
+
// Disk where central directory starts
|
|
143
|
+
view.setUint16(localOffset, 0, true);
|
|
144
|
+
localOffset += 2;
|
|
145
|
+
// Number of central directory records on this disk
|
|
146
|
+
view.setUint16(localOffset, entries.length, true);
|
|
147
|
+
localOffset += 2;
|
|
148
|
+
// Total number of central directory records
|
|
149
|
+
view.setUint16(localOffset, entries.length, true);
|
|
150
|
+
localOffset += 2;
|
|
151
|
+
// Size of central directory
|
|
152
|
+
view.setUint32(localOffset, centralDirectorySize, true);
|
|
153
|
+
localOffset += 4;
|
|
154
|
+
// Offset of start of central directory
|
|
155
|
+
view.setUint32(localOffset, centralDirectoryOffset, true);
|
|
156
|
+
localOffset += 4;
|
|
157
|
+
// Comment length
|
|
158
|
+
view.setUint16(localOffset, 0, true);
|
|
159
|
+
return bytes;
|
|
160
|
+
}
|
|
161
|
+
// CRC-32 lookup table
|
|
162
|
+
const crc32Table = new Uint32Array(256);
|
|
163
|
+
for (let i = 0; i < 256; i++) {
|
|
164
|
+
let c = i;
|
|
165
|
+
for (let j = 0; j < 8; j++) {
|
|
166
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
167
|
+
}
|
|
168
|
+
crc32Table[i] = c;
|
|
169
|
+
}
|
|
170
|
+
function crc32(data) {
|
|
171
|
+
let crc = 0xffffffff;
|
|
172
|
+
for (let i = 0; i < data.length; i++) {
|
|
173
|
+
crc = crc32Table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
|
|
174
|
+
}
|
|
175
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=zip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../lib/flashing/zip.ts"],"names":[],"mappings":"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"}
|
package/build/cjs/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AccelerometerData, AccelerometerDataEvent } from "./accelerometer.js";
|
|
|
2
2
|
import { createWebBluetoothConnection, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions } from "./bluetooth.js";
|
|
3
3
|
import { BoardId } from "./board-id.js";
|
|
4
4
|
import { ButtonEvent, ButtonEventType, ButtonState } from "./buttons.js";
|
|
5
|
-
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardVersion, ConnectionStatus, ConnectionStatusEvent, DeviceConnection, DeviceConnectionEventMap, DeviceError, DeviceErrorCode, FlashDataError, FlashDataSource, FlashOptions } from "./device.js";
|
|
5
|
+
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardVersion, ConnectOptions, ConnectionStatus, ConnectionStatusEvent, DeviceConnection, DeviceConnectionEventMap, DeviceError, DeviceErrorCode, FlashDataError, FlashDataSource, FlashOptions, ProgressCallback, ProgressStage } from "./device.js";
|
|
6
6
|
import { TypedEventTarget } from "./events.js";
|
|
7
7
|
import { createUniversalHexFlashDataSource } from "./hex-flash-data-source.js";
|
|
8
8
|
import { LedMatrix } from "./led.js";
|
|
@@ -13,5 +13,5 @@ import { ServiceConnectionEventMap } from "./service-events.js";
|
|
|
13
13
|
import { UARTDataEvent } from "./uart.js";
|
|
14
14
|
import { createRadioBridgeConnection, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions } from "./usb-radio-bridge.js";
|
|
15
15
|
import { createWebUSBConnection, DeviceSelectionMode, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions } from "./usb.js";
|
|
16
|
-
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
17
|
-
export type { AccelerometerData, AccelerometerDataEvent, BoardVersion, ButtonEvent, ButtonEventType, ButtonState, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, LedMatrix, Logging, LoggingEvent, MagnetometerData, MagnetometerDataEvent, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions, };
|
|
16
|
+
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, ProgressStage, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
17
|
+
export type { AccelerometerData, AccelerometerDataEvent, BoardVersion, ButtonEvent, ButtonEventType, ButtonState, ConnectOptions, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, LedMatrix, Logging, LoggingEvent, MagnetometerData, MagnetometerDataEvent, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions, ProgressCallback, };
|
package/build/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UARTDataEvent = exports.TypedEventTarget = exports.ServiceConnectionEventMap = exports.SerialResetEvent = exports.SerialErrorEvent = exports.SerialDataEvent = exports.SerialConnectionEventMap = exports.FlashEvent = exports.FlashDataError = exports.DeviceError = exports.DeviceSelectionMode = exports.DeviceConnectionEventMap = exports.createWebUSBConnection = exports.createWebBluetoothConnection = exports.createUniversalHexFlashDataSource = exports.createRadioBridgeConnection = exports.ConnectionStatusEvent = exports.ConnectionStatus = exports.BoardId = exports.BeforeRequestDevice = exports.BackgroundErrorEvent = exports.AfterRequestDevice = void 0;
|
|
3
|
+
exports.UARTDataEvent = exports.TypedEventTarget = exports.ServiceConnectionEventMap = exports.SerialResetEvent = exports.SerialErrorEvent = exports.SerialDataEvent = exports.SerialConnectionEventMap = exports.ProgressStage = exports.FlashEvent = exports.FlashDataError = exports.DeviceError = exports.DeviceSelectionMode = exports.DeviceConnectionEventMap = exports.createWebUSBConnection = exports.createWebBluetoothConnection = exports.createUniversalHexFlashDataSource = exports.createRadioBridgeConnection = exports.ConnectionStatusEvent = exports.ConnectionStatus = exports.BoardId = exports.BeforeRequestDevice = exports.BackgroundErrorEvent = exports.AfterRequestDevice = void 0;
|
|
4
4
|
const bluetooth_js_1 = require("./bluetooth.js");
|
|
5
5
|
Object.defineProperty(exports, "createWebBluetoothConnection", { enumerable: true, get: function () { return bluetooth_js_1.createWebBluetoothConnection; } });
|
|
6
6
|
const board_id_js_1 = require("./board-id.js");
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "ConnectionStatusEvent", { enumerable: true, get:
|
|
|
14
14
|
Object.defineProperty(exports, "DeviceConnectionEventMap", { enumerable: true, get: function () { return device_js_1.DeviceConnectionEventMap; } });
|
|
15
15
|
Object.defineProperty(exports, "DeviceError", { enumerable: true, get: function () { return device_js_1.DeviceError; } });
|
|
16
16
|
Object.defineProperty(exports, "FlashDataError", { enumerable: true, get: function () { return device_js_1.FlashDataError; } });
|
|
17
|
+
Object.defineProperty(exports, "ProgressStage", { enumerable: true, get: function () { return device_js_1.ProgressStage; } });
|
|
17
18
|
const events_js_1 = require("./events.js");
|
|
18
19
|
Object.defineProperty(exports, "TypedEventTarget", { enumerable: true, get: function () { return events_js_1.TypedEventTarget; } });
|
|
19
20
|
const hex_flash_data_source_js_1 = require("./hex-flash-data-source.js");
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;AACA,iDAIwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;AACA,iDAIwB;AAwDtB,6GA3DA,2CAA4B,OA2DA;AAvD9B,+CAAwC;AAkDtC,wFAlDO,qBAAO,OAkDP;AAhDT,2CAiBqB;AA4BnB,mGA5CA,8BAAkB,OA4CA;AAClB,qGA5CA,gCAAoB,OA4CA;AACpB,oGA5CA,+BAAmB,OA4CA;AAEnB,iGA3CA,4BAAgB,OA2CA;AAChB,sGA3CA,iCAAqB,OA2CA;AAKrB,yGA9CA,oCAAwB,OA8CA;AAExB,4FA/CA,uBAAW,OA+CA;AACX,+FA9CA,0BAAc,OA8CA;AAEd,8FA5CA,yBAAa,OA4CA;AA1Cf,2CAA+C;AAgD7C,iGAhDO,4BAAgB,OAgDP;AA/ClB,yEAA+E;AAiC7E,kHAjCO,4DAAiC,OAiCP;AA7BnC,yDAM4B;AA8B1B,2FAnCA,6BAAU,OAmCA;AAEV,yGApCA,2CAAwB,OAoCA;AACxB,gGApCA,kCAAe,OAoCA;AACf,iGApCA,mCAAgB,OAoCA;AAChB,iGApCA,mCAAgB,OAoCA;AAlClB,2DAAgE;AAmC9D,0GAnCO,6CAAyB,OAmCP;AAlC3B,uCAA0C;AAoCxC,8FApCO,uBAAa,OAoCP;AAnCf,+DAI+B;AAe7B,4GAlBA,iDAA2B,OAkBA;AAd7B,qCAKkB;AAYhB,uGAhBA,+BAAsB,OAgBA;AAEtB,oGAjBA,4BAAmB,OAiBA"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Service } from "./bluetooth-device-wrapper.js";
|
|
2
2
|
import { LedMatrix } from "./led.js";
|
|
3
|
-
import { TypedServiceEvent
|
|
3
|
+
import { TypedServiceEvent } from "./service-events.js";
|
|
4
4
|
export declare class LedService implements Service {
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
constructor(matrixStateCharacteristic: BluetoothRemoteGATTCharacteristic, scrollingDelayCharacteristic: BluetoothRemoteGATTCharacteristic, textCharactertistic: BluetoothRemoteGATTCharacteristic, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>);
|
|
10
|
-
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<LedService | undefined>;
|
|
5
|
+
private deviceId;
|
|
6
|
+
uuid: string;
|
|
7
|
+
constructor(deviceId: string);
|
|
8
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
11
9
|
getLedMatrix(): Promise<LedMatrix>;
|
|
12
10
|
setLedMatrix(value: LedMatrix): Promise<void>;
|
|
13
11
|
private dataViewToLedMatrix;
|
package/build/cjs/led-service.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LedService = void 0;
|
|
4
|
+
const bluetooth_le_1 = require("@capacitor-community/bluetooth-le");
|
|
4
5
|
const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
|
|
5
|
-
const device_js_1 = require("./device.js");
|
|
6
6
|
const createLedMatrix = () => {
|
|
7
7
|
return [
|
|
8
8
|
[false, false, false, false, false],
|
|
@@ -13,61 +13,30 @@ const createLedMatrix = () => {
|
|
|
13
13
|
];
|
|
14
14
|
};
|
|
15
15
|
class LedService {
|
|
16
|
-
constructor(
|
|
17
|
-
Object.defineProperty(this, "
|
|
16
|
+
constructor(deviceId) {
|
|
17
|
+
Object.defineProperty(this, "deviceId", {
|
|
18
18
|
enumerable: true,
|
|
19
19
|
configurable: true,
|
|
20
20
|
writable: true,
|
|
21
|
-
value:
|
|
21
|
+
value: deviceId
|
|
22
22
|
});
|
|
23
|
-
Object.defineProperty(this, "
|
|
23
|
+
Object.defineProperty(this, "uuid", {
|
|
24
24
|
enumerable: true,
|
|
25
25
|
configurable: true,
|
|
26
26
|
writable: true,
|
|
27
|
-
value:
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(this, "textCharactertistic", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: textCharactertistic
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(this, "queueGattOperation", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: queueGattOperation
|
|
27
|
+
value: bluetooth_profile_js_1.profile.led.id
|
|
40
28
|
});
|
|
41
29
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
ledService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.led.id);
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
if (listenerInit) {
|
|
49
|
-
dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
throw new device_js_1.DeviceError({
|
|
54
|
-
code: "service-missing",
|
|
55
|
-
message: err,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const matrixStateCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.matrixState.id);
|
|
60
|
-
const scrollingDelayCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.scrollingDelay.id);
|
|
61
|
-
const textCharacteristic = await ledService.getCharacteristic(bluetooth_profile_js_1.profile.led.characteristics.text.id);
|
|
62
|
-
return new LedService(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharacteristic, queueGattOperation);
|
|
30
|
+
getRelevantEvents() {
|
|
31
|
+
return [];
|
|
63
32
|
}
|
|
64
33
|
async getLedMatrix() {
|
|
65
|
-
const dataView = await this.
|
|
34
|
+
const dataView = await bluetooth_le_1.BleClient.read(this.deviceId, bluetooth_profile_js_1.profile.led.id, bluetooth_profile_js_1.profile.led.characteristics.matrixState.id);
|
|
66
35
|
return this.dataViewToLedMatrix(dataView);
|
|
67
36
|
}
|
|
68
37
|
async setLedMatrix(value) {
|
|
69
38
|
const dataView = this.ledMatrixToDataView(value);
|
|
70
|
-
|
|
39
|
+
await bluetooth_le_1.BleClient.write(this.deviceId, bluetooth_profile_js_1.profile.led.id, bluetooth_profile_js_1.profile.led.characteristics.matrixState.id, dataView);
|
|
71
40
|
}
|
|
72
41
|
dataViewToLedMatrix(dataView) {
|
|
73
42
|
if (dataView.byteLength !== 5) {
|
|
@@ -102,15 +71,15 @@ class LedService {
|
|
|
102
71
|
if (bytes.length > 20) {
|
|
103
72
|
throw new Error("Text must be <= 20 bytes when encoded as UTF-8");
|
|
104
73
|
}
|
|
105
|
-
|
|
74
|
+
await bluetooth_le_1.BleClient.write(this.deviceId, bluetooth_profile_js_1.profile.led.id, bluetooth_profile_js_1.profile.led.characteristics.text.id, new DataView(bytes.buffer));
|
|
106
75
|
}
|
|
107
76
|
async setScrollingDelay(value) {
|
|
108
77
|
const dataView = new DataView(new ArrayBuffer(2));
|
|
109
78
|
dataView.setUint16(0, value, true);
|
|
110
|
-
|
|
79
|
+
await bluetooth_le_1.BleClient.write(this.deviceId, bluetooth_profile_js_1.profile.led.id, bluetooth_profile_js_1.profile.led.characteristics.scrollingDelay.id, dataView);
|
|
111
80
|
}
|
|
112
81
|
async getScrollingDelay() {
|
|
113
|
-
const dataView = await this.
|
|
82
|
+
const dataView = await bluetooth_le_1.BleClient.read(this.deviceId, bluetooth_profile_js_1.profile.led.id, bluetooth_profile_js_1.profile.led.characteristics.scrollingDelay.id);
|
|
114
83
|
return dataView.getUint16(0, true);
|
|
115
84
|
}
|
|
116
85
|
async startNotifications(type) { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"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"}
|
package/build/cjs/logging.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface Logging {
|
|
|
14
14
|
error(message: string, e: unknown): void;
|
|
15
15
|
log(e: any): void;
|
|
16
16
|
}
|
|
17
|
-
export declare class
|
|
17
|
+
export declare class ConsoleLogging implements Logging {
|
|
18
18
|
event(_event: LoggingEvent): void;
|
|
19
19
|
error(_m: string, _e: unknown): void;
|
|
20
20
|
log(_e: any): void;
|
package/build/cjs/logging.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.ConsoleLogging = void 0;
|
|
4
|
+
class ConsoleLogging {
|
|
5
5
|
event(_event) {
|
|
6
6
|
console.log(_event);
|
|
7
7
|
}
|
|
@@ -12,5 +12,5 @@ class NullLogging {
|
|
|
12
12
|
console.log(_e);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
exports.
|
|
15
|
+
exports.ConsoleLogging = ConsoleLogging;
|
|
16
16
|
//# sourceMappingURL=logging.js.map
|