@nordicsemiconductor/pc-nrfconnect-shared 176.0.0 → 178.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 +18 -0
- package/package.json +1 -1
- package/scripts/nordic-publish.ts +0 -15
- package/src/Device/deviceAutoSelectSlice.ts +8 -6
- package/src/Device/deviceLister.ts +1 -0
- package/src/Device/sdfuOperations.ts +43 -16
- package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts +2 -1
- package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
- package/typings/generated/src/Device/sdfuOperations.d.ts +3 -2
- package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
package/Changelog.md
CHANGED
|
@@ -7,6 +7,24 @@ This project does _not_ adhere to
|
|
|
7
7
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html) but contrary to it
|
|
8
8
|
every new version is a new major version.
|
|
9
9
|
|
|
10
|
+
## 178.0.0 - 2024-06-11
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- `isDeviceInDFUBootloader` now also expect nordic DFU Trait to be true
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Wait for device `when='dfuBootLoaderMode'` will wait until nordic DFU Trait
|
|
19
|
+
is also present
|
|
20
|
+
|
|
21
|
+
## 177.0.0 - 2024-05-28
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Apps can no control better when to auto reconnect after programming with
|
|
26
|
+
`sdfuDeviceSetup`. This is optional. Defaults have nit changed
|
|
27
|
+
|
|
10
28
|
## 176.0.0 - 2024-05-06
|
|
11
29
|
|
|
12
30
|
### Added
|
package/package.json
CHANGED
|
@@ -17,21 +17,6 @@ import { AppInfo, SourceJson } from '../ipc/MetaFiles';
|
|
|
17
17
|
import { PackageJsonApp } from '../ipc/schema/packageJson';
|
|
18
18
|
import checkAppProperties from './check-app-properties';
|
|
19
19
|
|
|
20
|
-
interface LegacyAppInfo {
|
|
21
|
-
['dist-tags']?: {
|
|
22
|
-
latest?: string;
|
|
23
|
-
};
|
|
24
|
-
versions?: {
|
|
25
|
-
[version: string]: {
|
|
26
|
-
dist: {
|
|
27
|
-
publishTimestamp?: string;
|
|
28
|
-
tarball: string;
|
|
29
|
-
shasum: string;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
20
|
interface App {
|
|
36
21
|
filename: string;
|
|
37
22
|
name: string;
|
|
@@ -9,14 +9,16 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
|
9
9
|
import type { AppThunk, RootState } from '../store';
|
|
10
10
|
import type { Device } from './deviceSlice';
|
|
11
11
|
|
|
12
|
+
export type WaitForDeviceWhen =
|
|
13
|
+
| 'always'
|
|
14
|
+
| 'applicationMode'
|
|
15
|
+
| 'dfuBootLoaderMode'
|
|
16
|
+
| 'sameTraits'
|
|
17
|
+
| ((device: Device) => boolean);
|
|
18
|
+
|
|
12
19
|
export interface WaitForDevice {
|
|
13
20
|
timeout: number;
|
|
14
|
-
when:
|
|
15
|
-
| 'always'
|
|
16
|
-
| 'applicationMode'
|
|
17
|
-
| 'dfuBootLoaderMode'
|
|
18
|
-
| 'sameTraits'
|
|
19
|
-
| ((device: Device) => boolean);
|
|
21
|
+
when: WaitForDeviceWhen;
|
|
20
22
|
once: boolean;
|
|
21
23
|
skipRefetchDeviceInfo?: boolean;
|
|
22
24
|
onSuccess?: (device: Device) => void;
|
|
@@ -14,7 +14,11 @@ import { McuState } from '../../nrfutil/device/setMcuState';
|
|
|
14
14
|
import logger from '../logging';
|
|
15
15
|
import { AppThunk, RootState } from '../store';
|
|
16
16
|
import { getAppFile } from '../utils/appDirs';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
clearWaitForDevice,
|
|
19
|
+
setWaitForDevice,
|
|
20
|
+
WaitForDeviceWhen,
|
|
21
|
+
} from './deviceAutoSelectSlice';
|
|
18
22
|
import { DeviceSetup, DfuEntry } from './deviceSetup';
|
|
19
23
|
import { openDeviceSetupDialog } from './deviceSetupSlice';
|
|
20
24
|
import { Device } from './deviceSlice';
|
|
@@ -43,7 +47,8 @@ export const isDeviceInDFUBootloader = (device: Device) => {
|
|
|
43
47
|
const { descriptor: d } = device.usb.device;
|
|
44
48
|
return (
|
|
45
49
|
d.idVendor === NORDIC_VENDOR_ID &&
|
|
46
|
-
d.idProduct === NORDIC_DFU_PRODUCT_ID
|
|
50
|
+
d.idProduct === NORDIC_DFU_PRODUCT_ID &&
|
|
51
|
+
!!device.traits.nordicDfu
|
|
47
52
|
);
|
|
48
53
|
}
|
|
49
54
|
|
|
@@ -147,16 +152,20 @@ const switchToDeviceMode =
|
|
|
147
152
|
device: Device,
|
|
148
153
|
mcuState: McuState,
|
|
149
154
|
onSuccess: (device: Device) => void,
|
|
150
|
-
onFail: (reason?: unknown) => void
|
|
155
|
+
onFail: (reason?: unknown) => void,
|
|
156
|
+
autoReconnectWhen?: WaitForDeviceWhen
|
|
151
157
|
): AppThunk =>
|
|
152
158
|
dispatch => {
|
|
159
|
+
if (autoReconnectWhen === undefined) {
|
|
160
|
+
autoReconnectWhen =
|
|
161
|
+
mcuState === 'Application'
|
|
162
|
+
? 'applicationMode'
|
|
163
|
+
: 'dfuBootLoaderMode';
|
|
164
|
+
}
|
|
153
165
|
dispatch(
|
|
154
166
|
setWaitForDevice({
|
|
155
167
|
timeout: 10000,
|
|
156
|
-
when:
|
|
157
|
-
mcuState === 'Application'
|
|
158
|
-
? 'applicationMode'
|
|
159
|
-
: 'dfuBootLoaderMode',
|
|
168
|
+
when: autoReconnectWhen,
|
|
160
169
|
once: true,
|
|
161
170
|
onSuccess,
|
|
162
171
|
onFail,
|
|
@@ -199,7 +208,8 @@ export const switchToApplicationMode =
|
|
|
199
208
|
(
|
|
200
209
|
device: Device,
|
|
201
210
|
onSuccess: (device: Device) => void,
|
|
202
|
-
onFail: (reason?: unknown) => void
|
|
211
|
+
onFail: (reason?: unknown) => void,
|
|
212
|
+
autoReconnectWhen?: WaitForDeviceWhen
|
|
203
213
|
): AppThunk =>
|
|
204
214
|
dispatch => {
|
|
205
215
|
if (isDeviceInDFUBootloader(device)) {
|
|
@@ -216,7 +226,8 @@ export const switchToApplicationMode =
|
|
|
216
226
|
);
|
|
217
227
|
else onSuccess(d);
|
|
218
228
|
},
|
|
219
|
-
onFail
|
|
229
|
+
onFail,
|
|
230
|
+
autoReconnectWhen
|
|
220
231
|
)
|
|
221
232
|
);
|
|
222
233
|
} else {
|
|
@@ -408,7 +419,8 @@ const programInDFUBootloader =
|
|
|
408
419
|
dfu: DfuEntry,
|
|
409
420
|
onProgress: (progress: number, message?: string) => void,
|
|
410
421
|
onSuccess: (device: Device) => void,
|
|
411
|
-
onFail: (reason?: unknown) => void
|
|
422
|
+
onFail: (reason?: unknown) => void,
|
|
423
|
+
autoReconnectAfterProgrammingWhen: WaitForDeviceWhen = 'applicationMode'
|
|
412
424
|
): AppThunk<RootState, Promise<void>> =>
|
|
413
425
|
async dispatch => {
|
|
414
426
|
logger.debug(`${device.serialNumber} on is now in DFU-Bootloader...`);
|
|
@@ -494,7 +506,7 @@ const programInDFUBootloader =
|
|
|
494
506
|
dispatch(
|
|
495
507
|
setWaitForDevice({
|
|
496
508
|
timeout: DEFAULT_DEVICE_WAIT_TIME,
|
|
497
|
-
when:
|
|
509
|
+
when: autoReconnectAfterProgrammingWhen,
|
|
498
510
|
once: true,
|
|
499
511
|
onSuccess,
|
|
500
512
|
onFail,
|
|
@@ -518,7 +530,8 @@ const programDeviceWithFw =
|
|
|
518
530
|
(
|
|
519
531
|
device: Device,
|
|
520
532
|
selectedFw: DfuEntry,
|
|
521
|
-
onProgress: (progress: number, message?: string) => void
|
|
533
|
+
onProgress: (progress: number, message?: string) => void,
|
|
534
|
+
autoReconnectAfterProgrammingWhen: WaitForDeviceWhen = 'applicationMode'
|
|
522
535
|
): AppThunk<RootState, Promise<Device>> =>
|
|
523
536
|
dispatch =>
|
|
524
537
|
new Promise<Device>((resolve, reject) => {
|
|
@@ -529,7 +542,8 @@ const programDeviceWithFw =
|
|
|
529
542
|
selectedFw,
|
|
530
543
|
onProgress,
|
|
531
544
|
resolve,
|
|
532
|
-
reject
|
|
545
|
+
reject,
|
|
546
|
+
autoReconnectAfterProgrammingWhen
|
|
533
547
|
)
|
|
534
548
|
);
|
|
535
549
|
logger.debug('DFU finished: ', d);
|
|
@@ -542,7 +556,8 @@ const programDeviceWithFw =
|
|
|
542
556
|
|
|
543
557
|
export const sdfuDeviceSetup = (
|
|
544
558
|
dfuFirmware: DfuEntry[],
|
|
545
|
-
needSerialport = false
|
|
559
|
+
needSerialport = false,
|
|
560
|
+
autoReconnectAfterProgrammingWhen: WaitForDeviceWhen = 'applicationMode'
|
|
546
561
|
): DeviceSetup => ({
|
|
547
562
|
supportsProgrammingMode: (device, deviceInfo) =>
|
|
548
563
|
((!!deviceInfo?.dfuTriggerVersion &&
|
|
@@ -555,7 +570,12 @@ export const sdfuDeviceSetup = (
|
|
|
555
570
|
description: firmwareOption.description,
|
|
556
571
|
programDevice: onProgress => dispatch =>
|
|
557
572
|
dispatch(
|
|
558
|
-
programDeviceWithFw(
|
|
573
|
+
programDeviceWithFw(
|
|
574
|
+
device,
|
|
575
|
+
firmwareOption,
|
|
576
|
+
onProgress,
|
|
577
|
+
autoReconnectAfterProgrammingWhen
|
|
578
|
+
)
|
|
559
579
|
),
|
|
560
580
|
})),
|
|
561
581
|
isExpectedFirmware: (device, deviceInfo) => () => {
|
|
@@ -580,7 +600,14 @@ export const sdfuDeviceSetup = (
|
|
|
580
600
|
},
|
|
581
601
|
tryToSwitchToApplicationMode: device => dispatch =>
|
|
582
602
|
new Promise<Device>((resolve, reject) => {
|
|
583
|
-
dispatch(
|
|
603
|
+
dispatch(
|
|
604
|
+
switchToApplicationMode(
|
|
605
|
+
device,
|
|
606
|
+
resolve,
|
|
607
|
+
reject,
|
|
608
|
+
autoReconnectAfterProgrammingWhen
|
|
609
|
+
)
|
|
610
|
+
);
|
|
584
611
|
}),
|
|
585
612
|
});
|
|
586
613
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { AppThunk, RootState } from '../store';
|
|
2
2
|
import type { Device } from './deviceSlice';
|
|
3
|
+
export type WaitForDeviceWhen = 'always' | 'applicationMode' | 'dfuBootLoaderMode' | 'sameTraits' | ((device: Device) => boolean);
|
|
3
4
|
export interface WaitForDevice {
|
|
4
5
|
timeout: number;
|
|
5
|
-
when:
|
|
6
|
+
when: WaitForDeviceWhen;
|
|
6
7
|
once: boolean;
|
|
7
8
|
skipRefetchDeviceInfo?: boolean;
|
|
8
9
|
onSuccess?: (device: Device) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceAutoSelectSlice.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceAutoSelectSlice.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,
|
|
1
|
+
{"version":3,"file":"deviceAutoSelectSlice.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceAutoSelectSlice.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GACvB,QAAQ,GACR,iBAAiB,GACjB,mBAAmB,GACnB,YAAY,GACZ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AA4ED,eAAO,MACH,OAAO,6EAEH,uBAAuB,2GACvB,yBAAyB,8GACzB,mBAAmB,2HACnB,mBAAmB,2HACnB,eAAe,oGACf,gBAAgB,2GAChB,sBAAsB,8HACtB,sBAAsB,+HACtB,kBAAkB,4DAjBsC,IAAI,wCAmB3D,CAAC;AAEV,eAAO,MAAM,qBAAqB,UAAW,SAAS,uBACrB,CAAC;AAElC,eAAO,MAAM,eAAe,UAAW,SAAS,YACT,CAAC;AAExC,eAAO,MAAM,wBAAwB,UAAW,SAAS,YAElB,CAAC;AAExC,eAAO,MAAM,0BAA0B,UAAW,SAAS,YACE,CAAC;AAE9D,eAAO,MAAM,oBAAoB,UAAW,SAAS,uBACT,CAAC;AAE7C,eAAO,MAAM,gBAAgB,UAAW,SAAS,8BACT,CAAC;AAEzC,eAAO,MAAM,sBAAsB,UAAW,SAAS,uBACT,CAAC;AAC/C,eAAO,MAAM,sBAAsB,UAAW,SAAS,wBACT,CAAC;AAE/C,eAAO,MAAM,kBAAkB,QAAO,QAKrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceLister.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceLister.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAG1E,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAcpD,OAAO,EAEH,MAAM,EAIT,MAAM,eAAe,CAAC;AAsDvB,eAAO,MAAM,QAAQ,WAAY,MAAM,eAAe,UAAU,YAI3D,CAAC;AA8BN,eAAO,MAAM,oBAAoB,iBACf,YAAY,kBACV,YAAY,YAS3B,CAAC;AAkCN,eAAO,MAAM,oBAAoB,kBAEV,YAAY,8BACC,MAAM,KAAK,IAAI,iCACZ,MAAM,KAAK,IAAI,sBAC1B,MAAM,IAAI,2BACL,MAAM,kBAAkB,OAAO,KAAK,IAAI,KAClE,SAAS,SAAS,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"deviceLister.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceLister.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAG1E,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAcpD,OAAO,EAEH,MAAM,EAIT,MAAM,eAAe,CAAC;AAsDvB,eAAO,MAAM,QAAQ,WAAY,MAAM,eAAe,UAAU,YAI3D,CAAC;AA8BN,eAAO,MAAM,oBAAoB,iBACf,YAAY,kBACV,YAAY,YAS3B,CAAC;AAkCN,eAAO,MAAM,oBAAoB,kBAEV,YAAY,8BACC,MAAM,KAAK,IAAI,iCACZ,MAAM,KAAK,IAAI,sBAC1B,MAAM,IAAI,2BACL,MAAM,kBAAkB,OAAO,KAAK,IAAI,KAClE,SAAS,SAAS,EAAE,IAAI,CA2P1B,CAAC;AAwDN,eAAO,MAAM,mBAAmB,cAAe,MAAM,IAAI,SAGxD,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { AppThunk } from '../store';
|
|
3
|
+
import { WaitForDeviceWhen } from './deviceAutoSelectSlice';
|
|
3
4
|
import { DeviceSetup, DfuEntry } from './deviceSetup';
|
|
4
5
|
import { Device } from './deviceSlice';
|
|
5
6
|
import { DfuImage } from './initPacket';
|
|
6
7
|
export declare const isDeviceInDFUBootloader: (device: Device) => boolean;
|
|
7
8
|
export declare const ensureBootloaderMode: (device: Device) => boolean;
|
|
8
9
|
export declare const switchToBootloaderMode: (device: Device, onSuccess: (device: Device) => void, onFail: (reason?: unknown) => void) => AppThunk;
|
|
9
|
-
export declare const switchToApplicationMode: (device: Device, onSuccess: (device: Device) => void, onFail: (reason?: unknown) => void) => AppThunk;
|
|
10
|
-
export declare const sdfuDeviceSetup: (dfuFirmware: DfuEntry[], needSerialport?: boolean) => DeviceSetup;
|
|
10
|
+
export declare const switchToApplicationMode: (device: Device, onSuccess: (device: Device) => void, onFail: (reason?: unknown) => void, autoReconnectWhen?: WaitForDeviceWhen) => AppThunk;
|
|
11
|
+
export declare const sdfuDeviceSetup: (dfuFirmware: DfuEntry[], needSerialport?: boolean, autoReconnectAfterProgrammingWhen?: WaitForDeviceWhen) => DeviceSetup;
|
|
11
12
|
declare const _default: {
|
|
12
13
|
createDfuZipBuffer: (dfuImages: DfuImage[]) => Promise<Buffer>;
|
|
13
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdfuOperations.d.ts","sourceRoot":"","sources":["../../../../src/Device/sdfuOperations.ts"],"names":[],"mappings":";AAcA,OAAO,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"sdfuOperations.d.ts","sourceRoot":"","sources":["../../../../src/Device/sdfuOperations.ts"],"names":[],"mappings":";AAcA,OAAO,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAE/C,OAAO,EAGH,iBAAiB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAGH,QAAQ,EAIX,MAAM,cAAc,CAAC;AAUtB,eAAO,MAAM,uBAAuB,WAAY,MAAM,YAkBrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,WAAY,MAAM,YAOlD,CAAC;AA+GF,eAAO,MAAM,sBAAsB,WAEnB,MAAM,sBACM,MAAM,KAAK,IAAI,oBACjB,OAAO,KAAK,IAAI,KACnC,QAoBF,CAAC;AAEN,eAAO,MAAM,uBAAuB,WAEpB,MAAM,sBACM,MAAM,KAAK,IAAI,oBACjB,OAAO,KAAK,IAAI,sBACd,iBAAiB,KACtC,QAuBF,CAAC;AAiUN,eAAO,MAAM,eAAe,gBACX,QAAQ,EAAE,gEAEY,iBAAiB,KACrD,WAmDD,CAAC;;;;AAEH,wBAEE"}
|