@nordicsemiconductor/pc-nrfconnect-shared 89.0.0 → 90.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 (149) hide show
  1. package/Changelog.md +28 -0
  2. package/config/tsconfig.json +1 -1
  3. package/coverage/cobertura-coverage.xml +2216 -1061
  4. package/ipc/MetaFiles.ts +17 -7
  5. package/nrfutil/device/__mocks__/device.ts +43 -0
  6. package/nrfutil/device/batch.ts +219 -0
  7. package/nrfutil/device/batchTypes.ts +133 -0
  8. package/nrfutil/device/common.ts +274 -0
  9. package/nrfutil/device/device.ts +62 -0
  10. package/nrfutil/device/erase.ts +26 -0
  11. package/nrfutil/device/eraseBatch.ts +28 -0
  12. package/nrfutil/device/firmwareRead.ts +34 -0
  13. package/nrfutil/device/firmwareReadBatch.ts +42 -0
  14. package/nrfutil/device/getCoreInfo.ts +44 -0
  15. package/nrfutil/device/getCoreInfoBatch.ts +29 -0
  16. package/nrfutil/device/getFwInfo.ts +69 -0
  17. package/nrfutil/device/getFwInfoBatch.ts +29 -0
  18. package/nrfutil/device/getProtectionStatus.ts +46 -0
  19. package/nrfutil/device/getProtectionStatusBatch.ts +32 -0
  20. package/nrfutil/device/list.ts +81 -0
  21. package/nrfutil/device/program.ts +186 -0
  22. package/nrfutil/device/programBatch.ts +69 -0
  23. package/nrfutil/device/recover.ts +26 -0
  24. package/nrfutil/device/recoverBatch.ts +28 -0
  25. package/nrfutil/device/reset.ts +41 -0
  26. package/nrfutil/device/resetBatch.ts +30 -0
  27. package/nrfutil/device/setMcuState.ts +27 -0
  28. package/nrfutil/device/setProtectionStatus.ts +27 -0
  29. package/nrfutil/index.ts +25 -0
  30. package/nrfutil/moduleVersion.ts +57 -0
  31. package/nrfutil/nrfutilLogger.ts +15 -0
  32. package/nrfutil/sandbox.ts +504 -0
  33. package/nrfutil/sandboxTypes.ts +178 -0
  34. package/package.json +1 -1
  35. package/scripts/nordic-publish.js +1 -1
  36. package/scripts/nordic-publish.ts +11 -2
  37. package/src/About/SupportCard.tsx +6 -9
  38. package/src/App/App.test.tsx +4 -0
  39. package/src/App/App.tsx +13 -2
  40. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +1 -1
  41. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +39 -31
  42. package/src/Device/DeviceSelector/DeviceSelector.tsx +3 -12
  43. package/src/Device/deviceInfo/deviceInfo.ts +2 -3
  44. package/src/Device/deviceLibWrapper.ts +0 -66
  45. package/src/Device/deviceLister.test.ts +1 -2
  46. package/src/Device/deviceLister.ts +169 -215
  47. package/src/Device/deviceSlice.ts +2 -16
  48. package/src/Device/jprogOperations.ts +21 -69
  49. package/src/Device/sdfuOperations.ts +77 -93
  50. package/src/ErrorBoundary/ErrorBoundary.tsx +1 -1
  51. package/src/Log/LogViewer.tsx +0 -4
  52. package/src/Log/logSlice.ts +4 -7
  53. package/src/logging/sendInitialLogMessages.ts +7 -8
  54. package/src/utils/appDirs.ts +6 -11
  55. package/src/utils/logLibVersions.ts +12 -14
  56. package/src/utils/systemReport.ts +11 -17
  57. package/src/utils/usageData.ts +14 -9
  58. package/tsconfig.json +1 -0
  59. package/typings/generated/ipc/MetaFiles.d.ts +14 -7
  60. package/typings/generated/ipc/MetaFiles.d.ts.map +1 -1
  61. package/typings/generated/nrfutil/device/__mocks__/device.d.ts +23 -0
  62. package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -0
  63. package/typings/generated/nrfutil/device/batch.d.ts +26 -0
  64. package/typings/generated/nrfutil/device/batch.d.ts.map +1 -0
  65. package/typings/generated/nrfutil/device/batchTypes.d.ts +78 -0
  66. package/typings/generated/nrfutil/device/batchTypes.d.ts.map +1 -0
  67. package/typings/generated/nrfutil/device/common.d.ts +125 -0
  68. package/typings/generated/nrfutil/device/common.d.ts.map +1 -0
  69. package/typings/generated/nrfutil/device/device.d.ts +30 -0
  70. package/typings/generated/nrfutil/device/device.d.ts.map +1 -0
  71. package/typings/generated/nrfutil/device/erase.d.ts +5 -0
  72. package/typings/generated/nrfutil/device/erase.d.ts.map +1 -0
  73. package/typings/generated/nrfutil/device/eraseBatch.d.ts +7 -0
  74. package/typings/generated/nrfutil/device/eraseBatch.d.ts.map +1 -0
  75. package/typings/generated/nrfutil/device/firmwareRead.d.ts +10 -0
  76. package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -0
  77. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts +9 -0
  78. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts.map +1 -0
  79. package/typings/generated/nrfutil/device/getCoreInfo.d.ts +22 -0
  80. package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -0
  81. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts +8 -0
  82. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts.map +1 -0
  83. package/typings/generated/nrfutil/device/getFwInfo.d.ts +31 -0
  84. package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -0
  85. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts +8 -0
  86. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts.map +1 -0
  87. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +13 -0
  88. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -0
  89. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts +8 -0
  90. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts.map +1 -0
  91. package/typings/generated/nrfutil/device/list.d.ts +19 -0
  92. package/typings/generated/nrfutil/device/list.d.ts.map +1 -0
  93. package/typings/generated/nrfutil/device/program.d.ts +27 -0
  94. package/typings/generated/nrfutil/device/program.d.ts.map +1 -0
  95. package/typings/generated/nrfutil/device/programBatch.d.ts +9 -0
  96. package/typings/generated/nrfutil/device/programBatch.d.ts.map +1 -0
  97. package/typings/generated/nrfutil/device/recover.d.ts +5 -0
  98. package/typings/generated/nrfutil/device/recover.d.ts.map +1 -0
  99. package/typings/generated/nrfutil/device/recoverBatch.d.ts +7 -0
  100. package/typings/generated/nrfutil/device/recoverBatch.d.ts.map +1 -0
  101. package/typings/generated/nrfutil/device/reset.d.ts +5 -0
  102. package/typings/generated/nrfutil/device/reset.d.ts.map +1 -0
  103. package/typings/generated/nrfutil/device/resetBatch.d.ts +8 -0
  104. package/typings/generated/nrfutil/device/resetBatch.d.ts.map +1 -0
  105. package/typings/generated/nrfutil/device/setMcuState.d.ts +6 -0
  106. package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -0
  107. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +5 -0
  108. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -0
  109. package/typings/generated/nrfutil/index.d.ts +11 -0
  110. package/typings/generated/nrfutil/index.d.ts.map +1 -0
  111. package/typings/generated/nrfutil/moduleVersion.d.ts +6 -0
  112. package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -0
  113. package/typings/generated/nrfutil/nrfutilLogger.d.ts +4 -0
  114. package/typings/generated/nrfutil/nrfutilLogger.d.ts.map +1 -0
  115. package/typings/generated/nrfutil/sandbox.d.ts +36 -0
  116. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -0
  117. package/typings/generated/nrfutil/sandboxTypes.d.ts +135 -0
  118. package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -0
  119. package/typings/generated/src/About/SupportCard.d.ts.map +1 -1
  120. package/typings/generated/src/App/App.d.ts.map +1 -1
  121. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +2 -6
  122. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
  123. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +2 -2
  124. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -1
  125. package/typings/generated/src/Device/deviceLibWrapper.d.ts +1 -4
  126. package/typings/generated/src/Device/deviceLibWrapper.d.ts.map +1 -1
  127. package/typings/generated/src/Device/deviceLister.d.ts +11 -16
  128. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
  129. package/typings/generated/src/Device/deviceLister.test.d.ts.map +1 -1
  130. package/typings/generated/src/Device/deviceSlice.d.ts +3 -3
  131. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
  132. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
  133. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
  134. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  135. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  136. package/typings/generated/src/Log/LogViewer.d.ts.map +1 -1
  137. package/typings/generated/src/Log/logSlice.d.ts +2 -3
  138. package/typings/generated/src/Log/logSlice.d.ts.map +1 -1
  139. package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
  140. package/typings/generated/src/utils/appDirs.d.ts +4 -4
  141. package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
  142. package/typings/generated/src/utils/logLibVersions.d.ts.map +1 -1
  143. package/typings/generated/src/utils/systemReport.d.ts +1 -1
  144. package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
  145. package/typings/generated/src/utils/usageData.d.ts +2 -0
  146. package/typings/generated/src/utils/usageData.d.ts.map +1 -1
  147. package/src/utils/describeVersion.ts +0 -21
  148. package/typings/generated/src/utils/describeVersion.d.ts +0 -4
  149. package/typings/generated/src/utils/describeVersion.d.ts.map +0 -1
@@ -0,0 +1,186 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import fs from 'fs';
8
+ import os from 'os';
9
+ import path from 'path';
10
+ import { v4 as uuid } from 'uuid';
11
+
12
+ import { Progress } from '../sandboxTypes';
13
+ import {
14
+ DeviceCore,
15
+ deviceSingleTaskEndOperationVoid,
16
+ DeviceTraits,
17
+ NrfutilDeviceWithSerialnumber,
18
+ ResetKind,
19
+ } from './common';
20
+
21
+ export type FileExtensions = 'zip' | 'hex';
22
+ export type FirmwareType = { buffer: Buffer; type: FileExtensions } | string;
23
+
24
+ export type ProgrammingOptions =
25
+ | JLinkProgrammingOptions
26
+ | McuBootProgrammingOptions
27
+ | NordicDfuProgrammingOptions;
28
+
29
+ export interface JLinkProgrammingOptions {
30
+ chipEraseMode?: 'ERASE_ALL' | 'ERASE_NONE';
31
+ reset?: ResetKind;
32
+ verify?: 'VERIFY_HASH' | 'VERIFY_NONE' | 'VERIFY_READ';
33
+ }
34
+
35
+ export interface McuBootProgrammingOptions {
36
+ mcuEndState?: 'NRFDL_MCU_STATE_APPLICATION' | 'NRFDL_MCU_STATE_PROGRAMMING';
37
+ netCoreUploadDelay?: number;
38
+ }
39
+
40
+ export interface NordicDfuProgrammingOptions {
41
+ mcuEndState?: 'NRFDL_MCU_STATE_APPLICATION' | 'NRFDL_MCU_STATE_PROGRAMMING';
42
+ }
43
+
44
+ export const isJLinkProgrammingOptions = (
45
+ options: ProgrammingOptions
46
+ ): options is JLinkProgrammingOptions =>
47
+ (options as JLinkProgrammingOptions).chipEraseMode !== undefined;
48
+
49
+ export const isMcuBootProgrammingOptions = (
50
+ options: ProgrammingOptions
51
+ ): options is McuBootProgrammingOptions =>
52
+ (options as McuBootProgrammingOptions).netCoreUploadDelay !== undefined;
53
+
54
+ export const isNordicDfuProgrammingOptions = (
55
+ options: ProgrammingOptions
56
+ ): options is NordicDfuProgrammingOptions =>
57
+ !isMcuBootProgrammingOptions(options) &&
58
+ (options as NordicDfuProgrammingOptions).mcuEndState !== undefined;
59
+
60
+ const deviceTraitsToArgs = (traits: DeviceTraits) => {
61
+ const args: string[] = [];
62
+ const traitsString = Object.keys(traits)
63
+ .map(trait => (traits[trait as keyof DeviceTraits] ? trait : null))
64
+ .filter(t => t !== null)
65
+ .join(',');
66
+
67
+ if (traitsString.length > 0) {
68
+ args.push('--traits');
69
+ args.push(traitsString);
70
+ }
71
+
72
+ return args;
73
+ };
74
+
75
+ const programmingOptionsToArgs = (options?: ProgrammingOptions) => {
76
+ if (!options) return [];
77
+
78
+ const args: string[] = [];
79
+
80
+ if (isJLinkProgrammingOptions(options)) {
81
+ if (options.chipEraseMode)
82
+ args.push(`chip_erase_mode=${options.chipEraseMode}`);
83
+ if (options.reset) args.push(`reset=${options.reset}`);
84
+ if (options.verify) args.push(`verify=${options.verify}`);
85
+ } else if (isMcuBootProgrammingOptions(options)) {
86
+ if (options.mcuEndState)
87
+ args.push(`mcu_end_state=${options.mcuEndState}`);
88
+ if (options.netCoreUploadDelay)
89
+ args.push(
90
+ `net_core_upload_delay=${Math.round(
91
+ options.netCoreUploadDelay
92
+ )}`
93
+ );
94
+ } else if (isNordicDfuProgrammingOptions(options)) {
95
+ if (options.mcuEndState)
96
+ args.push(`mcu_end_state=${options.mcuEndState}`);
97
+ }
98
+
99
+ return args.length > 0 ? ['--options', `${args.join(',')}`] : [];
100
+ };
101
+ const program = (
102
+ device: NrfutilDeviceWithSerialnumber,
103
+ firmwarePath: string,
104
+ onProgress?: (progress: Progress) => void,
105
+ core?: DeviceCore,
106
+ programmingOptions?: ProgrammingOptions,
107
+ controller?: AbortController
108
+ ) =>
109
+ deviceSingleTaskEndOperationVoid(
110
+ device,
111
+ 'program',
112
+ onProgress,
113
+ controller,
114
+ [
115
+ '--firmware',
116
+ firmwarePath,
117
+ ...deviceTraitsToArgs(device.traits),
118
+ ...(core ? ['--core', core] : []),
119
+ ...programmingOptionsToArgs(programmingOptions),
120
+ ]
121
+ );
122
+
123
+ const programBuffer = async (
124
+ device: NrfutilDeviceWithSerialnumber,
125
+ firmware: Buffer,
126
+ type: FileExtensions,
127
+ onProgress?: (progress: Progress) => void,
128
+ core?: DeviceCore,
129
+ programmingOptions?: ProgrammingOptions,
130
+ controller?: AbortController
131
+ ) => {
132
+ const saveTemp = (): string => {
133
+ let tempFilePath;
134
+ do {
135
+ tempFilePath = path.join(os.tmpdir(), `${uuid()}.${type}`);
136
+ } while (fs.existsSync(tempFilePath));
137
+
138
+ fs.writeFileSync(tempFilePath, firmware);
139
+
140
+ return tempFilePath;
141
+ };
142
+
143
+ const tempFilePath = saveTemp();
144
+ try {
145
+ await program(
146
+ device,
147
+ tempFilePath,
148
+ onProgress,
149
+ core,
150
+ programmingOptions,
151
+ controller
152
+ );
153
+ } catch (error) {
154
+ fs.unlinkSync(tempFilePath);
155
+ }
156
+ };
157
+
158
+ export default async (
159
+ device: NrfutilDeviceWithSerialnumber,
160
+ firmware: FirmwareType,
161
+ onProgress?: (progress: Progress) => void,
162
+ core?: DeviceCore,
163
+ programmingOptions?: ProgrammingOptions,
164
+ controller?: AbortController
165
+ ) => {
166
+ if (typeof firmware === 'string') {
167
+ await program(
168
+ device,
169
+ firmware,
170
+ onProgress,
171
+ core,
172
+ programmingOptions,
173
+ controller
174
+ );
175
+ } else {
176
+ await programBuffer(
177
+ device,
178
+ firmware.buffer,
179
+ firmware.type,
180
+ onProgress,
181
+ core,
182
+ programmingOptions,
183
+ controller
184
+ );
185
+ }
186
+ };
@@ -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 fs from 'fs';
8
+ import os from 'os';
9
+ import path from 'path';
10
+ import { v4 as uuid } from 'uuid';
11
+
12
+ import {
13
+ BatchOperationWrapper,
14
+ Callbacks,
15
+ convertDeviceCoreType,
16
+ convertProgrammingOptionsType,
17
+ ProgrammingOperation,
18
+ } from './batchTypes';
19
+ import { DeviceCore } from './common';
20
+ import { FirmwareType, ProgrammingOptions } from './program';
21
+
22
+ const program = (
23
+ firmware: string,
24
+ core: DeviceCore,
25
+ optionals?: {
26
+ programmingOptions?: ProgrammingOptions;
27
+ callbacks?: Callbacks;
28
+ }
29
+ ): BatchOperationWrapper<ProgrammingOperation> => ({
30
+ operation: {
31
+ core: convertDeviceCoreType(core),
32
+ operation: {
33
+ type: 'program',
34
+ firmware: {
35
+ file: firmware,
36
+ },
37
+ ...convertProgrammingOptionsType(optionals?.programmingOptions),
38
+ },
39
+ },
40
+ ...optionals?.callbacks,
41
+ });
42
+
43
+ export default (
44
+ firmware: FirmwareType,
45
+ core: DeviceCore,
46
+ optionals?: {
47
+ programmingOptions?: ProgrammingOptions;
48
+ callbacks?: Callbacks;
49
+ }
50
+ ) => {
51
+ if (typeof firmware === 'string') {
52
+ return program(firmware, core, optionals);
53
+ }
54
+
55
+ const saveTemp = (): string => {
56
+ let tempFilePath;
57
+ do {
58
+ tempFilePath = path.join(os.tmpdir(), `${uuid()}.${firmware.type}`);
59
+ } while (fs.existsSync(tempFilePath));
60
+
61
+ fs.writeFileSync(tempFilePath, firmware.buffer);
62
+
63
+ return tempFilePath;
64
+ };
65
+
66
+ const tempFilePath = saveTemp();
67
+
68
+ return program(tempFilePath, core, optionals);
69
+ };
@@ -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
+ 'recover',
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
+ RecoverOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore } from './common';
14
+
15
+ export default (
16
+ core?: DeviceCore,
17
+ optionals?: {
18
+ callbacks?: Callbacks;
19
+ }
20
+ ): BatchOperationWrapper<RecoverOperation> => ({
21
+ operation: {
22
+ core: convertDeviceCoreType(core),
23
+ operation: {
24
+ type: 'recover',
25
+ },
26
+ },
27
+ ...optionals?.callbacks,
28
+ });
@@ -0,0 +1,41 @@
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
+ ResetKind,
13
+ } from './common';
14
+
15
+ export default async (
16
+ device: NrfutilDeviceWithSerialnumber,
17
+ core?: DeviceCore,
18
+ resetKind?: ResetKind,
19
+ onProgress?: (progress: Progress) => void,
20
+ controller?: AbortController
21
+ ) => {
22
+ const args: string[] = [];
23
+
24
+ if (resetKind) {
25
+ args.push('--reset-kind');
26
+ args.push(resetKind);
27
+ }
28
+
29
+ if (core) {
30
+ args.push('--core');
31
+ args.push(core);
32
+ }
33
+
34
+ await deviceSingleTaskEndOperationVoid(
35
+ device,
36
+ 'reset',
37
+ onProgress,
38
+ controller,
39
+ args
40
+ );
41
+ };
@@ -0,0 +1,30 @@
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
+ ResetOperation,
12
+ } from './batchTypes';
13
+ import { DeviceCore, ResetKind } from './common';
14
+
15
+ export default (
16
+ core?: DeviceCore,
17
+ optionals?: {
18
+ reset?: ResetKind;
19
+ callbacks?: Callbacks;
20
+ }
21
+ ): BatchOperationWrapper<ResetOperation> => ({
22
+ operation: {
23
+ core: convertDeviceCoreType(core),
24
+ operation: {
25
+ type: 'reset',
26
+ option: optionals?.reset,
27
+ },
28
+ },
29
+ ...optionals?.callbacks,
30
+ });
@@ -0,0 +1,27 @@
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
+ deviceSingleTaskEndOperationVoid,
10
+ NrfutilDeviceWithSerialnumber,
11
+ } from './common';
12
+
13
+ export type McuState = 'Application' | 'Programming';
14
+
15
+ export default (
16
+ device: NrfutilDeviceWithSerialnumber,
17
+ state: McuState,
18
+ onProgress?: (progress: Progress) => void,
19
+ controller?: AbortController
20
+ ) =>
21
+ deviceSingleTaskEndOperationVoid(
22
+ device,
23
+ 'mcu-state-set',
24
+ onProgress,
25
+ controller,
26
+ [state]
27
+ );
@@ -0,0 +1,27 @@
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
+ region: 'All' | 'SecureRegions' | 'Region0' | 'Region0Region1',
17
+ core?: DeviceCore,
18
+ onProgress?: (progress: Progress) => void,
19
+ controller?: AbortController
20
+ ) =>
21
+ deviceSingleTaskEndOperationVoid(
22
+ device,
23
+ 'protection-set',
24
+ onProgress,
25
+ controller,
26
+ [region, ...(core ? ['--core', core] : [])]
27
+ );
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ export { default as NrfutilDeviceLib } from './device/device';
8
+
9
+ export type {
10
+ DeviceCore,
11
+ DeviceTraits,
12
+ ProtectionStatus,
13
+ SerialPort as DeviceSerialPort,
14
+ NrfutilDevice,
15
+ } from './device/common';
16
+
17
+ export type { DeviceCoreInfo } from './device/getCoreInfo';
18
+ export type { ImageType } from './device/getFwInfo';
19
+
20
+ export { default as prepareSandbox } from './sandbox';
21
+ export { NrfutilSandbox } from './sandbox';
22
+ export type { Progress, SemanticVersion } from './sandboxTypes';
23
+ export type { Batch as DeviceBatch } from './device/batch';
24
+ export type { Callbacks as BatchCallbacks } from './device/batchTypes';
25
+ export type { GetProtectionStatusResult } from './device/getProtectionStatus';
@@ -0,0 +1,57 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import {
8
+ Dependency,
9
+ isIncrementalVersion,
10
+ isSemanticVersion,
11
+ isStringVersion,
12
+ SubDependency,
13
+ } from './sandboxTypes';
14
+
15
+ export const describeVersion = (version?: SubDependency | string) => {
16
+ if (typeof version === 'string') {
17
+ return version;
18
+ }
19
+
20
+ if (isSemanticVersion(version)) {
21
+ return `${version.version.major}.${version.version.minor}.${version.version.patch}`;
22
+ }
23
+
24
+ if (isIncrementalVersion(version) || isStringVersion(version)) {
25
+ return String(version.version);
26
+ }
27
+
28
+ return 'Unknown';
29
+ };
30
+
31
+ type KnownModule = 'nrfdl' | 'jprog' | 'JlinkARM';
32
+
33
+ const findTopLevel = (module: KnownModule, dependencies: Dependency[]) =>
34
+ dependencies.find(dependency => dependency.name === module);
35
+
36
+ const findInDependencies = (
37
+ module: KnownModule,
38
+ dependencies: Dependency[]
39
+ ) => {
40
+ if (dependencies.length > 0) {
41
+ return resolveModuleVersion(
42
+ module,
43
+ dependencies.flatMap(dependency => [
44
+ ...(dependency.dependencies ?? []),
45
+ ...(dependency.plugins?.flatMap(
46
+ plugin => plugin.dependencies
47
+ ) ?? []),
48
+ ])
49
+ );
50
+ }
51
+ };
52
+
53
+ export const resolveModuleVersion = (
54
+ module: KnownModule,
55
+ versions: Dependency[] = []
56
+ ): Dependency | SubDependency | undefined =>
57
+ findTopLevel(module, versions) ?? findInDependencies(module, versions);
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import winston from 'winston';
8
+
9
+ let nrfutilLogger: winston.Logger | undefined;
10
+
11
+ export const setNrfutilLogger = (logger: winston.Logger) => {
12
+ nrfutilLogger = logger;
13
+ };
14
+
15
+ export const getNrfutilLogger = () => nrfutilLogger;