Skip to content

Commit ce2144c

Browse files
committed
NCD-747: Refactor definition loading, add "Reset to default" button
* Refactor arbritation/selection of board configuration definitions. Prepare for dynamic loading of json-files. * Make default configuration part of config slice * Add a "Reset to board default"-button to the sidebar.
1 parent 4290a31 commit ce2144c

File tree

5 files changed

+189
-82
lines changed

5 files changed

+189
-82
lines changed

src/SidePanel.tsx

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import React, { useState } from 'react';
8-
import { useSelector } from 'react-redux';
8+
import { useDispatch, useSelector } from 'react-redux';
99
import {
1010
Button,
1111
CollapsibleGroup,
@@ -16,15 +16,23 @@ import {
1616
import { NrfutilDeviceLib } from '@nordicsemiconductor/pc-nrfconnect-shared/nrfutil/device';
1717

1818
import ConfigDataPreview from './features/ConfigDataPreview/ConfigDataPreview';
19-
import { getConfigArray } from './features/Configuration/boardControllerConfigSlice';
19+
import {
20+
getConfigArray,
21+
getDefaultConfig,
22+
setConfig,
23+
setPmicConfig,
24+
} from './features/Configuration/boardControllerConfigSlice';
2025

2126
export default () => {
2227
logger.debug('Rendering SidePanel');
2328

2429
const [isWriting, setWriting] = useState(false);
2530

31+
const dispatch = useDispatch();
32+
2633
const device = useSelector(selectedDevice);
2734
const configData = useSelector(getConfigArray);
35+
const defaultConfig = useSelector(getDefaultConfig);
2836

2937
return (
3038
<SidePanel className="side-panel">
@@ -50,6 +58,31 @@ export default () => {
5058
>
5159
Write config
5260
</Button>
61+
<Button
62+
disabled={!device || isWriting || !defaultConfig}
63+
variant="secondary"
64+
className="tw-w-full"
65+
onClick={() => {
66+
logger.info('Reset to default');
67+
const { pins, pmicPorts } = defaultConfig;
68+
if (pins) {
69+
dispatch(
70+
setConfig({
71+
boardControllerConfig: pins,
72+
})
73+
);
74+
}
75+
if (pmicPorts) {
76+
dispatch(
77+
setPmicConfig({
78+
pmicConfig: pmicPorts,
79+
})
80+
);
81+
}
82+
}}
83+
>
84+
Load default config
85+
</Button>
5386
</CollapsibleGroup>
5487
<CollapsibleGroup defaultCollapsed heading="Configuration data">
5588
<ConfigDataPreview enabled />

src/app/DeviceSelector.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919

2020
import {
2121
clearConfig,
22+
clearDefaultConfig,
2223
clearHardwareConfig,
2324
clearPmicConfig,
2425
setHardwareConfig,
@@ -114,6 +115,7 @@ const onDeviceDeselected = (dispatch: AppDispatch) => () => {
114115
dispatch(clearConfig());
115116
dispatch(clearPmicConfig());
116117
dispatch(clearHardwareConfig());
118+
dispatch(clearDefaultConfig());
117119
};
118120

119121
export default () => {

src/features/Configuration/Configuration.tsx

Lines changed: 55 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,26 @@ import {
1515
} from '@nordicsemiconductor/pc-nrfconnect-shared';
1616

1717
import BoardControllerConfigDefinition from '../../common/boards/BoardControllerConfigDefinition';
18-
import nrf54h20json from '../../common/boards/nrf_PCA10145_54H20.json';
19-
import nrf9161v091json from '../../common/boards/nrf_PCA10153_0.9.1_9161.json';
20-
import nrf9161v0100json from '../../common/boards/nrf_PCA10153_0.10.0_9161.json';
21-
import nrf54l15v020json from '../../common/boards/nrf_PCA10156_0.2.0.json';
22-
import nrf54l15v030json from '../../common/boards/nrf_PCA10156_0.3.0.json';
23-
import nrf9151v020json from '../../common/boards/nrf_PCA10171_0.2.0_9151.json';
2418
import ConfigSlideSelector from '../ConfigSlideSelector/ConfigSlideSelector';
2519
import ConfigSwitch from '../ConfigSwitch/ConfigSwitch';
2620
import { getBoardRevisionSemver } from '../Device/deviceSlice';
2721
import VCOMConfiguration from '../VCOMConfiguration/VCOMConfiguration';
2822
import VoltageConfiguration from '../VoltageConfiguration/VoltageConfiguration';
2923
import {
24+
getDefaultConfig,
3025
getHardwareConfig,
3126
setConfig,
27+
setDefaultConfig,
3228
setPmicConfig,
3329
} from './boardControllerConfigSlice';
30+
import { getBoardDefinition } from './boardDefinitions';
3431
import { BoardConfiguration } from './hardwareConfiguration';
3532

3633
interface BoardControllerProps {
3734
active: boolean;
3835
}
3936

4037
const BoardController = ({ active }: BoardControllerProps) => {
41-
const typednrf9161json =
42-
nrf9161v0100json as BoardControllerConfigDefinition;
43-
const typednrf9161v091 = nrf9161v091json as BoardControllerConfigDefinition;
44-
const typednrf54l15v020json =
45-
nrf54l15v020json as BoardControllerConfigDefinition;
46-
const typednrf54l15v030json =
47-
nrf54l15v030json as BoardControllerConfigDefinition;
48-
const typednrf54h20json = nrf54h20json as BoardControllerConfigDefinition;
49-
const typednrf9151v020json =
50-
nrf9151v020json as BoardControllerConfigDefinition;
51-
5238
const dispatch = useDispatch();
5339

5440
useEffect(() => {
@@ -65,74 +51,36 @@ const BoardController = ({ active }: BoardControllerProps) => {
6551
const device: Device | undefined = useSelector(selectedDevice);
6652
const boardRevision = useSelector(getBoardRevisionSemver);
6753
const hardwareConfig = useSelector(getHardwareConfig);
54+
const defaultConfig = useSelector(getDefaultConfig);
6855

6956
if (device) {
7057
logDeviceVersion(device, boardRevision);
7158

72-
switch (device?.devkit?.boardVersion) {
73-
case 'PCA10156':
74-
// nRF54L15
75-
if (boardRevision === '0.3.0') {
76-
setInitialConfig(
77-
dispatch,
78-
hardwareConfig,
79-
typednrf54l15v030json
80-
);
81-
return BuildGui(typednrf54l15v030json);
82-
}
59+
const definition = getBoardDefinition(device, boardRevision);
8360

84-
// Default is revision 0.2.0 or 0.2.1
85-
setInitialConfig(
61+
if (definition.boardControllerConfigDefinition) {
62+
if (!defaultConfig.pins && !defaultConfig.pmicPorts) {
63+
loadDefaultConfig(
8664
dispatch,
87-
hardwareConfig,
88-
typednrf54l15v020json
65+
definition.boardControllerConfigDefinition
8966
);
90-
return BuildGui(typednrf54l15v020json);
91-
92-
case 'PCA10153':
93-
// nRF9161
94-
if (boardRevision === '0.10.0') {
95-
setInitialConfig(
96-
dispatch,
97-
hardwareConfig,
98-
typednrf9161json
99-
);
100-
return BuildGui(typednrf9161json);
101-
}
102-
if (boardRevision === '0.9.0' || boardRevision === '0.9.1') {
103-
setInitialConfig(
104-
dispatch,
105-
hardwareConfig,
106-
typednrf9161v091
107-
);
108-
return BuildGui(typednrf9161v091);
109-
}
110-
if (!boardRevision) {
111-
return Spinner();
112-
}
113-
114-
return UnrecognizedBoardRevision();
115-
116-
case 'PCA10145':
117-
// nRF54H20
118-
setInitialConfig(dispatch, hardwareConfig, typednrf54h20json);
119-
return BuildGui(typednrf54h20json);
67+
}
68+
setInitialConfig(dispatch, hardwareConfig, defaultConfig);
69+
return BuildGui(definition.boardControllerConfigDefinition);
70+
}
12071

121-
case 'PCA10171':
122-
// nRF9151
123-
setInitialConfig(
124-
dispatch,
125-
hardwareConfig,
126-
typednrf9151v020json
127-
);
128-
return BuildGui(typednrf9151v020json);
72+
if (definition.controlFlag?.noRevision) {
73+
return Spinner();
74+
}
12975

130-
default:
131-
return UnrecognizedBoard();
76+
if (definition.controlFlag?.unknownRevision) {
77+
return UnrecognizedBoardRevision();
13278
}
133-
} else {
134-
return NoBoardSelected();
79+
80+
return UnrecognizedBoard();
13581
}
82+
83+
return NoBoardSelected();
13684
};
13785

13886
const NoBoardSelected = () => (
@@ -149,7 +97,16 @@ const NoBoardSelected = () => (
14997
target="_blank"
15098
rel="noreferrer"
15199
>
152-
nRF9161DK (Rev. 0.9.0 and later)
100+
nRF9161-DK (Rev. 0.9.0 and later)
101+
</a>
102+
</li>
103+
<li>
104+
<a
105+
href="https://www.nordicsemi.com/Products/nRF9151"
106+
target="_blank"
107+
rel="noreferrer"
108+
>
109+
nRF9151-DK
153110
</a>
154111
</li>
155112
</ul>
@@ -172,7 +129,7 @@ const UnrecognizedBoardRevision = () => (
172129
<div>
173130
<p>
174131
This revision of the development kit is not supported. Update to the
175-
latest version of nRF Connect Board Configurator // FIXME
132+
latest version of nRF Connect Board Configurator
176133
</p>
177134
</div>
178135
);
@@ -247,13 +204,13 @@ const BuildGui = (boardJson: BoardControllerConfigDefinition) => {
247204
);
248205
};
249206

250-
function setInitialConfig(
207+
function loadDefaultConfig(
251208
dispatch: AppDispatch,
252-
hardwareConfig: BoardConfiguration,
253209
boardJson: BoardControllerConfigDefinition
254210
) {
255211
if (!boardJson?.defaults) {
256212
logger.warn('No defaults found in board definition JSON');
213+
return;
257214
}
258215

259216
// Create defaults map
@@ -267,14 +224,32 @@ function setInitialConfig(
267224
])
268225
);
269226

227+
dispatch(
228+
setDefaultConfig({
229+
defaultConfig: {
230+
pins: defaultConfig,
231+
pmicPorts: defaultPmicConfig,
232+
},
233+
})
234+
);
235+
}
236+
237+
function setInitialConfig(
238+
dispatch: AppDispatch,
239+
hardwareConfig: BoardConfiguration,
240+
defaultBoardConfig: BoardConfiguration
241+
) {
242+
const { pins: defaultPinConfig, pmicPorts: defaultPmicConfig } =
243+
defaultBoardConfig;
244+
270245
// Merge with currently read hardware config
271246
const mergedPinConfig = new Map([
272-
...defaultConfig,
247+
...(defaultPinConfig || []),
273248
...(hardwareConfig.pins || []),
274249
]);
275250

276251
const mergedPmicConfig = new Map([
277-
...defaultPmicConfig,
252+
...(defaultPmicConfig || []),
278253
...(hardwareConfig.pmicPorts || []),
279254
]);
280255

src/features/Configuration/boardControllerConfigSlice.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ interface ConfigState {
1313
boardControllerConfigData: Map<number, boolean>;
1414
pmicConfigData: Map<number, number>;
1515
hardwareConfig: BoardConfiguration;
16+
defaultConfig: BoardConfiguration;
1617
}
1718

1819
// nRF54H20 default config
@@ -21,6 +22,7 @@ const initialState: ConfigState = {
2122
// This might be needed pmicConfigData: new Map([[1, 1800]]),
2223
pmicConfigData: new Map([]),
2324
hardwareConfig: {},
25+
defaultConfig: {},
2426
};
2527

2628
const boardControllerConfigSlice = createSlice({
@@ -81,6 +83,18 @@ const boardControllerConfigSlice = createSlice({
8183
clearHardwareConfig(state) {
8284
state.hardwareConfig = {};
8385
},
86+
setDefaultConfig(
87+
state,
88+
{
89+
payload: { defaultConfig },
90+
}: PayloadAction<{ defaultConfig: BoardConfiguration }>
91+
) {
92+
state.defaultConfig = defaultConfig;
93+
},
94+
95+
clearDefaultConfig(state) {
96+
state.defaultConfig = {};
97+
},
8498
},
8599
});
86100

@@ -105,6 +119,9 @@ export const getPmicConfigData = (state: RootState) =>
105119
export const getHardwareConfig = (state: RootState) =>
106120
state.app.boardControllerConfig.hardwareConfig;
107121

122+
export const getDefaultConfig = (state: RootState) =>
123+
state.app.boardControllerConfig.defaultConfig;
124+
108125
export const getConfigArray = createSelector(
109126
[getConfigData, getPmicConfigData],
110127
(configData: Map<number, boolean>, pmicConfigData: Map<number, number>) => [
@@ -135,6 +152,8 @@ export const {
135152
clearPmicConfig,
136153
setHardwareConfig,
137154
clearHardwareConfig,
155+
setDefaultConfig,
156+
clearDefaultConfig,
138157
} = boardControllerConfigSlice.actions;
139158

140159
export default boardControllerConfigSlice;

0 commit comments

Comments
 (0)