@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nordicsemiconductor/pc-nrfconnect-shared",
3
- "version": "176.0.0",
3
+ "version": "178.0.0",
4
4
  "description": "Shared commodities for developing pc-nrfconnect-* packages",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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;
@@ -282,6 +282,7 @@ export const startWatchingDevices =
282
282
  (typeof waitForDevice.when === 'function' &&
283
283
  waitForDevice.when(device))
284
284
  ) {
285
+ dispatch(setArrivedButWrongWhen(undefined));
285
286
  dispatch(
286
287
  setLastArrivedDeviceId(
287
288
  deviceWithPersistedData.id
@@ -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 { clearWaitForDevice, setWaitForDevice } from './deviceAutoSelectSlice';
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: 'applicationMode',
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(device, firmwareOption, onProgress)
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(switchToApplicationMode(device, resolve, reject));
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: 'always' | 'applicationMode' | 'dfuBootLoaderMode' | 'sameTraits' | ((device: Device) => boolean);
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,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EACE,QAAQ,GACR,iBAAiB,GACjB,mBAAmB,GACnB,YAAY,GACZ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACpC,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
+ {"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,CA0P1B,CAAC;AAwDN,eAAO,MAAM,mBAAmB,cAAe,MAAM,IAAI,SAGxD,CAAC"}
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;AAG/C,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,YAiBrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,WAAY,MAAM,YAOlD,CAAC;AA2GF,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,KACnC,QAsBF,CAAC;AA8TN,eAAO,MAAM,eAAe,gBACX,QAAQ,EAAE,+BAExB,WAuCD,CAAC;;;;AAEH,wBAEE"}
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"}