@nordicsemiconductor/pc-nrfconnect-shared 89.0.0 → 91.0.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 (161) hide show
  1. package/Changelog.md +54 -0
  2. package/config/jest.config.js +0 -1
  3. package/config/tsconfig.json +1 -1
  4. package/coverage/cobertura-coverage.xml +2166 -1086
  5. package/ipc/MetaFiles.ts +26 -8
  6. package/nrfutil/device/__mocks__/device.ts +43 -0
  7. package/nrfutil/device/batch.ts +219 -0
  8. package/nrfutil/device/batchTypes.ts +133 -0
  9. package/nrfutil/device/common.ts +274 -0
  10. package/nrfutil/device/device.ts +62 -0
  11. package/nrfutil/device/erase.ts +26 -0
  12. package/nrfutil/device/eraseBatch.ts +28 -0
  13. package/nrfutil/device/firmwareRead.ts +34 -0
  14. package/nrfutil/device/firmwareReadBatch.ts +42 -0
  15. package/nrfutil/device/getCoreInfo.ts +44 -0
  16. package/nrfutil/device/getCoreInfoBatch.ts +29 -0
  17. package/nrfutil/device/getFwInfo.ts +69 -0
  18. package/nrfutil/device/getFwInfoBatch.ts +29 -0
  19. package/nrfutil/device/getProtectionStatus.ts +46 -0
  20. package/nrfutil/device/getProtectionStatusBatch.ts +32 -0
  21. package/nrfutil/device/list.ts +81 -0
  22. package/nrfutil/device/program.ts +186 -0
  23. package/nrfutil/device/programBatch.ts +69 -0
  24. package/nrfutil/device/recover.ts +26 -0
  25. package/nrfutil/device/recoverBatch.ts +28 -0
  26. package/nrfutil/device/reset.ts +41 -0
  27. package/nrfutil/device/resetBatch.ts +30 -0
  28. package/nrfutil/device/setMcuState.ts +27 -0
  29. package/nrfutil/device/setProtectionStatus.ts +27 -0
  30. package/nrfutil/index.ts +25 -0
  31. package/nrfutil/moduleVersion.ts +57 -0
  32. package/nrfutil/nrfutilLogger.ts +15 -0
  33. package/nrfutil/sandbox.ts +504 -0
  34. package/nrfutil/sandboxTypes.ts +178 -0
  35. package/package.json +1 -4
  36. package/scripts/check-app-properties.ts +49 -22
  37. package/scripts/esbuild-renderer.js +0 -1
  38. package/scripts/nordic-publish.js +6 -6
  39. package/scripts/nordic-publish.ts +11 -2
  40. package/src/About/SupportCard.tsx +6 -9
  41. package/src/App/App.test.tsx +4 -0
  42. package/src/App/App.tsx +13 -2
  43. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +1 -1
  44. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +39 -31
  45. package/src/Device/DeviceSelector/DeviceSelector.tsx +3 -12
  46. package/src/Device/deviceInfo/deviceInfo.ts +2 -3
  47. package/src/Device/deviceLister.test.ts +1 -2
  48. package/src/Device/deviceLister.ts +169 -215
  49. package/src/Device/deviceSlice.ts +2 -16
  50. package/src/Device/jprogOperations.ts +21 -69
  51. package/src/Device/sdfuOperations.ts +77 -93
  52. package/src/ErrorBoundary/ErrorBoundary.tsx +1 -1
  53. package/src/Log/LogViewer.tsx +0 -4
  54. package/src/Log/logSlice.ts +4 -7
  55. package/src/index.ts +0 -1
  56. package/src/logging/sendInitialLogMessages.ts +7 -8
  57. package/src/utils/appDirs.ts +6 -11
  58. package/src/utils/logLibVersions.ts +12 -14
  59. package/src/utils/packageJson.ts +11 -1
  60. package/src/utils/systemReport.ts +11 -17
  61. package/src/utils/usageData.ts +14 -9
  62. package/tsconfig.json +1 -0
  63. package/typings/generated/ipc/MetaFiles.d.ts +21 -8
  64. package/typings/generated/ipc/MetaFiles.d.ts.map +1 -1
  65. package/typings/generated/nrfutil/device/__mocks__/device.d.ts +23 -0
  66. package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -0
  67. package/typings/generated/nrfutil/device/batch.d.ts +26 -0
  68. package/typings/generated/nrfutil/device/batch.d.ts.map +1 -0
  69. package/typings/generated/nrfutil/device/batchTypes.d.ts +78 -0
  70. package/typings/generated/nrfutil/device/batchTypes.d.ts.map +1 -0
  71. package/typings/generated/nrfutil/device/common.d.ts +125 -0
  72. package/typings/generated/nrfutil/device/common.d.ts.map +1 -0
  73. package/typings/generated/nrfutil/device/device.d.ts +30 -0
  74. package/typings/generated/nrfutil/device/device.d.ts.map +1 -0
  75. package/typings/generated/nrfutil/device/erase.d.ts +5 -0
  76. package/typings/generated/nrfutil/device/erase.d.ts.map +1 -0
  77. package/typings/generated/nrfutil/device/eraseBatch.d.ts +7 -0
  78. package/typings/generated/nrfutil/device/eraseBatch.d.ts.map +1 -0
  79. package/typings/generated/nrfutil/device/firmwareRead.d.ts +10 -0
  80. package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -0
  81. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts +9 -0
  82. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts.map +1 -0
  83. package/typings/generated/nrfutil/device/getCoreInfo.d.ts +22 -0
  84. package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -0
  85. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts +8 -0
  86. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts.map +1 -0
  87. package/typings/generated/nrfutil/device/getFwInfo.d.ts +31 -0
  88. package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -0
  89. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts +8 -0
  90. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts.map +1 -0
  91. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +13 -0
  92. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -0
  93. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts +8 -0
  94. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts.map +1 -0
  95. package/typings/generated/nrfutil/device/list.d.ts +19 -0
  96. package/typings/generated/nrfutil/device/list.d.ts.map +1 -0
  97. package/typings/generated/nrfutil/device/program.d.ts +27 -0
  98. package/typings/generated/nrfutil/device/program.d.ts.map +1 -0
  99. package/typings/generated/nrfutil/device/programBatch.d.ts +9 -0
  100. package/typings/generated/nrfutil/device/programBatch.d.ts.map +1 -0
  101. package/typings/generated/nrfutil/device/recover.d.ts +5 -0
  102. package/typings/generated/nrfutil/device/recover.d.ts.map +1 -0
  103. package/typings/generated/nrfutil/device/recoverBatch.d.ts +7 -0
  104. package/typings/generated/nrfutil/device/recoverBatch.d.ts.map +1 -0
  105. package/typings/generated/nrfutil/device/reset.d.ts +5 -0
  106. package/typings/generated/nrfutil/device/reset.d.ts.map +1 -0
  107. package/typings/generated/nrfutil/device/resetBatch.d.ts +8 -0
  108. package/typings/generated/nrfutil/device/resetBatch.d.ts.map +1 -0
  109. package/typings/generated/nrfutil/device/setMcuState.d.ts +6 -0
  110. package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -0
  111. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +5 -0
  112. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -0
  113. package/typings/generated/nrfutil/index.d.ts +11 -0
  114. package/typings/generated/nrfutil/index.d.ts.map +1 -0
  115. package/typings/generated/nrfutil/moduleVersion.d.ts +6 -0
  116. package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -0
  117. package/typings/generated/nrfutil/nrfutilLogger.d.ts +4 -0
  118. package/typings/generated/nrfutil/nrfutilLogger.d.ts.map +1 -0
  119. package/typings/generated/nrfutil/sandbox.d.ts +36 -0
  120. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -0
  121. package/typings/generated/nrfutil/sandboxTypes.d.ts +135 -0
  122. package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -0
  123. package/typings/generated/src/About/SupportCard.d.ts.map +1 -1
  124. package/typings/generated/src/App/App.d.ts.map +1 -1
  125. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +2 -6
  126. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
  127. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +2 -2
  128. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -1
  129. package/typings/generated/src/Device/deviceLister.d.ts +11 -16
  130. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
  131. package/typings/generated/src/Device/deviceLister.test.d.ts.map +1 -1
  132. package/typings/generated/src/Device/deviceSlice.d.ts +3 -3
  133. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
  134. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
  135. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
  136. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  137. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  138. package/typings/generated/src/Log/LogViewer.d.ts.map +1 -1
  139. package/typings/generated/src/Log/logSlice.d.ts +2 -3
  140. package/typings/generated/src/Log/logSlice.d.ts.map +1 -1
  141. package/typings/generated/src/index.d.ts +0 -1
  142. package/typings/generated/src/index.d.ts.map +1 -1
  143. package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
  144. package/typings/generated/src/utils/appDirs.d.ts +4 -4
  145. package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
  146. package/typings/generated/src/utils/logLibVersions.d.ts.map +1 -1
  147. package/typings/generated/src/utils/packageJson.d.ts.map +1 -1
  148. package/typings/generated/src/utils/systemReport.d.ts +1 -1
  149. package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
  150. package/typings/generated/src/utils/usageData.d.ts +2 -0
  151. package/typings/generated/src/utils/usageData.d.ts.map +1 -1
  152. package/mocks/deviceLibMock.ts +0 -21
  153. package/src/Device/deviceLibWrapper.test.ts +0 -97
  154. package/src/Device/deviceLibWrapper.ts +0 -132
  155. package/src/utils/describeVersion.ts +0 -21
  156. package/typings/generated/src/Device/deviceLibWrapper.d.ts +0 -9
  157. package/typings/generated/src/Device/deviceLibWrapper.d.ts.map +0 -1
  158. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts +0 -2
  159. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts.map +0 -1
  160. package/typings/generated/src/utils/describeVersion.d.ts +0 -4
  161. package/typings/generated/src/utils/describeVersion.d.ts.map +0 -1
@@ -0,0 +1,274 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { getUserDataDir } from '../../src/utils/appDirs';
8
+ import {
9
+ getIsLoggingVerbose,
10
+ persistIsLoggingVerbose,
11
+ } from '../../src/utils/persistentStore';
12
+ import { getNrfutilLogger } from '../nrfutilLogger';
13
+ import sandbox, { type NrfutilSandbox } from '../sandbox';
14
+ import { Progress } from '../sandboxTypes';
15
+
16
+ export const deviceTraitsToArgs = (traits: DeviceTraits) => {
17
+ const args: string[] = [];
18
+ const traitsString = Object.keys(traits)
19
+ .map(trait => (traits[trait as keyof DeviceTraits] ? trait : null))
20
+ .filter(t => t !== null)
21
+ .join(',');
22
+
23
+ if (traitsString.length > 0) {
24
+ args.push('--traits');
25
+ args.push(traitsString);
26
+ }
27
+
28
+ return args;
29
+ };
30
+
31
+ export type ResetKind =
32
+ | 'RESET_SYSTEM'
33
+ | 'RESET_HARD'
34
+ | 'RESET_DEBUG'
35
+ | 'RESET_PIN';
36
+
37
+ export interface DeviceArrivedEvent {
38
+ device: NrfutilDevice;
39
+ }
40
+
41
+ export interface DeviceLeftEvent {
42
+ id: number;
43
+ }
44
+
45
+ export interface HwInfo {
46
+ romSize: number;
47
+ ramSize: number;
48
+ romPageSize: number;
49
+ deviceFamily: string;
50
+ deviceVersion: string;
51
+ }
52
+
53
+ export interface DfuTriggerInfo {
54
+ wAddress: number;
55
+ wVersionMajor: number;
56
+ wVersionMinor: number;
57
+ wFirmwareId: number;
58
+ wFlashSize: number;
59
+ wFlashPageSize: number;
60
+ }
61
+
62
+ export interface DfuTriggerVersion {
63
+ semVer: string;
64
+ }
65
+
66
+ export interface NrfutilDevice {
67
+ id: number;
68
+ serialNumber?: string; // undefined in case udev is not installed
69
+ traits: DeviceTraits;
70
+ usb?: USB;
71
+ jlink?: JLink;
72
+ // non-Nordic devices may not have serialPorts property at all
73
+ serialPorts?: Array<SerialPort>;
74
+ hwInfo?: HwInfo;
75
+ dfuTriggerInfo?: DfuTriggerInfo;
76
+ dfuTriggerVersion?: DfuTriggerVersion;
77
+ broken?: null | {
78
+ description: string;
79
+ url: string;
80
+ };
81
+ }
82
+
83
+ export interface NrfutilDeviceWithSerialnumber extends NrfutilDevice {
84
+ serialNumber: string;
85
+ }
86
+
87
+ export type DeviceFamily =
88
+ | 'NRF51_FAMILY'
89
+ | 'NRF52_FAMILY'
90
+ | 'NRF53_FAMILY'
91
+ | 'NRF91_FAMILY';
92
+
93
+ export type ProtectionStatus =
94
+ | 'NRFDL_PROTECTION_STATUS_NONE'
95
+ | 'NRFDL_PROTECTION_STATUS_REGION0'
96
+ | 'NRFDL_PROTECTION_STATUS_REGION0_REGION1'
97
+ | 'NRFDL_PROTECTION_STATUS_SECURE_REGIONS'
98
+ | 'NRFDL_PROTECTION_STATUS_ALL';
99
+
100
+ export type VersionType =
101
+ | 'NRFDL_VERSION_TYPE_SEMANTIC'
102
+ | 'NRFDL_VERSION_TYPE_INCREMENTAL'
103
+ | 'NRFDL_VERSION_TYPE_STRING';
104
+
105
+ export type DeviceCore = 'Application' | 'Modem' | 'Network';
106
+
107
+ export interface DeviceTraits {
108
+ usb?: boolean;
109
+ nordicUsb?: boolean;
110
+ nordicDfu?: boolean;
111
+ seggerUsb?: boolean;
112
+ jlink?: boolean;
113
+ serialPorts?: boolean;
114
+ broken?: boolean;
115
+ mcuBoot?: boolean;
116
+ modem?: boolean;
117
+ }
118
+
119
+ export interface USB {
120
+ serialNumber: string;
121
+ manufacturer: string | null;
122
+ osDevicePath: string;
123
+ product: string | null;
124
+ device: USBDevice;
125
+ }
126
+
127
+ export interface USBDeviceDescriptor {
128
+ bDescriptorType: number;
129
+ idVendor: number;
130
+ idProduct: number;
131
+ bcdDevice: number;
132
+ }
133
+
134
+ export interface USBConfigurationDescriptor {
135
+ bDescriptorType: number;
136
+ }
137
+
138
+ export interface USBInterfaceDescriptor {
139
+ bDescriptorType: number;
140
+ bInterfaceClass: number;
141
+ bInterfaceSubClass: number;
142
+ bInterfaceProtocol: number;
143
+ }
144
+
145
+ export interface USBInterface {
146
+ descriptors: USBInterfaceDescriptor[];
147
+ endpointLists: USBEndpoint[];
148
+ }
149
+
150
+ export interface USBEndpointDescriptor {
151
+ bDescriptorType: number;
152
+ }
153
+
154
+ export interface USBEndpoint {
155
+ descriptors?: USBEndpointDescriptor[];
156
+ length: number;
157
+ }
158
+
159
+ export interface USBConfiguration {
160
+ descriptors: USBConfigurationDescriptor[];
161
+ interfaceLists: USBInterface[];
162
+ length: number;
163
+ }
164
+
165
+ export interface USBDevice {
166
+ busNumber: number;
167
+ address: number;
168
+ descriptor: USBDeviceDescriptor;
169
+ configList: USBConfiguration; // todo: check this prop
170
+ }
171
+
172
+ export interface JLink {
173
+ serialNumber: string;
174
+ boardVersion: string | null; // can be null for external jLink
175
+ jlinkObFirmwareVersion: string | null;
176
+ deviceFamily: string | null;
177
+ deviceVersion: string | null; // will be null if device is protected
178
+ }
179
+
180
+ export interface SerialPort {
181
+ serialNumber: string | null;
182
+ comName: string | null;
183
+ manufacturer: string | null;
184
+ productId: string | null;
185
+ vendorId: string | null;
186
+ vcom: number;
187
+ path: string | null;
188
+ }
189
+
190
+ let deviceSandbox: NrfutilSandbox | undefined;
191
+ let promiseDeviceSandbox: Promise<NrfutilSandbox> | undefined;
192
+
193
+ export const getDeviceSandbox = async () => {
194
+ if (deviceSandbox) {
195
+ return deviceSandbox;
196
+ }
197
+
198
+ if (!promiseDeviceSandbox) {
199
+ promiseDeviceSandbox = sandbox(
200
+ getUserDataDir(),
201
+ 'device',
202
+ undefined,
203
+ undefined
204
+ );
205
+ deviceSandbox = await promiseDeviceSandbox;
206
+
207
+ deviceSandbox.onLogging(evt => {
208
+ const deviceLogger = getNrfutilLogger();
209
+ switch (evt.level) {
210
+ case 'TRACE':
211
+ deviceLogger?.verbose(evt.message);
212
+ break;
213
+ case 'DEBUG':
214
+ deviceLogger?.debug(evt.message);
215
+ break;
216
+ case 'INFO':
217
+ deviceLogger?.info(evt.message);
218
+ break;
219
+ case 'WARN':
220
+ deviceLogger?.warn(evt.message);
221
+ break;
222
+ case 'ERROR':
223
+ deviceLogger?.error(evt.message);
224
+ break;
225
+ case 'CRITICAL':
226
+ deviceLogger?.error(evt.message);
227
+ break;
228
+ case 'OFF':
229
+ default:
230
+ // Unreachable
231
+ break;
232
+ }
233
+ });
234
+
235
+ deviceSandbox.setLogLevel(getIsLoggingVerbose() ? 'trace' : 'error');
236
+ // Only the first reset after selecting "reset with verbose logging" is relevant
237
+ persistIsLoggingVerbose(false);
238
+ }
239
+
240
+ const box = await promiseDeviceSandbox;
241
+ return box;
242
+ };
243
+
244
+ export const deviceSingleTaskEndOperation = async <T = void>(
245
+ device: NrfutilDeviceWithSerialnumber,
246
+ command: string,
247
+ onProgress?: (progress: Progress) => void,
248
+ controller?: AbortController,
249
+ args: string[] = []
250
+ ) => {
251
+ const box = await getDeviceSandbox();
252
+ return box.singleTaskEndOperationWithData<T>(
253
+ command,
254
+ onProgress,
255
+ controller,
256
+ [...args, '--serial-number', device.serialNumber]
257
+ );
258
+ };
259
+
260
+ export const deviceSingleTaskEndOperationVoid = async (
261
+ device: NrfutilDeviceWithSerialnumber,
262
+ command: string,
263
+ onProgress?: (progress: Progress) => void,
264
+ controller?: AbortController,
265
+ args: string[] = []
266
+ ) => {
267
+ const box = await getDeviceSandbox();
268
+ await box.singleTaskEndOperationOptionalData(
269
+ command,
270
+ onProgress,
271
+ controller,
272
+ [...args, '--serial-number', device.serialNumber]
273
+ );
274
+ };
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { LogLevel, LogMessage } from '../sandboxTypes';
8
+ import { Batch } from './batch';
9
+ import { getDeviceSandbox } from './common';
10
+ import erase from './erase';
11
+ import firmwareRead from './firmwareRead';
12
+ import getCoreInfo from './getCoreInfo';
13
+ import getFwInfo from './getFwInfo';
14
+ import getProtectionStatus from './getProtectionStatus';
15
+ import list from './list';
16
+ import program from './program';
17
+ import recover from './recover';
18
+ import reset from './reset';
19
+ import setMcuState from './setMcuState';
20
+ import setProtectionStatus from './setProtectionStatus';
21
+
22
+ const onLogging = async (handler: (logging: LogMessage) => void) => {
23
+ const sandbox = await getDeviceSandbox();
24
+ return sandbox.onLogging(handler);
25
+ };
26
+
27
+ const setLogLevel = async (level: LogLevel) => {
28
+ const sandbox = await getDeviceSandbox();
29
+ sandbox.setLogLevel(level);
30
+ };
31
+
32
+ const setVerboseLogging = async (verbose: boolean) => {
33
+ const sandbox = await getDeviceSandbox();
34
+ if (process.env.NODE_ENV === 'production' && !verbose) {
35
+ sandbox.setLogLevel('off');
36
+ } else {
37
+ sandbox.setLogLevel(verbose ? 'trace' : 'error');
38
+ }
39
+ };
40
+ const getModuleVersion = async () => {
41
+ const sandbox = await getDeviceSandbox();
42
+ return sandbox.getModuleVersion();
43
+ };
44
+
45
+ export default {
46
+ program,
47
+ erase,
48
+ recover,
49
+ reset,
50
+ getProtectionStatus,
51
+ setProtectionStatus,
52
+ getFwInfo,
53
+ setMcuState,
54
+ getCoreInfo,
55
+ list,
56
+ firmwareRead,
57
+ onLogging,
58
+ setLogLevel,
59
+ setVerboseLogging,
60
+ getModuleVersion,
61
+ batch: () => new Batch(),
62
+ };
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { Progress } from '../sandboxTypes';
8
+ import {
9
+ DeviceCore,
10
+ deviceSingleTaskEndOperationVoid,
11
+ NrfutilDeviceWithSerialnumber,
12
+ } from './common';
13
+
14
+ export default (
15
+ device: NrfutilDeviceWithSerialnumber,
16
+ core?: DeviceCore,
17
+ onProgress?: (progress: Progress) => void,
18
+ controller?: AbortController
19
+ ) =>
20
+ deviceSingleTaskEndOperationVoid(
21
+ device,
22
+ 'erase',
23
+ onProgress,
24
+ controller,
25
+ core ? ['--core', core] : []
26
+ );
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import {
8
+ BatchOperationWrapper,
9
+ Callbacks,
10
+ convertDeviceCoreType,
11
+ EraseOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore } from './common';
14
+
15
+ export default (
16
+ core: DeviceCore,
17
+ optionals?: {
18
+ callbacks?: Callbacks;
19
+ }
20
+ ): BatchOperationWrapper<EraseOperation> => ({
21
+ operation: {
22
+ core: convertDeviceCoreType(core),
23
+ operation: {
24
+ type: 'erase',
25
+ },
26
+ },
27
+ ...optionals?.callbacks,
28
+ });
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { Progress } from '../sandboxTypes';
8
+ import {
9
+ DeviceCore,
10
+ deviceSingleTaskEndOperation,
11
+ NrfutilDeviceWithSerialnumber,
12
+ } from './common';
13
+
14
+ export interface DeviceBuffer {
15
+ serialNumber: string;
16
+ buffer: string;
17
+ }
18
+
19
+ export default async (
20
+ device: NrfutilDeviceWithSerialnumber,
21
+ core?: DeviceCore,
22
+ onProgress?: (progress: Progress) => void,
23
+ controller?: AbortController
24
+ ) => {
25
+ const deviceBuffer = await deviceSingleTaskEndOperation<DeviceBuffer>(
26
+ device,
27
+ 'fw-read',
28
+ onProgress,
29
+ controller,
30
+ core ? ['--core', core] : []
31
+ );
32
+
33
+ return Buffer.from(deviceBuffer.buffer, 'base64');
34
+ };
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import {
8
+ BatchOperationWrapper,
9
+ Callbacks,
10
+ convertDeviceCoreType,
11
+ FirmwareReadOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore } from './common';
14
+ import { DeviceBuffer } from './firmwareRead';
15
+
16
+ export default (
17
+ core: DeviceCore,
18
+ optionals?: {
19
+ callbacks?: Callbacks<Buffer>;
20
+ }
21
+ ): BatchOperationWrapper<FirmwareReadOperation, DeviceBuffer> => ({
22
+ operation: {
23
+ core: convertDeviceCoreType(core),
24
+ operation: {
25
+ type: 'fw-read',
26
+ firmware: {
27
+ buffer: '',
28
+ },
29
+ },
30
+ },
31
+ ...optionals?.callbacks,
32
+ onTaskEnd: taskEnd => {
33
+ if (taskEnd.result === 'success' && taskEnd.data)
34
+ optionals?.callbacks?.onTaskEnd?.({
35
+ ...taskEnd,
36
+ data: Buffer.from(taskEnd.data.buffer, 'base64'),
37
+ });
38
+ else {
39
+ optionals?.callbacks?.onException?.(new Error('Read failed'));
40
+ }
41
+ },
42
+ });
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { Progress } from '../sandboxTypes';
8
+ import {
9
+ DeviceCore,
10
+ deviceSingleTaskEndOperation,
11
+ NrfutilDeviceWithSerialnumber,
12
+ } from './common';
13
+
14
+ export type DeviceCoreInfo = {
15
+ name: 'core-info';
16
+ codeAddress: number;
17
+ codePageSize: number;
18
+ codeSize: number;
19
+ uicrAddress: number;
20
+ infoPageSize: number;
21
+ codeRamPresent: boolean;
22
+ codeRamAddress: number;
23
+ dataRamAddress: number;
24
+ ramSize: number;
25
+ qspiPresent: boolean;
26
+ xipAddress: number;
27
+ xipSize: number;
28
+ pinResetPin: number;
29
+ serialNumber: string;
30
+ };
31
+
32
+ export default (
33
+ device: NrfutilDeviceWithSerialnumber,
34
+ core?: DeviceCore,
35
+ onProgress?: (progress: Progress) => void,
36
+ controller?: AbortController
37
+ ) =>
38
+ deviceSingleTaskEndOperation<DeviceCoreInfo>(
39
+ device,
40
+ 'core-info',
41
+ onProgress,
42
+ controller,
43
+ core ? ['--core', core] : []
44
+ );
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import {
8
+ BatchOperationWrapper,
9
+ Callbacks,
10
+ convertDeviceCoreType,
11
+ GetCoreInfoOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore } from './common';
14
+ import { DeviceCoreInfo } from './getCoreInfo';
15
+
16
+ export default (
17
+ core: DeviceCore,
18
+ optionals?: {
19
+ callbacks?: Callbacks<DeviceCoreInfo>;
20
+ }
21
+ ): BatchOperationWrapper<GetCoreInfoOperation, DeviceCoreInfo> => ({
22
+ operation: {
23
+ core: convertDeviceCoreType(core),
24
+ operation: {
25
+ type: 'core-info',
26
+ },
27
+ },
28
+ ...optionals?.callbacks,
29
+ });
@@ -0,0 +1,69 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { Progress } from '../sandboxTypes';
8
+ import {
9
+ DeviceCore,
10
+ deviceSingleTaskEndOperation,
11
+ NrfutilDeviceWithSerialnumber,
12
+ } from './common';
13
+
14
+ type BootloaderType =
15
+ | 'NRFDL_BOOTLOADER_TYPE_NONE'
16
+ | 'NRFDL_BOOTLOADER_TYPE_MCUBOOT'
17
+ | 'NRFDL_BOOTLOADER_TYPE_SDFU'
18
+ | 'NRFDL_BOOTLOADER_TYPE_B0'
19
+ | 'NRFDL_BOOTLOADER_TYPE_UNKNOWN';
20
+
21
+ export type ImageType =
22
+ | 'NRFDL_IMAGE_TYPE_APPLICATION'
23
+ | 'NRFDL_IMAGE_TYPE_BOOTLOADER'
24
+ | 'NRFDL_IMAGE_TYPE_SOFTDEVICE'
25
+ | 'NRFDL_IMAGE_TYPE_OPERATIVE_SYSTEM'
26
+ | 'NRFDL_IMAGE_TYPE_GENERIC'
27
+ | 'NRFDL_IMAGE_TYPE_UNKNOWN';
28
+
29
+ interface ImageLocation {
30
+ address: number;
31
+ size: number;
32
+ }
33
+
34
+ interface SemanticVersion {
35
+ major: number;
36
+ minor: number;
37
+ patch: number;
38
+ pre: string;
39
+ metadata?: string;
40
+ }
41
+
42
+ interface Image {
43
+ imageLocation?: ImageLocation;
44
+ imageType: ImageType;
45
+ version: SemanticVersion | string | number;
46
+ versionFormat: string;
47
+ }
48
+
49
+ export interface FWInfo {
50
+ name: 'fw-read-info';
51
+ bootloaderType: BootloaderType;
52
+ imageInfoList: Image[];
53
+ serialNumber: string;
54
+ operationId?: string;
55
+ }
56
+
57
+ export default (
58
+ device: NrfutilDeviceWithSerialnumber,
59
+ core?: DeviceCore,
60
+ onProgress?: (progress: Progress) => void,
61
+ controller?: AbortController
62
+ ) =>
63
+ deviceSingleTaskEndOperation<FWInfo>(
64
+ device,
65
+ 'fw-info',
66
+ onProgress,
67
+ controller,
68
+ core ? ['--core', core] : []
69
+ );
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import {
8
+ BatchOperationWrapper,
9
+ Callbacks,
10
+ convertDeviceCoreType,
11
+ GetFwInfoOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore } from './common';
14
+ import { FWInfo } from './getFwInfo';
15
+
16
+ export default (
17
+ core: DeviceCore,
18
+ optionals?: {
19
+ callbacks?: Callbacks<FWInfo>;
20
+ }
21
+ ): BatchOperationWrapper<GetFwInfoOperation, FWInfo> => ({
22
+ operation: {
23
+ core: convertDeviceCoreType(core),
24
+ operation: {
25
+ type: 'fw-info',
26
+ },
27
+ },
28
+ ...optionals?.callbacks,
29
+ });
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { Progress } from '../sandboxTypes';
8
+ import {
9
+ DeviceCore,
10
+ deviceSingleTaskEndOperation,
11
+ NrfutilDeviceWithSerialnumber,
12
+ } from './common';
13
+
14
+ type DeviceFamily =
15
+ | 'NRF51_FAMILY'
16
+ | 'NRF52_FAMILY'
17
+ | 'NRF53_FAMILY'
18
+ | 'NRF91_FAMILY';
19
+
20
+ type ProtectionStatus =
21
+ | 'NRFDL_PROTECTION_STATUS_NONE'
22
+ | 'NRFDL_PROTECTION_STATUS_REGION0'
23
+ | 'NRFDL_PROTECTION_STATUS_REGION0_REGION1'
24
+ | 'NRFDL_PROTECTION_STATUS_SECURE_REGIONS'
25
+ | 'NRFDL_PROTECTION_STATUS_ALL';
26
+
27
+ export interface GetProtectionStatusResult {
28
+ core: DeviceCore;
29
+ deviceFamily?: DeviceFamily;
30
+ protectionStatus: ProtectionStatus;
31
+ serialNumber: string;
32
+ }
33
+
34
+ export default (
35
+ device: NrfutilDeviceWithSerialnumber,
36
+ core?: DeviceCore,
37
+ onProgress?: (progress: Progress) => void,
38
+ controller?: AbortController
39
+ ) =>
40
+ deviceSingleTaskEndOperation<GetProtectionStatusResult>(
41
+ device,
42
+ 'protection-get',
43
+ onProgress,
44
+ controller,
45
+ core ? ['--core', core] : []
46
+ );