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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +4 -4
  2. package/build/cjs/accelerometer-service.d.ts +5 -5
  3. package/build/cjs/accelerometer-service.js +41 -42
  4. package/build/cjs/accelerometer-service.js.map +1 -1
  5. package/build/cjs/async-util.d.ts +9 -0
  6. package/build/cjs/async-util.js +27 -7
  7. package/build/cjs/async-util.js.map +1 -1
  8. package/build/cjs/bluetooth-device-wrapper.d.ts +61 -27
  9. package/build/cjs/bluetooth-device-wrapper.js +285 -266
  10. package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
  11. package/build/cjs/bluetooth-profile.d.ts +43 -35
  12. package/build/cjs/bluetooth-profile.js +35 -29
  13. package/build/cjs/bluetooth-profile.js.map +1 -1
  14. package/build/cjs/bluetooth.d.ts +10 -6
  15. package/build/cjs/bluetooth.js +286 -100
  16. package/build/cjs/bluetooth.js.map +1 -1
  17. package/build/cjs/button-service.d.ts +5 -5
  18. package/build/cjs/button-service.js +31 -45
  19. package/build/cjs/button-service.js.map +1 -1
  20. package/build/cjs/device-information-service.d.ts +6 -0
  21. package/build/cjs/device-information-service.js +34 -0
  22. package/build/cjs/device-information-service.js.map +1 -0
  23. package/build/cjs/device.d.ts +65 -8
  24. package/build/cjs/device.js +16 -2
  25. package/build/cjs/device.js.map +1 -1
  26. package/build/cjs/dfu-service.d.ts +9 -0
  27. package/build/cjs/dfu-service.js +26 -0
  28. package/build/cjs/dfu-service.js.map +1 -0
  29. package/build/cjs/flashing/flashing-full.d.ts +14 -0
  30. package/build/cjs/flashing/flashing-full.js +87 -0
  31. package/build/cjs/flashing/flashing-full.js.map +1 -0
  32. package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
  33. package/build/cjs/flashing/flashing-makecode.js +48 -0
  34. package/build/cjs/flashing/flashing-makecode.js.map +1 -0
  35. package/build/cjs/flashing/flashing-partial.d.ts +9 -0
  36. package/build/cjs/flashing/flashing-partial.js +98 -0
  37. package/build/cjs/flashing/flashing-partial.js.map +1 -0
  38. package/build/cjs/flashing/flashing-v1.d.ts +11 -0
  39. package/build/cjs/flashing/flashing-v1.js +24 -0
  40. package/build/cjs/flashing/flashing-v1.js.map +1 -0
  41. package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
  42. package/build/cjs/flashing/nordic-dfu.js +214 -0
  43. package/build/cjs/flashing/nordic-dfu.js.map +1 -0
  44. package/build/cjs/flashing/zip.d.ts +12 -0
  45. package/build/cjs/flashing/zip.js +177 -0
  46. package/build/cjs/flashing/zip.js.map +1 -0
  47. package/build/cjs/index.d.ts +3 -3
  48. package/build/cjs/index.js +2 -1
  49. package/build/cjs/index.js.map +1 -1
  50. package/build/cjs/led-service.d.ts +5 -7
  51. package/build/cjs/led-service.js +13 -44
  52. package/build/cjs/led-service.js.map +1 -1
  53. package/build/cjs/logging.d.ts +1 -1
  54. package/build/cjs/logging.js +3 -3
  55. package/build/cjs/logging.js.map +1 -1
  56. package/build/cjs/magnetometer-service.d.ts +5 -9
  57. package/build/cjs/magnetometer-service.js +30 -65
  58. package/build/cjs/magnetometer-service.js.map +1 -1
  59. package/build/cjs/partial-flashing-service.d.ts +45 -0
  60. package/build/cjs/partial-flashing-service.js +110 -0
  61. package/build/cjs/partial-flashing-service.js.map +1 -0
  62. package/build/cjs/uart-service.d.ts +4 -5
  63. package/build/cjs/uart-service.js +19 -40
  64. package/build/cjs/uart-service.js.map +1 -1
  65. package/build/cjs/usb-device-wrapper.js +33 -8
  66. package/build/cjs/usb-device-wrapper.js.map +1 -1
  67. package/build/cjs/usb-partial-flashing.d.ts +1 -3
  68. package/build/cjs/usb-partial-flashing.js +4 -3
  69. package/build/cjs/usb-partial-flashing.js.map +1 -1
  70. package/build/cjs/usb-radio-bridge.js +1 -2
  71. package/build/cjs/usb-radio-bridge.js.map +1 -1
  72. package/build/cjs/usb.d.ts +4 -2
  73. package/build/cjs/usb.js +31 -16
  74. package/build/cjs/usb.js.map +1 -1
  75. package/build/esm/accelerometer-service.d.ts +5 -5
  76. package/build/esm/accelerometer-service.js +42 -43
  77. package/build/esm/accelerometer-service.js.map +1 -1
  78. package/build/esm/async-util.d.ts +9 -0
  79. package/build/esm/async-util.js +22 -6
  80. package/build/esm/async-util.js.map +1 -1
  81. package/build/esm/bluetooth-device-wrapper.d.ts +61 -27
  82. package/build/esm/bluetooth-device-wrapper.js +284 -265
  83. package/build/esm/bluetooth-device-wrapper.js.map +1 -1
  84. package/build/esm/bluetooth-profile.d.ts +43 -35
  85. package/build/esm/bluetooth-profile.js +35 -29
  86. package/build/esm/bluetooth-profile.js.map +1 -1
  87. package/build/esm/bluetooth.d.ts +10 -6
  88. package/build/esm/bluetooth.js +263 -103
  89. package/build/esm/bluetooth.js.map +1 -1
  90. package/build/esm/button-service.d.ts +5 -5
  91. package/build/esm/button-service.js +32 -46
  92. package/build/esm/button-service.js.map +1 -1
  93. package/build/esm/device-information-service.d.ts +6 -0
  94. package/build/esm/device-information-service.js +30 -0
  95. package/build/esm/device-information-service.js.map +1 -0
  96. package/build/esm/device.d.ts +65 -8
  97. package/build/esm/device.js +15 -1
  98. package/build/esm/device.js.map +1 -1
  99. package/build/esm/dfu-service.d.ts +9 -0
  100. package/build/esm/dfu-service.js +22 -0
  101. package/build/esm/dfu-service.js.map +1 -0
  102. package/build/esm/flashing/flashing-full.d.ts +14 -0
  103. package/build/esm/flashing/flashing-full.js +84 -0
  104. package/build/esm/flashing/flashing-full.js.map +1 -0
  105. package/build/esm/flashing/flashing-makecode.d.ts +6 -0
  106. package/build/esm/flashing/flashing-makecode.js +44 -0
  107. package/build/esm/flashing/flashing-makecode.js.map +1 -0
  108. package/build/esm/flashing/flashing-partial.d.ts +9 -0
  109. package/build/esm/flashing/flashing-partial.js +95 -0
  110. package/build/esm/flashing/flashing-partial.js.map +1 -0
  111. package/build/esm/flashing/flashing-v1.d.ts +11 -0
  112. package/build/esm/flashing/flashing-v1.js +20 -0
  113. package/build/esm/flashing/flashing-v1.js.map +1 -0
  114. package/build/esm/flashing/nordic-dfu.d.ts +3 -0
  115. package/build/esm/flashing/nordic-dfu.js +211 -0
  116. package/build/esm/flashing/nordic-dfu.js.map +1 -0
  117. package/build/esm/flashing/zip.d.ts +12 -0
  118. package/build/esm/flashing/zip.js +174 -0
  119. package/build/esm/flashing/zip.js.map +1 -0
  120. package/build/esm/index.d.ts +3 -3
  121. package/build/esm/index.js +2 -2
  122. package/build/esm/index.js.map +1 -1
  123. package/build/esm/led-service.d.ts +5 -7
  124. package/build/esm/led-service.js +13 -44
  125. package/build/esm/led-service.js.map +1 -1
  126. package/build/esm/logging.d.ts +1 -1
  127. package/build/esm/logging.js +1 -1
  128. package/build/esm/logging.js.map +1 -1
  129. package/build/esm/magnetometer-service.d.ts +5 -9
  130. package/build/esm/magnetometer-service.js +31 -66
  131. package/build/esm/magnetometer-service.js.map +1 -1
  132. package/build/esm/partial-flashing-service.d.ts +45 -0
  133. package/build/esm/partial-flashing-service.js +106 -0
  134. package/build/esm/partial-flashing-service.js.map +1 -0
  135. package/build/esm/uart-service.d.ts +4 -5
  136. package/build/esm/uart-service.js +19 -40
  137. package/build/esm/uart-service.js.map +1 -1
  138. package/build/esm/usb-device-wrapper.js +33 -8
  139. package/build/esm/usb-device-wrapper.js.map +1 -1
  140. package/build/esm/usb-partial-flashing.d.ts +1 -3
  141. package/build/esm/usb-partial-flashing.js +4 -3
  142. package/build/esm/usb-partial-flashing.js.map +1 -1
  143. package/build/esm/usb-radio-bridge.js +2 -3
  144. package/build/esm/usb-radio-bridge.js.map +1 -1
  145. package/build/esm/usb.d.ts +4 -2
  146. package/build/esm/usb.js +33 -18
  147. package/build/esm/usb.js.map +1 -1
  148. package/package.json +5 -1
@@ -0,0 +1,211 @@
1
+ import { Capacitor } from "@capacitor/core";
2
+ import { Directory, Filesystem } from "@capacitor/filesystem";
3
+ import { DfuState, NordicDfu } from "@microbit/capacitor-community-nordic-dfu";
4
+ import { createZip } from "./zip";
5
+ import { DeviceError, ProgressStage, } from "../device";
6
+ const appBinFilename = "application.bin";
7
+ const appDatFilename = "application.dat";
8
+ const manifestData = JSON.stringify({
9
+ manifest: {
10
+ application: {
11
+ bin_file: appBinFilename,
12
+ dat_file: appDatFilename,
13
+ },
14
+ },
15
+ });
16
+ function uint8ArrayToBase64(uint8Array) {
17
+ let binary = "";
18
+ const len = uint8Array.byteLength;
19
+ for (let i = 0; i < len; i++) {
20
+ binary += String.fromCharCode(uint8Array[i]);
21
+ }
22
+ return btoa(binary);
23
+ }
24
+ async function writeCacheFile(options) {
25
+ const directory = Directory.Cache;
26
+ const { uri } = await Filesystem.writeFile({ directory, ...options });
27
+ return uri;
28
+ }
29
+ async function createDfuZipFile(boardVersion, appBin) {
30
+ const createInitPacket = boardVersion === "V1" ? createLegacyInitPacketV1 : createInitPacketV2;
31
+ const encoder = new TextEncoder();
32
+ const zipData = createZip([
33
+ { name: appDatFilename, data: createInitPacket(appBin) },
34
+ { name: appBinFilename, data: appBin },
35
+ { name: "manifest.json", data: encoder.encode(manifestData) },
36
+ ]);
37
+ return await writeCacheFile({
38
+ path: "dfu.zip",
39
+ data: uint8ArrayToBase64(zipData),
40
+ });
41
+ }
42
+ async function getFilePath(boardVersion, appBin) {
43
+ const uri = await createDfuZipFile(boardVersion, appBin);
44
+ return { uri, filename: "dfu.zip" };
45
+ }
46
+ async function cleanupTemporaryFile(connection, filename) {
47
+ try {
48
+ await Filesystem.deleteFile({
49
+ directory: Directory.Cache,
50
+ path: filename,
51
+ });
52
+ }
53
+ catch (error) {
54
+ // File might not exist or already deleted, ignore errors
55
+ connection.error(`Could not delete temporary file ${filename}`, error);
56
+ }
57
+ }
58
+ export async function flashDfu(connection, boardVersion, appBin, progress) {
59
+ const { device } = connection;
60
+ const { uri: filePath, filename } = await getFilePath(boardVersion, appBin);
61
+ let listener;
62
+ try {
63
+ // eslint-disable-next-line no-async-promise-executor
64
+ await new Promise(async (resolve, reject) => {
65
+ listener = await NordicDfu.addListener("DFUStateChanged", ({ state, data }) => {
66
+ switch (state) {
67
+ case DfuState.DFU_COMPLETED: {
68
+ progress(ProgressStage.FullFlashing, 1);
69
+ resolve();
70
+ break;
71
+ }
72
+ case DfuState.DFU_ABORTED: {
73
+ reject(new DeviceError({
74
+ code: "flash-cancelled",
75
+ message: "Flash operation was cancelled",
76
+ }));
77
+ break;
78
+ }
79
+ case DfuState.DFU_PROGRESS: {
80
+ if (typeof data.percent === "number") {
81
+ progress(ProgressStage.FullFlashing, data.percent / 100);
82
+ }
83
+ break;
84
+ }
85
+ case DfuState.DFU_FAILED: {
86
+ reject(new DeviceError({
87
+ code: "flash-full-failed",
88
+ message: "Full flash via DFU failed",
89
+ }));
90
+ break;
91
+ }
92
+ default: {
93
+ connection.log(`DFU state: ${state}`);
94
+ }
95
+ }
96
+ });
97
+ // Note this doesn't await the whole DFU process, just its initialization
98
+ const error = await NordicDfu.startDFU({
99
+ deviceName: device.name,
100
+ deviceAddress: device.deviceId,
101
+ filePath,
102
+ dfuOptions: Capacitor.getPlatform() === "android"
103
+ ? {
104
+ ...{
105
+ V1: { forceDfu: true },
106
+ V2: {
107
+ unsafeExperimentalButtonlessServiceInSecureDfuEnabled: true,
108
+ disableNotification: true,
109
+ restoreBond: true,
110
+ },
111
+ }[boardVersion],
112
+ startAsForegroundService: false,
113
+ keepBond: true,
114
+ packetReceiptNotificationsEnabled: true,
115
+ }
116
+ : {},
117
+ });
118
+ if (error) {
119
+ connection.error(`DFU Error: ${error.message}`, error);
120
+ reject(new DeviceError({
121
+ code: "flash-full-failed",
122
+ message: error.message || "Full flash via DFU failed",
123
+ }));
124
+ }
125
+ // Final resolution will come from listener callbacks.
126
+ });
127
+ }
128
+ finally {
129
+ await listener?.remove();
130
+ await cleanupTemporaryFile(connection, filename);
131
+ }
132
+ }
133
+ const createLegacyInitPacketV1 = (appData) => {
134
+ // Legacy DFU init packet structure for micro:bit V1
135
+ // Based on: dev-type 0xFFFF, dev-revision 0xFFFFFFFF, application-version 0xFFFFFFFF, sd-req 0x64
136
+ const buffer = new ArrayBuffer(14);
137
+ const view = new DataView(buffer);
138
+ const uint8View = new Uint8Array(buffer);
139
+ let offset = 0;
140
+ // Device Type (2 bytes, little-endian) - 0xFFFF (wildcard)
141
+ view.setUint16(offset, 0xffff, true);
142
+ offset += 2;
143
+ // Device Revision (2 bytes, little-endian) - 0xFFFF (wildcard, truncated from 0xFFFFFFFF)
144
+ view.setUint16(offset, 0xffff, true);
145
+ offset += 2;
146
+ // Application Version (4 bytes, little-endian) - 0xFFFFFFFF (wildcard)
147
+ view.setUint32(offset, 0xffffffff, true);
148
+ offset += 4;
149
+ // SoftDevice length (2 bytes, little-endian) - 1 (one SoftDevice requirement)
150
+ view.setUint16(offset, 1, true);
151
+ offset += 2;
152
+ // SoftDevice requirement (2 bytes, little-endian) - 0x0064 (S110 v10.0)
153
+ view.setUint16(offset, 0x0064, true);
154
+ offset += 2;
155
+ // CRC-16 of the application (2 bytes, little-endian)
156
+ const crc16 = calculateCRC16(appData);
157
+ view.setUint16(offset, crc16, true);
158
+ return uint8View;
159
+ };
160
+ const calculateCRC16 = (data) => {
161
+ // CRC-16/CCITT-FALSE (polynomial 0x1021, initial value 0xFFFF)
162
+ let crc = 0xffff;
163
+ for (let i = 0; i < data.length; i++) {
164
+ crc ^= data[i] << 8;
165
+ for (let j = 0; j < 8; j++) {
166
+ if (crc & 0x8000) {
167
+ crc = (crc << 1) ^ 0x1021;
168
+ }
169
+ else {
170
+ crc = crc << 1;
171
+ }
172
+ }
173
+ }
174
+ return crc & 0xffff;
175
+ };
176
+ const createInitPacketV2 = (appBin) => {
177
+ //typedef struct {
178
+ // uint8_t magic[12]; // identify this struct "microbit_app"
179
+ // uint32_t version; // version of this struct == 1
180
+ // uint32_t app_size; // only used for DFU_FW_TYPE_APPLICATION
181
+ // uint32_t hash_size; // 32 => DFU_HASH_TYPE_SHA256 or zero to bypass hash check
182
+ // uint8_t hash_bytes[32]; // hash of whole DFU download
183
+ //} microbit_dfu_app_t;
184
+ const appSize = appBin.length;
185
+ const magic = "microbit_app";
186
+ const version = 1;
187
+ const hashSize = 0;
188
+ const hash = new Uint8Array(32).fill(0);
189
+ const buffer = new ArrayBuffer(12 + 4 + 4 + 4 + 32); // total: 56 bytes
190
+ const view = new DataView(buffer);
191
+ const uint8View = new Uint8Array(buffer);
192
+ let offset = 0;
193
+ // Write magic string (12 bytes)
194
+ const encoder = new TextEncoder();
195
+ const magicBytes = encoder.encode(magic);
196
+ uint8View.set(magicBytes, offset);
197
+ offset += 12;
198
+ // Write version (4 bytes, little-endian)
199
+ view.setUint32(offset, version, true);
200
+ offset += 4;
201
+ // Write appSize (4 bytes, little-endian)
202
+ view.setUint32(offset, appSize, true);
203
+ offset += 4;
204
+ // Write hashSize (4 bytes, little-endian)
205
+ view.setUint32(offset, hashSize, true);
206
+ offset += 4;
207
+ // Write hash (32 bytes)
208
+ uint8View.set(hash, offset);
209
+ return uint8View;
210
+ };
211
+ //# 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,174 @@
1
+ /**
2
+ * Minimal ZIP file creator using STORE method (no compression).
3
+ * Sufficient for creating Nordic DFU packages.
4
+ */
5
+ /**
6
+ * Creates a ZIP file containing the given entries with no compression.
7
+ */
8
+ export function createZip(entries) {
9
+ const encoder = new TextEncoder();
10
+ // Calculate total size needed
11
+ let totalSize = 22; // End of central directory
12
+ for (const entry of entries) {
13
+ const nameBytes = encoder.encode(entry.name);
14
+ totalSize += 30 + nameBytes.length + entry.data.length; // Local file header + data
15
+ totalSize += 46 + nameBytes.length; // Central directory entry
16
+ }
17
+ const buffer = new ArrayBuffer(totalSize);
18
+ const view = new DataView(buffer);
19
+ const bytes = new Uint8Array(buffer);
20
+ let localOffset = 0;
21
+ const centralDirectoryEntries = [];
22
+ // Write local file headers and data
23
+ for (const entry of entries) {
24
+ const nameBytes = encoder.encode(entry.name);
25
+ const crc = crc32(entry.data);
26
+ const fileOffset = localOffset;
27
+ // Local file header signature
28
+ view.setUint32(localOffset, 0x04034b50, true);
29
+ localOffset += 4;
30
+ // Version needed to extract (2.0)
31
+ view.setUint16(localOffset, 20, true);
32
+ localOffset += 2;
33
+ // General purpose bit flag
34
+ view.setUint16(localOffset, 0, true);
35
+ localOffset += 2;
36
+ // Compression method (0 = STORE)
37
+ view.setUint16(localOffset, 0, true);
38
+ localOffset += 2;
39
+ // Last mod file time (0)
40
+ view.setUint16(localOffset, 0, true);
41
+ localOffset += 2;
42
+ // Last mod file date (0)
43
+ view.setUint16(localOffset, 0, true);
44
+ localOffset += 2;
45
+ // CRC-32
46
+ view.setUint32(localOffset, crc, true);
47
+ localOffset += 4;
48
+ // Compressed size (same as uncompressed for STORE)
49
+ view.setUint32(localOffset, entry.data.length, true);
50
+ localOffset += 4;
51
+ // Uncompressed size
52
+ view.setUint32(localOffset, entry.data.length, true);
53
+ localOffset += 4;
54
+ // File name length
55
+ view.setUint16(localOffset, nameBytes.length, true);
56
+ localOffset += 2;
57
+ // Extra field length
58
+ view.setUint16(localOffset, 0, true);
59
+ localOffset += 2;
60
+ // File name
61
+ bytes.set(nameBytes, localOffset);
62
+ localOffset += nameBytes.length;
63
+ // File data
64
+ bytes.set(entry.data, localOffset);
65
+ localOffset += entry.data.length;
66
+ centralDirectoryEntries.push({
67
+ nameBytes,
68
+ crc,
69
+ size: entry.data.length,
70
+ offset: fileOffset,
71
+ });
72
+ }
73
+ const centralDirectoryOffset = localOffset;
74
+ // Write central directory
75
+ for (const entry of centralDirectoryEntries) {
76
+ // Central file header signature
77
+ view.setUint32(localOffset, 0x02014b50, true);
78
+ localOffset += 4;
79
+ // Version made by (2.0, DOS)
80
+ view.setUint16(localOffset, 20, true);
81
+ localOffset += 2;
82
+ // Version needed to extract (2.0)
83
+ view.setUint16(localOffset, 20, true);
84
+ localOffset += 2;
85
+ // General purpose bit flag
86
+ view.setUint16(localOffset, 0, true);
87
+ localOffset += 2;
88
+ // Compression method (0 = STORE)
89
+ view.setUint16(localOffset, 0, true);
90
+ localOffset += 2;
91
+ // Last mod file time
92
+ view.setUint16(localOffset, 0, true);
93
+ localOffset += 2;
94
+ // Last mod file date
95
+ view.setUint16(localOffset, 0, true);
96
+ localOffset += 2;
97
+ // CRC-32
98
+ view.setUint32(localOffset, entry.crc, true);
99
+ localOffset += 4;
100
+ // Compressed size
101
+ view.setUint32(localOffset, entry.size, true);
102
+ localOffset += 4;
103
+ // Uncompressed size
104
+ view.setUint32(localOffset, entry.size, true);
105
+ localOffset += 4;
106
+ // File name length
107
+ view.setUint16(localOffset, entry.nameBytes.length, true);
108
+ localOffset += 2;
109
+ // Extra field length
110
+ view.setUint16(localOffset, 0, true);
111
+ localOffset += 2;
112
+ // File comment length
113
+ view.setUint16(localOffset, 0, true);
114
+ localOffset += 2;
115
+ // Disk number start
116
+ view.setUint16(localOffset, 0, true);
117
+ localOffset += 2;
118
+ // Internal file attributes
119
+ view.setUint16(localOffset, 0, true);
120
+ localOffset += 2;
121
+ // External file attributes
122
+ view.setUint32(localOffset, 0, true);
123
+ localOffset += 4;
124
+ // Relative offset of local header
125
+ view.setUint32(localOffset, entry.offset, true);
126
+ localOffset += 4;
127
+ // File name
128
+ bytes.set(entry.nameBytes, localOffset);
129
+ localOffset += entry.nameBytes.length;
130
+ }
131
+ const centralDirectorySize = localOffset - centralDirectoryOffset;
132
+ // End of central directory record
133
+ // Signature
134
+ view.setUint32(localOffset, 0x06054b50, true);
135
+ localOffset += 4;
136
+ // Number of this disk
137
+ view.setUint16(localOffset, 0, true);
138
+ localOffset += 2;
139
+ // Disk where central directory starts
140
+ view.setUint16(localOffset, 0, true);
141
+ localOffset += 2;
142
+ // Number of central directory records on this disk
143
+ view.setUint16(localOffset, entries.length, true);
144
+ localOffset += 2;
145
+ // Total number of central directory records
146
+ view.setUint16(localOffset, entries.length, true);
147
+ localOffset += 2;
148
+ // Size of central directory
149
+ view.setUint32(localOffset, centralDirectorySize, true);
150
+ localOffset += 4;
151
+ // Offset of start of central directory
152
+ view.setUint32(localOffset, centralDirectoryOffset, true);
153
+ localOffset += 4;
154
+ // Comment length
155
+ view.setUint16(localOffset, 0, true);
156
+ return bytes;
157
+ }
158
+ // CRC-32 lookup table
159
+ const crc32Table = new Uint32Array(256);
160
+ for (let i = 0; i < 256; i++) {
161
+ let c = i;
162
+ for (let j = 0; j < 8; j++) {
163
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
164
+ }
165
+ crc32Table[i] = c;
166
+ }
167
+ function crc32(data) {
168
+ let crc = 0xffffffff;
169
+ for (let i = 0; i < data.length; i++) {
170
+ crc = crc32Table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
171
+ }
172
+ return (crc ^ 0xffffffff) >>> 0;
173
+ }
174
+ //# 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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"}
@@ -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, };
@@ -1,6 +1,6 @@
1
1
  import { createWebBluetoothConnection, } from "./bluetooth.js";
2
2
  import { BoardId } from "./board-id.js";
3
- import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceConnectionEventMap, DeviceError, FlashDataError, } from "./device.js";
3
+ import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceConnectionEventMap, DeviceError, FlashDataError, ProgressStage, } from "./device.js";
4
4
  import { TypedEventTarget } from "./events.js";
5
5
  import { createUniversalHexFlashDataSource } from "./hex-flash-data-source.js";
6
6
  import { FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, } from "./serial-events.js";
@@ -8,5 +8,5 @@ import { ServiceConnectionEventMap } from "./service-events.js";
8
8
  import { UARTDataEvent } from "./uart.js";
9
9
  import { createRadioBridgeConnection, } from "./usb-radio-bridge.js";
10
10
  import { createWebUSBConnection, DeviceSelectionMode, } from "./usb.js";
11
- export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
11
+ export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, ProgressStage, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EAEnB,gBAAgB,EAChB,qBAAqB,EAErB,wBAAwB,EACxB,WAAW,EAEX,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAI/E,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,2BAA2B,GAG5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,iCAAiC,EACjC,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EAGnB,gBAAgB,EAChB,qBAAqB,EAErB,wBAAwB,EACxB,WAAW,EAEX,cAAc,EAId,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAI/E,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,2BAA2B,GAG5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,iCAAiC,EACjC,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,EACb,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,GACd,CAAC"}
@@ -1,13 +1,11 @@
1
1
  import { Service } from "./bluetooth-device-wrapper.js";
2
2
  import { LedMatrix } from "./led.js";
3
- import { TypedServiceEvent, TypedServiceEventDispatcher } from "./service-events.js";
3
+ import { TypedServiceEvent } from "./service-events.js";
4
4
  export declare class LedService implements Service {
5
- private matrixStateCharacteristic;
6
- private scrollingDelayCharacteristic;
7
- private textCharactertistic;
8
- private queueGattOperation;
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;
@@ -1,5 +1,5 @@
1
+ import { BleClient } from "@capacitor-community/bluetooth-le";
1
2
  import { profile } from "./bluetooth-profile.js";
2
- import { BackgroundErrorEvent, DeviceError } from "./device.js";
3
3
  const createLedMatrix = () => {
4
4
  return [
5
5
  [false, false, false, false, false],
@@ -10,61 +10,30 @@ const createLedMatrix = () => {
10
10
  ];
11
11
  };
12
12
  export class LedService {
13
- constructor(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharactertistic, queueGattOperation) {
14
- Object.defineProperty(this, "matrixStateCharacteristic", {
13
+ constructor(deviceId) {
14
+ Object.defineProperty(this, "deviceId", {
15
15
  enumerable: true,
16
16
  configurable: true,
17
17
  writable: true,
18
- value: matrixStateCharacteristic
18
+ value: deviceId
19
19
  });
20
- Object.defineProperty(this, "scrollingDelayCharacteristic", {
20
+ Object.defineProperty(this, "uuid", {
21
21
  enumerable: true,
22
22
  configurable: true,
23
23
  writable: true,
24
- value: scrollingDelayCharacteristic
25
- });
26
- Object.defineProperty(this, "textCharactertistic", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: textCharactertistic
31
- });
32
- Object.defineProperty(this, "queueGattOperation", {
33
- enumerable: true,
34
- configurable: true,
35
- writable: true,
36
- value: queueGattOperation
24
+ value: profile.led.id
37
25
  });
38
26
  }
39
- static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
40
- let ledService;
41
- try {
42
- ledService = await gattServer.getPrimaryService(profile.led.id);
43
- }
44
- catch (err) {
45
- if (listenerInit) {
46
- dispatcher("backgrounderror", new BackgroundErrorEvent(err));
47
- return;
48
- }
49
- else {
50
- throw new DeviceError({
51
- code: "service-missing",
52
- message: err,
53
- });
54
- }
55
- }
56
- const matrixStateCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.matrixState.id);
57
- const scrollingDelayCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.scrollingDelay.id);
58
- const textCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.text.id);
59
- return new LedService(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharacteristic, queueGattOperation);
27
+ getRelevantEvents() {
28
+ return [];
60
29
  }
61
30
  async getLedMatrix() {
62
- const dataView = await this.queueGattOperation(() => this.matrixStateCharacteristic.readValue());
31
+ const dataView = await BleClient.read(this.deviceId, profile.led.id, profile.led.characteristics.matrixState.id);
63
32
  return this.dataViewToLedMatrix(dataView);
64
33
  }
65
34
  async setLedMatrix(value) {
66
35
  const dataView = this.ledMatrixToDataView(value);
67
- return this.queueGattOperation(() => this.matrixStateCharacteristic.writeValue(dataView));
36
+ await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.matrixState.id, dataView);
68
37
  }
69
38
  dataViewToLedMatrix(dataView) {
70
39
  if (dataView.byteLength !== 5) {
@@ -99,15 +68,15 @@ export class LedService {
99
68
  if (bytes.length > 20) {
100
69
  throw new Error("Text must be <= 20 bytes when encoded as UTF-8");
101
70
  }
102
- return this.queueGattOperation(() => this.textCharactertistic.writeValue(bytes));
71
+ await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.text.id, new DataView(bytes.buffer));
103
72
  }
104
73
  async setScrollingDelay(value) {
105
74
  const dataView = new DataView(new ArrayBuffer(2));
106
75
  dataView.setUint16(0, value, true);
107
- return this.queueGattOperation(() => this.scrollingDelayCharacteristic.writeValue(dataView));
76
+ await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.scrollingDelay.id, dataView);
108
77
  }
109
78
  async getScrollingDelay() {
110
- const dataView = await this.queueGattOperation(() => this.scrollingDelayCharacteristic.readValue());
79
+ const dataView = await BleClient.read(this.deviceId, profile.led.id, profile.led.characteristics.scrollingDelay.id);
111
80
  return dataView.getUint16(0, true);
112
81
  }
113
82
  async startNotifications(type) { }
@@ -1 +1 @@
1
- {"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"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"}
@@ -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 NullLogging implements Logging {
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;
@@ -1,4 +1,4 @@
1
- export class NullLogging {
1
+ export class ConsoleLogging {
2
2
  event(_event) {
3
3
  console.log(_event);
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../lib/logging.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,MAAoB;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,EAAW;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,EAAO;QACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../lib/logging.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,MAAoB;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,EAAW;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,EAAO;QACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF"}