@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
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import nrfDeviceLib from '@nordicsemiconductor/nrf-device-lib-js';
|
|
8
7
|
import AdmZip from 'adm-zip';
|
|
9
8
|
import { createHash } from 'crypto';
|
|
10
9
|
import fs from 'fs';
|
|
11
10
|
import MemoryMap from 'nrf-intel-hex';
|
|
12
11
|
|
|
12
|
+
import NrfutilDeviceLib from '../../nrfutil/device/device';
|
|
13
|
+
import { McuState } from '../../nrfutil/device/setMcuState';
|
|
13
14
|
import logger from '../logging';
|
|
14
15
|
import { AppThunk, RootState } from '../store';
|
|
15
16
|
import { getAppFile } from '../utils/appDirs';
|
|
16
17
|
import { setWaitForDevice } from './deviceAutoSelectSlice';
|
|
17
|
-
import { getDeviceLibContext } from './deviceLibWrapper';
|
|
18
18
|
import { DeviceSetup, DfuEntry } from './deviceSetup';
|
|
19
19
|
import { openDeviceSetupDialog } from './deviceSetupSlice';
|
|
20
20
|
import { Device } from './deviceSlice';
|
|
@@ -63,10 +63,7 @@ export const ensureBootloaderMode = (device: Device) => {
|
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
const getBootloaderInformation = async (device: Device) => {
|
|
66
|
-
const info = await
|
|
67
|
-
getDeviceLibContext(),
|
|
68
|
-
device.id
|
|
69
|
-
);
|
|
66
|
+
const info = await NrfutilDeviceLib.getFwInfo(device);
|
|
70
67
|
|
|
71
68
|
const index = info.imageInfoList.findIndex(
|
|
72
69
|
imageInfo => imageInfo.imageType === 'NRFDL_IMAGE_TYPE_BOOTLOADER'
|
|
@@ -106,76 +103,67 @@ const updateBootloader =
|
|
|
106
103
|
onFail,
|
|
107
104
|
})
|
|
108
105
|
);
|
|
109
|
-
await nrfDeviceLib.firmwareProgram(
|
|
110
|
-
getDeviceLibContext(),
|
|
111
|
-
device.id,
|
|
112
|
-
'NRFDL_FW_BUFFER',
|
|
113
|
-
'NRFDL_FW_SDFU_ZIP',
|
|
114
|
-
zipBuffer,
|
|
115
|
-
err => {
|
|
116
|
-
if (err) {
|
|
117
|
-
logger.error(
|
|
118
|
-
`Failed to write bootloader to the target device: ${
|
|
119
|
-
err.message || err
|
|
120
|
-
}`
|
|
121
|
-
);
|
|
122
|
-
onFail(err.message);
|
|
123
|
-
} else {
|
|
124
|
-
dispatch(
|
|
125
|
-
setWaitForDevice({
|
|
126
|
-
timeout: DEFAULT_DEVICE_WAIT_TIME,
|
|
127
|
-
when: 'always',
|
|
128
|
-
once: true,
|
|
129
|
-
onSuccess,
|
|
130
|
-
onFail,
|
|
131
|
-
})
|
|
132
|
-
);
|
|
133
106
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
107
|
+
try {
|
|
108
|
+
await NrfutilDeviceLib.program(
|
|
109
|
+
device,
|
|
110
|
+
{ buffer: zipBuffer, type: 'zip' },
|
|
111
|
+
progress => {
|
|
112
|
+
onProgress(
|
|
113
|
+
progress.progressPercentage,
|
|
114
|
+
progress.message ?? 'Programming bootloader'
|
|
137
115
|
);
|
|
138
|
-
logger.debug('Bootloader DFU completed successfully!');
|
|
139
116
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
117
|
+
);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
if (error) {
|
|
120
|
+
logger.error(
|
|
121
|
+
`Failed to write bootloader to the target device: ${
|
|
122
|
+
(error as Error).message || error
|
|
123
|
+
}`
|
|
124
|
+
);
|
|
125
|
+
onFail((error as Error).message || error);
|
|
126
|
+
} else {
|
|
127
|
+
dispatch(
|
|
128
|
+
setWaitForDevice({
|
|
129
|
+
timeout: DEFAULT_DEVICE_WAIT_TIME,
|
|
130
|
+
when: 'always',
|
|
131
|
+
once: true,
|
|
132
|
+
onSuccess,
|
|
133
|
+
onFail,
|
|
134
|
+
})
|
|
145
135
|
);
|
|
136
|
+
|
|
137
|
+
onProgress(100, 'Bootloader updated');
|
|
138
|
+
logger.info('Bootloader has been written to the target device');
|
|
139
|
+
logger.debug('Bootloader DFU completed successfully!');
|
|
146
140
|
}
|
|
147
|
-
|
|
141
|
+
}
|
|
148
142
|
};
|
|
149
143
|
|
|
150
144
|
const switchToDeviceMode =
|
|
151
145
|
(
|
|
152
146
|
device: Device,
|
|
153
|
-
mcuState:
|
|
147
|
+
mcuState: McuState,
|
|
154
148
|
onSuccess: (device: Device) => void,
|
|
155
149
|
onFail: (reason?: unknown) => void
|
|
156
150
|
): AppThunk =>
|
|
157
151
|
dispatch => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
when:
|
|
169
|
-
mcuState === 'NRFDL_MCU_STATE_APPLICATION'
|
|
170
|
-
? 'applicationMode'
|
|
171
|
-
: 'dfuBootLoaderMode',
|
|
172
|
-
once: true,
|
|
173
|
-
onSuccess,
|
|
174
|
-
onFail,
|
|
175
|
-
})
|
|
176
|
-
);
|
|
152
|
+
dispatch(
|
|
153
|
+
setWaitForDevice({
|
|
154
|
+
timeout: 10000,
|
|
155
|
+
when:
|
|
156
|
+
mcuState === 'Application'
|
|
157
|
+
? 'applicationMode'
|
|
158
|
+
: 'dfuBootLoaderMode',
|
|
159
|
+
once: true,
|
|
160
|
+
onSuccess,
|
|
161
|
+
onFail,
|
|
177
162
|
})
|
|
178
|
-
|
|
163
|
+
);
|
|
164
|
+
NrfutilDeviceLib.setMcuState(device, mcuState).catch(err =>
|
|
165
|
+
onFail(err)
|
|
166
|
+
);
|
|
179
167
|
};
|
|
180
168
|
|
|
181
169
|
export const switchToBootloaderMode =
|
|
@@ -189,7 +177,7 @@ export const switchToBootloaderMode =
|
|
|
189
177
|
dispatch(
|
|
190
178
|
switchToDeviceMode(
|
|
191
179
|
device,
|
|
192
|
-
'
|
|
180
|
+
'Programming',
|
|
193
181
|
d => {
|
|
194
182
|
if (!isDeviceInDFUBootloader(d))
|
|
195
183
|
onFail(
|
|
@@ -216,7 +204,7 @@ export const switchToApplicationMode =
|
|
|
216
204
|
dispatch(
|
|
217
205
|
switchToDeviceMode(
|
|
218
206
|
device,
|
|
219
|
-
'
|
|
207
|
+
'Application',
|
|
220
208
|
d => {
|
|
221
209
|
if (isDeviceInDFUBootloader(d))
|
|
222
210
|
onFail(
|
|
@@ -487,13 +475,31 @@ const programInDFUBootloader =
|
|
|
487
475
|
onFail,
|
|
488
476
|
})
|
|
489
477
|
);
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
device
|
|
493
|
-
'
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
478
|
+
|
|
479
|
+
NrfutilDeviceLib.program(
|
|
480
|
+
device,
|
|
481
|
+
{ buffer: zipBuffer, type: 'zip' },
|
|
482
|
+
progress => {
|
|
483
|
+
onProgress(progress.progressPercentage, progress.message ?? '');
|
|
484
|
+
}
|
|
485
|
+
)
|
|
486
|
+
.then(() => {
|
|
487
|
+
logger.info(
|
|
488
|
+
'All dfu images have been written to the target device'
|
|
489
|
+
);
|
|
490
|
+
logger.debug('DFU completed successfully!');
|
|
491
|
+
dispatch(
|
|
492
|
+
setWaitForDevice({
|
|
493
|
+
timeout: DEFAULT_DEVICE_WAIT_TIME,
|
|
494
|
+
when: 'applicationMode',
|
|
495
|
+
once: true,
|
|
496
|
+
onSuccess,
|
|
497
|
+
onFail,
|
|
498
|
+
})
|
|
499
|
+
);
|
|
500
|
+
onProgress(100, 'Waiting for device to reboot');
|
|
501
|
+
})
|
|
502
|
+
.catch(err => {
|
|
497
503
|
if (err) {
|
|
498
504
|
logger.error(
|
|
499
505
|
`Failed to write to the target device: ${
|
|
@@ -501,30 +507,8 @@ const programInDFUBootloader =
|
|
|
501
507
|
}`
|
|
502
508
|
);
|
|
503
509
|
onFail(err);
|
|
504
|
-
} else {
|
|
505
|
-
logger.info(
|
|
506
|
-
'All dfu images have been written to the target device'
|
|
507
|
-
);
|
|
508
|
-
logger.debug('DFU completed successfully!');
|
|
509
|
-
dispatch(
|
|
510
|
-
setWaitForDevice({
|
|
511
|
-
timeout: DEFAULT_DEVICE_WAIT_TIME,
|
|
512
|
-
when: 'applicationMode',
|
|
513
|
-
once: true,
|
|
514
|
-
onSuccess,
|
|
515
|
-
onFail,
|
|
516
|
-
})
|
|
517
|
-
);
|
|
518
|
-
onProgress(100, 'Waiting for device to reboot');
|
|
519
510
|
}
|
|
520
|
-
}
|
|
521
|
-
progress => {
|
|
522
|
-
onProgress(
|
|
523
|
-
progress.progressJson.progressPercentage,
|
|
524
|
-
progress.progressJson.message ?? ''
|
|
525
|
-
);
|
|
526
|
-
}
|
|
527
|
-
);
|
|
511
|
+
});
|
|
528
512
|
};
|
|
529
513
|
|
|
530
514
|
const programDeviceWithFw =
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
import React, { ReactNode } from 'react';
|
|
8
8
|
import { getCurrentWindow } from '@electron/remote';
|
|
9
|
-
import { Device } from '@nordicsemiconductor/nrf-device-lib-js';
|
|
10
9
|
|
|
11
10
|
import Button from '../Button/Button';
|
|
11
|
+
import { Device } from '../Device/deviceSlice';
|
|
12
12
|
import FactoryResetButton from '../FactoryReset/FactoryResetButton';
|
|
13
13
|
import { CollapsibleGroup } from '../SidePanel/Group';
|
|
14
14
|
import Spinner from '../Spinner/Spinner';
|
package/src/Log/LogViewer.tsx
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
import React, { useEffect, useRef } from 'react';
|
|
8
8
|
import { useDispatch, useSelector } from 'react-redux';
|
|
9
9
|
|
|
10
|
-
import { forwardLogEventsFromDeviceLib } from '../Device/deviceLibWrapper';
|
|
11
|
-
import logger from '../logging';
|
|
12
10
|
import sendInitialLogMessages from '../logging/sendInitialLogMessages';
|
|
13
11
|
import LogEntry from './LogEntry';
|
|
14
12
|
import {
|
|
@@ -22,8 +20,6 @@ import './log-viewer.scss';
|
|
|
22
20
|
export const useInitialisedLog = () => {
|
|
23
21
|
const dispatch = useDispatch();
|
|
24
22
|
useEffect(() => {
|
|
25
|
-
logger.initialise();
|
|
26
|
-
forwardLogEventsFromDeviceLib();
|
|
27
23
|
sendInitialLogMessages();
|
|
28
24
|
const stopSyncLogToStore = startSyncLogToStore(dispatch);
|
|
29
25
|
|
package/src/Log/logSlice.ts
CHANGED
|
@@ -39,9 +39,7 @@ const limitedToMaxSize = (entries: LogEntry[]) =>
|
|
|
39
39
|
|
|
40
40
|
export const autoScroll = (state: RootState) => state.log.autoScroll;
|
|
41
41
|
export const logEntries = (state: RootState) => state.log.logEntries;
|
|
42
|
-
|
|
43
|
-
export const isLoggingVerbose = () => isLoggingVerboseLocal;
|
|
44
|
-
export const isLoggingVerboseSelector = (state: RootState) =>
|
|
42
|
+
export const isLoggingVerbose = (state: RootState) =>
|
|
45
43
|
state.log.isLoggingVerbose;
|
|
46
44
|
|
|
47
45
|
const slice = createSlice({
|
|
@@ -60,14 +58,13 @@ const slice = createSlice({
|
|
|
60
58
|
toggleAutoScroll: state => {
|
|
61
59
|
state.autoScroll = !state.autoScroll;
|
|
62
60
|
},
|
|
63
|
-
|
|
64
|
-
state.isLoggingVerbose =
|
|
65
|
-
isLoggingVerboseLocal = state.isLoggingVerbose;
|
|
61
|
+
setIsLoggingVerbose: (state, action: PayloadAction<boolean>) => {
|
|
62
|
+
state.isLoggingVerbose = action.payload;
|
|
66
63
|
},
|
|
67
64
|
},
|
|
68
65
|
});
|
|
69
66
|
|
|
70
67
|
export const {
|
|
71
68
|
reducer,
|
|
72
|
-
actions: { addEntries, clear, toggleAutoScroll,
|
|
69
|
+
actions: { addEntries, clear, toggleAutoScroll, setIsLoggingVerbose },
|
|
73
70
|
} = slice;
|
package/src/index.ts
CHANGED
|
@@ -107,7 +107,6 @@ export {
|
|
|
107
107
|
} from './Device/deviceAutoSelectSlice';
|
|
108
108
|
export { clearWaitForDevice } from './Device/deviceLister';
|
|
109
109
|
export { deviceInfo } from './Device/deviceInfo/deviceInfo';
|
|
110
|
-
export { getDeviceLibContext } from './Device/deviceLibWrapper';
|
|
111
110
|
export { isDeviceInDFUBootloader } from './Device/sdfuOperations';
|
|
112
111
|
export {
|
|
113
112
|
default as sdfuOperations,
|
|
@@ -4,15 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { getModuleVersions } from '@nordicsemiconductor/nrf-device-lib-js';
|
|
8
|
-
|
|
9
7
|
import { inMain as appDetails } from '../../ipc/appDetails';
|
|
8
|
+
import NrfutilDeviceLib from '../../nrfutil/device/device';
|
|
10
9
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from '
|
|
10
|
+
describeVersion,
|
|
11
|
+
resolveModuleVersion,
|
|
12
|
+
} from '../../nrfutil/moduleVersion';
|
|
14
13
|
import { getAppDataDir } from '../utils/appDirs';
|
|
15
|
-
import describeVersion from '../utils/describeVersion';
|
|
16
14
|
import logLibVersions from '../utils/logLibVersions';
|
|
17
15
|
import udevInstalled from '../utils/udevInstalled';
|
|
18
16
|
import logger from '.';
|
|
@@ -50,8 +48,9 @@ export default async () => {
|
|
|
50
48
|
logger.debug(`TmpDir: ${tmpDir}`);
|
|
51
49
|
|
|
52
50
|
if (bundledJlink) {
|
|
53
|
-
const
|
|
54
|
-
|
|
51
|
+
const dependencies = (await NrfutilDeviceLib.getModuleVersion())
|
|
52
|
+
.dependencies;
|
|
53
|
+
const jlinkVersion = resolveModuleVersion('JlinkARM', dependencies);
|
|
55
54
|
|
|
56
55
|
if (!describeVersion(jlinkVersion).includes(bundledJlink)) {
|
|
57
56
|
logger.info(
|
package/src/utils/appDirs.ts
CHANGED
|
@@ -16,10 +16,10 @@ const getUserDataDir = () => getGlobal('userDataDir');
|
|
|
16
16
|
*
|
|
17
17
|
* @returns {string|undefined} Absolute path of current app.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
const getAppDir = () => {
|
|
20
20
|
const html = packageJson()?.nrfConnectForDesktop?.html ?? '';
|
|
21
21
|
return __filename.replace(html, '');
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Get the filesystem path of a file for the currently loaded app.
|
|
@@ -27,26 +27,21 @@ function getAppDir() {
|
|
|
27
27
|
* @param {string} filename relative name of file in the app directory
|
|
28
28
|
* @returns {string|undefined} Absolute path of file.
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
return path.resolve(getAppDir(), filename);
|
|
32
|
-
}
|
|
30
|
+
const getAppFile = (filename: string) => path.resolve(getAppDir(), filename);
|
|
33
31
|
|
|
34
32
|
/**
|
|
35
33
|
* Get the filesystem path of the data directory of currently loaded app.
|
|
36
34
|
*
|
|
37
35
|
* @returns {string|undefined} Absolute path of data directory of the current app.
|
|
38
36
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
37
|
+
const getAppDataDir = () =>
|
|
38
|
+
path.join(getUserDataDir(), path.basename(getAppDir()));
|
|
42
39
|
|
|
43
40
|
/**
|
|
44
41
|
* Get the filesystem path of the log directory of currently loaded app.
|
|
45
42
|
*
|
|
46
43
|
* @returns {string|undefined} Absolute path of data directory of the current app.
|
|
47
44
|
*/
|
|
48
|
-
|
|
49
|
-
return `${getAppDataDir()}/logs`;
|
|
50
|
-
}
|
|
45
|
+
const getAppLogDir = () => path.join(getAppDataDir(), 'logs');
|
|
51
46
|
|
|
52
47
|
export { getAppDir, getAppFile, getAppDataDir, getAppLogDir, getUserDataDir };
|
|
@@ -4,21 +4,18 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
getModuleVersions,
|
|
9
|
-
ModuleVersion,
|
|
10
|
-
} from '@nordicsemiconductor/nrf-device-lib-js';
|
|
11
7
|
import { spawn } from 'child_process';
|
|
12
8
|
import os from 'os';
|
|
13
9
|
|
|
10
|
+
import NrfutilDeviceLib from '../../nrfutil/device/device';
|
|
14
11
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '
|
|
12
|
+
describeVersion,
|
|
13
|
+
resolveModuleVersion,
|
|
14
|
+
} from '../../nrfutil/moduleVersion';
|
|
15
|
+
import { SubDependency } from '../../nrfutil/sandboxTypes';
|
|
18
16
|
import logger from '../logging';
|
|
19
|
-
import describeVersion from './describeVersion';
|
|
20
17
|
|
|
21
|
-
const log = (description: string, moduleVersion?:
|
|
18
|
+
const log = (description: string, moduleVersion?: SubDependency | string) => {
|
|
22
19
|
if (moduleVersion == null) {
|
|
23
20
|
logger.warn(`Unable to detect version of ${description}.`);
|
|
24
21
|
} else {
|
|
@@ -72,12 +69,13 @@ const checkJLinkArchitectureOnDarwin = async () => {
|
|
|
72
69
|
|
|
73
70
|
export default async () => {
|
|
74
71
|
try {
|
|
75
|
-
const
|
|
72
|
+
const moduleVersion = await NrfutilDeviceLib.getModuleVersion();
|
|
73
|
+
const dependencies = moduleVersion.dependencies;
|
|
76
74
|
|
|
77
|
-
log('
|
|
78
|
-
log('nrf-device-lib',
|
|
79
|
-
log('nrfjprog DLL',
|
|
80
|
-
log('JLink',
|
|
75
|
+
log('nrfutil-device', moduleVersion.version);
|
|
76
|
+
log('nrf-device-lib', resolveModuleVersion('nrfdl', dependencies));
|
|
77
|
+
log('nrfjprog DLL', resolveModuleVersion('jprog', dependencies));
|
|
78
|
+
log('JLink', resolveModuleVersion('JlinkARM', dependencies));
|
|
81
79
|
if (
|
|
82
80
|
process.platform === 'darwin' &&
|
|
83
81
|
os.cpus()[0].model.includes('Apple')
|
package/src/utils/packageJson.ts
CHANGED
|
@@ -40,5 +40,15 @@ export default () => {
|
|
|
40
40
|
- Or if the app was packaged without a package.json, but in that case the launcher should not even launch this app.`);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
/* We need an intermediate, less safe typecast to `unknown`: TypeScript
|
|
44
|
+
assumes for the properties of NrfutilModules that they are string[] but
|
|
45
|
+
we type them as [string, ...string[]] in PackageJson. And TypeScript
|
|
46
|
+
considers these two types as not compatible. We hopefully can remove this
|
|
47
|
+
typecast when we check the format of package.json with zod.
|
|
48
|
+
|
|
49
|
+
Rationale for typing the properties as [string, ...string[]]: We require
|
|
50
|
+
that always at least one version is provided and also check this in
|
|
51
|
+
`check-app-properties.ts`)
|
|
52
|
+
*/
|
|
53
|
+
return packageJson as unknown as PackageJson;
|
|
44
54
|
};
|
|
@@ -4,24 +4,24 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import nrfDeviceLib, { Device } from '@nordicsemiconductor/nrf-device-lib-js';
|
|
8
7
|
import fs from 'fs';
|
|
9
8
|
import { EOL } from 'os';
|
|
10
9
|
import path from 'path';
|
|
11
10
|
import pretty from 'prettysize';
|
|
12
11
|
import type Systeminformation from 'systeminformation';
|
|
13
12
|
|
|
13
|
+
import NrfutilDeviceLib from '../../nrfutil/device/device';
|
|
14
|
+
import {
|
|
15
|
+
describeVersion,
|
|
16
|
+
resolveModuleVersion,
|
|
17
|
+
} from '../../nrfutil/moduleVersion';
|
|
14
18
|
import {
|
|
15
19
|
deviceInfo as getDeviceInfo,
|
|
16
20
|
productPageUrl,
|
|
17
21
|
} from '../Device/deviceInfo/deviceInfo';
|
|
18
|
-
import {
|
|
19
|
-
getDeviceLibContext,
|
|
20
|
-
getModuleVersion,
|
|
21
|
-
} from '../Device/deviceLibWrapper';
|
|
22
|
+
import { Device } from '../Device/deviceSlice';
|
|
22
23
|
import logger from '../logging';
|
|
23
24
|
import { getAppDataDir } from './appDirs';
|
|
24
|
-
import describeVersion from './describeVersion';
|
|
25
25
|
import { openFile } from './open';
|
|
26
26
|
|
|
27
27
|
const generalInfoReport = async () => {
|
|
@@ -52,9 +52,8 @@ const generalInfoReport = async () => {
|
|
|
52
52
|
si.fsSize(),
|
|
53
53
|
]);
|
|
54
54
|
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
);
|
|
55
|
+
const moduleVersion = await NrfutilDeviceLib.getModuleVersion();
|
|
56
|
+
const dependencies = moduleVersion.dependencies;
|
|
58
57
|
|
|
59
58
|
return [
|
|
60
59
|
`- System: ${manufacturer} ${model}`,
|
|
@@ -74,17 +73,12 @@ const generalInfoReport = async () => {
|
|
|
74
73
|
` - node: ${node}`,
|
|
75
74
|
` - python: ${python}`,
|
|
76
75
|
` - python3: ${python3}`,
|
|
77
|
-
` -
|
|
78
|
-
getModuleVersion('nrfdl-js', versions)
|
|
79
|
-
)}`,
|
|
80
|
-
` - nrf-device-lib: ${describeVersion(
|
|
81
|
-
getModuleVersion('nrfdl', versions)
|
|
82
|
-
)}`,
|
|
76
|
+
` - nrfutil-device: ${moduleVersion.version}`,
|
|
83
77
|
` - nrfjprog DLL: ${describeVersion(
|
|
84
|
-
|
|
78
|
+
resolveModuleVersion('jprog', dependencies)
|
|
85
79
|
)}`,
|
|
86
80
|
` - JLink: ${describeVersion(
|
|
87
|
-
|
|
81
|
+
resolveModuleVersion('JlinkARM', dependencies)
|
|
88
82
|
)}`,
|
|
89
83
|
'',
|
|
90
84
|
];
|
package/src/utils/usageData.ts
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
import { ApplicationInsights } from '@microsoft/applicationinsights-web';
|
|
8
8
|
import type Systeminformation from 'systeminformation';
|
|
9
|
+
import winston from 'winston';
|
|
9
10
|
|
|
10
11
|
import type { PackageJson } from '../../ipc/MetaFiles';
|
|
11
|
-
import logger from '../logging';
|
|
12
12
|
import { isDevelopment } from './environment';
|
|
13
13
|
import {
|
|
14
14
|
deleteIsSendingUsageData,
|
|
@@ -67,7 +67,7 @@ export const init = (packageJson: PackageJson) => {
|
|
|
67
67
|
};
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
-
logger
|
|
70
|
+
logger?.debug(
|
|
71
71
|
`Application Insights for category ${applicationName} has initialized`
|
|
72
72
|
);
|
|
73
73
|
|
|
@@ -85,7 +85,7 @@ export const init = (packageJson: PackageJson) => {
|
|
|
85
85
|
* @returns {Boolean} returns whether the setting is on, off or undefined
|
|
86
86
|
*/
|
|
87
87
|
export const isInitialized = () => {
|
|
88
|
-
logger
|
|
88
|
+
logger?.debug(
|
|
89
89
|
`Usage report instance is${
|
|
90
90
|
insights !== undefined ? '' : ' not'
|
|
91
91
|
} initialized`
|
|
@@ -100,7 +100,7 @@ export const isInitialized = () => {
|
|
|
100
100
|
*/
|
|
101
101
|
export const isEnabled = () => {
|
|
102
102
|
const isSendingUsageData = getIsSendingUsageData();
|
|
103
|
-
logger
|
|
103
|
+
logger?.debug(`Usage data is ${isSendingUsageData}`);
|
|
104
104
|
return isSendingUsageData;
|
|
105
105
|
};
|
|
106
106
|
|
|
@@ -111,7 +111,7 @@ export const isEnabled = () => {
|
|
|
111
111
|
*/
|
|
112
112
|
export const enable = () => {
|
|
113
113
|
persistIsSendingUsageData(true);
|
|
114
|
-
logger
|
|
114
|
+
logger?.debug('Usage data has been enabled');
|
|
115
115
|
};
|
|
116
116
|
|
|
117
117
|
/**
|
|
@@ -121,7 +121,7 @@ export const enable = () => {
|
|
|
121
121
|
*/
|
|
122
122
|
export const disable = () => {
|
|
123
123
|
persistIsSendingUsageData(false);
|
|
124
|
-
logger
|
|
124
|
+
logger?.debug('Usage data has been disabled');
|
|
125
125
|
};
|
|
126
126
|
|
|
127
127
|
/**
|
|
@@ -132,7 +132,7 @@ export const disable = () => {
|
|
|
132
132
|
*/
|
|
133
133
|
export const reset = () => {
|
|
134
134
|
deleteIsSendingUsageData();
|
|
135
|
-
logger
|
|
135
|
+
logger?.debug('Usage data setting has been reset');
|
|
136
136
|
};
|
|
137
137
|
|
|
138
138
|
/**
|
|
@@ -145,7 +145,7 @@ const sendEvent = ({ action, label }: EventAction) => {
|
|
|
145
145
|
const isSendingUsageData = getIsSendingUsageData();
|
|
146
146
|
|
|
147
147
|
if (isSendingUsageData && insights !== undefined) {
|
|
148
|
-
logger
|
|
148
|
+
logger?.debug(`Sending usage data ${action} ${label}`);
|
|
149
149
|
insights.trackEvent({
|
|
150
150
|
name: action,
|
|
151
151
|
properties: label ? { label } : undefined,
|
|
@@ -174,7 +174,7 @@ export const sendUsageData = <T extends string>(action: T, label?: string) => {
|
|
|
174
174
|
* @returns {void}
|
|
175
175
|
*/
|
|
176
176
|
export const sendErrorReport = (error: string) => {
|
|
177
|
-
logger
|
|
177
|
+
logger?.error(error);
|
|
178
178
|
insights?.trackException({
|
|
179
179
|
exception: new Error(error),
|
|
180
180
|
});
|
|
@@ -184,6 +184,11 @@ export const sendErrorReport = (error: string) => {
|
|
|
184
184
|
);
|
|
185
185
|
};
|
|
186
186
|
|
|
187
|
+
let logger: winston.Logger | undefined;
|
|
188
|
+
export const setUsageLogger = (log: winston.Logger) => {
|
|
189
|
+
logger = log;
|
|
190
|
+
};
|
|
191
|
+
|
|
187
192
|
export default {
|
|
188
193
|
disable,
|
|
189
194
|
enable,
|
package/tsconfig.json
CHANGED
|
@@ -5,10 +5,12 @@ export interface SourceJson {
|
|
|
5
5
|
}
|
|
6
6
|
export type WithdrawnJson = UrlString[];
|
|
7
7
|
export type AppVersions = {
|
|
8
|
-
[version: string]:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
[version: string]: AppVersion;
|
|
9
|
+
};
|
|
10
|
+
export type AppVersion = {
|
|
11
|
+
shasum?: string;
|
|
12
|
+
tarballUrl: UrlString;
|
|
13
|
+
nrfutilModules?: NrfutilModules;
|
|
12
14
|
};
|
|
13
15
|
export interface AppInfo {
|
|
14
16
|
name: string;
|
|
@@ -27,9 +29,22 @@ export interface AppInfo {
|
|
|
27
29
|
interface ObjectContainingOptionalStrings {
|
|
28
30
|
[index: string]: string | undefined;
|
|
29
31
|
}
|
|
32
|
+
interface NrfConnectForDesktop {
|
|
33
|
+
nrfutil?: NrfutilModules;
|
|
34
|
+
html?: string;
|
|
35
|
+
}
|
|
36
|
+
type SemverString = string;
|
|
37
|
+
export type NrfutilModuleName = string;
|
|
38
|
+
export type NrfutilModuleVersion = SemverString;
|
|
39
|
+
export interface NrfutilModules {
|
|
40
|
+
[name: NrfutilModuleName]: [
|
|
41
|
+
NrfutilModuleVersion,
|
|
42
|
+
...NrfutilModuleVersion[]
|
|
43
|
+
];
|
|
44
|
+
}
|
|
30
45
|
export interface PackageJson {
|
|
31
46
|
name: string;
|
|
32
|
-
version:
|
|
47
|
+
version: SemverString;
|
|
33
48
|
author?: string;
|
|
34
49
|
bin?: ObjectContainingOptionalStrings | string;
|
|
35
50
|
dependencies?: ObjectContainingOptionalStrings;
|
|
@@ -38,6 +53,7 @@ export interface PackageJson {
|
|
|
38
53
|
devDependencies?: ObjectContainingOptionalStrings;
|
|
39
54
|
displayName?: string;
|
|
40
55
|
engines?: ObjectContainingOptionalStrings;
|
|
56
|
+
nrfConnectForDesktop?: NrfConnectForDesktop;
|
|
41
57
|
files?: readonly string[];
|
|
42
58
|
license?: string;
|
|
43
59
|
main?: string;
|
|
@@ -47,9 +63,6 @@ export interface PackageJson {
|
|
|
47
63
|
url: UrlString;
|
|
48
64
|
};
|
|
49
65
|
scripts?: ObjectContainingOptionalStrings;
|
|
50
|
-
nrfConnectForDesktop?: {
|
|
51
|
-
html?: string;
|
|
52
|
-
};
|
|
53
66
|
}
|
|
54
67
|
export {};
|
|
55
68
|
//# sourceMappingURL=MetaFiles.d.ts.map
|