@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.
- package/Changelog.md +54 -0
- package/config/jest.config.js +0 -1
- package/config/tsconfig.json +1 -1
- package/coverage/cobertura-coverage.xml +2166 -1086
- package/ipc/MetaFiles.ts +26 -8
- package/nrfutil/device/__mocks__/device.ts +43 -0
- package/nrfutil/device/batch.ts +219 -0
- package/nrfutil/device/batchTypes.ts +133 -0
- package/nrfutil/device/common.ts +274 -0
- package/nrfutil/device/device.ts +62 -0
- package/nrfutil/device/erase.ts +26 -0
- package/nrfutil/device/eraseBatch.ts +28 -0
- package/nrfutil/device/firmwareRead.ts +34 -0
- package/nrfutil/device/firmwareReadBatch.ts +42 -0
- package/nrfutil/device/getCoreInfo.ts +44 -0
- package/nrfutil/device/getCoreInfoBatch.ts +29 -0
- package/nrfutil/device/getFwInfo.ts +69 -0
- package/nrfutil/device/getFwInfoBatch.ts +29 -0
- package/nrfutil/device/getProtectionStatus.ts +46 -0
- package/nrfutil/device/getProtectionStatusBatch.ts +32 -0
- package/nrfutil/device/list.ts +81 -0
- package/nrfutil/device/program.ts +186 -0
- package/nrfutil/device/programBatch.ts +69 -0
- package/nrfutil/device/recover.ts +26 -0
- package/nrfutil/device/recoverBatch.ts +28 -0
- package/nrfutil/device/reset.ts +41 -0
- package/nrfutil/device/resetBatch.ts +30 -0
- package/nrfutil/device/setMcuState.ts +27 -0
- package/nrfutil/device/setProtectionStatus.ts +27 -0
- package/nrfutil/index.ts +25 -0
- package/nrfutil/moduleVersion.ts +57 -0
- package/nrfutil/nrfutilLogger.ts +15 -0
- package/nrfutil/sandbox.ts +504 -0
- package/nrfutil/sandboxTypes.ts +178 -0
- package/package.json +1 -4
- package/scripts/check-app-properties.ts +49 -22
- package/scripts/esbuild-renderer.js +0 -1
- package/scripts/nordic-publish.js +6 -6
- package/scripts/nordic-publish.ts +11 -2
- package/src/About/SupportCard.tsx +6 -9
- package/src/App/App.test.tsx +4 -0
- package/src/App/App.tsx +13 -2
- package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +1 -1
- package/src/Device/DeviceSelector/DeviceSelector.test.tsx +39 -31
- package/src/Device/DeviceSelector/DeviceSelector.tsx +3 -12
- package/src/Device/deviceInfo/deviceInfo.ts +2 -3
- package/src/Device/deviceLister.test.ts +1 -2
- package/src/Device/deviceLister.ts +169 -215
- package/src/Device/deviceSlice.ts +2 -16
- package/src/Device/jprogOperations.ts +21 -69
- package/src/Device/sdfuOperations.ts +77 -93
- package/src/ErrorBoundary/ErrorBoundary.tsx +1 -1
- package/src/Log/LogViewer.tsx +0 -4
- package/src/Log/logSlice.ts +4 -7
- package/src/index.ts +0 -1
- package/src/logging/sendInitialLogMessages.ts +7 -8
- package/src/utils/appDirs.ts +6 -11
- package/src/utils/logLibVersions.ts +12 -14
- package/src/utils/packageJson.ts +11 -1
- package/src/utils/systemReport.ts +11 -17
- package/src/utils/usageData.ts +14 -9
- package/tsconfig.json +1 -0
- package/typings/generated/ipc/MetaFiles.d.ts +21 -8
- package/typings/generated/ipc/MetaFiles.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/__mocks__/device.d.ts +23 -0
- package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/batch.d.ts +26 -0
- package/typings/generated/nrfutil/device/batch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/batchTypes.d.ts +78 -0
- package/typings/generated/nrfutil/device/batchTypes.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/common.d.ts +125 -0
- package/typings/generated/nrfutil/device/common.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/device.d.ts +30 -0
- package/typings/generated/nrfutil/device/device.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/erase.d.ts +5 -0
- package/typings/generated/nrfutil/device/erase.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/eraseBatch.d.ts +7 -0
- package/typings/generated/nrfutil/device/eraseBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/firmwareRead.d.ts +10 -0
- package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts +9 -0
- package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getCoreInfo.d.ts +22 -0
- package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts +8 -0
- package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getFwInfo.d.ts +31 -0
- package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts +8 -0
- package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +13 -0
- package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts +8 -0
- package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/list.d.ts +19 -0
- package/typings/generated/nrfutil/device/list.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/program.d.ts +27 -0
- package/typings/generated/nrfutil/device/program.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/programBatch.d.ts +9 -0
- package/typings/generated/nrfutil/device/programBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/recover.d.ts +5 -0
- package/typings/generated/nrfutil/device/recover.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/recoverBatch.d.ts +7 -0
- package/typings/generated/nrfutil/device/recoverBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/reset.d.ts +5 -0
- package/typings/generated/nrfutil/device/reset.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/resetBatch.d.ts +8 -0
- package/typings/generated/nrfutil/device/resetBatch.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/setMcuState.d.ts +6 -0
- package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +5 -0
- package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -0
- package/typings/generated/nrfutil/index.d.ts +11 -0
- package/typings/generated/nrfutil/index.d.ts.map +1 -0
- package/typings/generated/nrfutil/moduleVersion.d.ts +6 -0
- package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -0
- package/typings/generated/nrfutil/nrfutilLogger.d.ts +4 -0
- package/typings/generated/nrfutil/nrfutilLogger.d.ts.map +1 -0
- package/typings/generated/nrfutil/sandbox.d.ts +36 -0
- package/typings/generated/nrfutil/sandbox.d.ts.map +1 -0
- package/typings/generated/nrfutil/sandboxTypes.d.ts +135 -0
- package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -0
- package/typings/generated/src/About/SupportCard.d.ts.map +1 -1
- package/typings/generated/src/App/App.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +2 -6
- package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +2 -2
- package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceLister.d.ts +11 -16
- package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceLister.test.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceSlice.d.ts +3 -3
- package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
- package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
- package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
- package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -1
- package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
- package/typings/generated/src/Log/LogViewer.d.ts.map +1 -1
- package/typings/generated/src/Log/logSlice.d.ts +2 -3
- package/typings/generated/src/Log/logSlice.d.ts.map +1 -1
- package/typings/generated/src/index.d.ts +0 -1
- package/typings/generated/src/index.d.ts.map +1 -1
- package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
- package/typings/generated/src/utils/appDirs.d.ts +4 -4
- package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
- package/typings/generated/src/utils/logLibVersions.d.ts.map +1 -1
- package/typings/generated/src/utils/packageJson.d.ts.map +1 -1
- package/typings/generated/src/utils/systemReport.d.ts +1 -1
- package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
- package/typings/generated/src/utils/usageData.d.ts +2 -0
- package/typings/generated/src/utils/usageData.d.ts.map +1 -1
- package/mocks/deviceLibMock.ts +0 -21
- package/src/Device/deviceLibWrapper.test.ts +0 -97
- package/src/Device/deviceLibWrapper.ts +0 -132
- package/src/utils/describeVersion.ts +0 -21
- package/typings/generated/src/Device/deviceLibWrapper.d.ts +0 -9
- package/typings/generated/src/Device/deviceLibWrapper.d.ts.map +0 -1
- package/typings/generated/src/Device/deviceLibWrapper.test.d.ts +0 -2
- package/typings/generated/src/Device/deviceLibWrapper.test.d.ts.map +0 -1
- package/typings/generated/src/utils/describeVersion.d.ts +0 -4
- 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
|
+
);
|