Skip to content

Commit 05ff0f5

Browse files
committed
scripts: runners: nrf: Add a new --dry-run parameter
In order to allow for users to invoke "west flash" without actual hardware connected but still running the logic and pregeneration of commands. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
1 parent e14d83f commit 05ff0f5

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

scripts/west_commands/runners/nrf_common.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class NrfBinaryRunner(ZephyrBinaryRunner):
5353

5454
def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False,
5555
erase_mode=None, ext_erase_mode=None, reset=True,
56-
tool_opt=None, force=False, recover=False):
56+
tool_opt=None, force=False, recover=False, dry_run=False):
5757
super().__init__(cfg)
5858
self.hex_ = cfg.hex_file
5959
# The old --nrf-family options takes upper-case family names
@@ -67,6 +67,7 @@ def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False,
6767
self.reset = bool(reset)
6868
self.force = force
6969
self.recover = bool(recover)
70+
self.dry_run = bool(dry_run)
7071

7172
self.tool_opt = []
7273
if tool_opt is not None:
@@ -118,6 +119,10 @@ def do_add_parser(cls, parser):
118119
choices=['none', 'ranges', 'all'],
119120
help='Select the type of erase operation for the '
120121
'external non-volatile memory')
122+
parser.add_argument('--dry-run', required=False,
123+
action='store_true',
124+
help='''Generate all the commands without actually
125+
executing them''')
121126

122127
parser.set_defaults(reset=True)
123128

@@ -139,7 +144,10 @@ def ensure_snr(self):
139144
self.dev_id = [d.lstrip("0") for d in dev_id]
140145
return
141146
if not dev_id or "*" in dev_id:
142-
dev_id = self.get_board_snr(dev_id or "*")
147+
if not self.dry_run:
148+
dev_id = self.get_board_snr(dev_id or "*")
149+
else:
150+
dev_id = "DEVICEID" # for a dry run
143151
self.dev_id = dev_id.lstrip("0")
144152

145153
@abc.abstractmethod

scripts/west_commands/runners/nrfjprog.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ class NrfJprogBinaryRunner(NrfBinaryRunner):
1919

2020
def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False,
2121
erase_mode=None, ext_erase_mode=None, reset=True, tool_opt=None,
22-
force=False, recover=False, qspi_ini=None):
22+
force=False, recover=False, qspi_ini=None, dry_run=False):
2323

2424
super().__init__(cfg, family, softreset, pinreset, dev_id, erase,
2525
erase_mode, ext_erase_mode, reset, tool_opt, force,
26-
recover)
26+
recover, dry_run)
2727

2828
self.qspi_ini = qspi_ini
2929

@@ -51,7 +51,7 @@ def do_create(cls, cfg, args):
5151
ext_erase_mode=args.ext_erase_mode,
5252
reset=args.reset, tool_opt=args.tool_opt,
5353
force=args.force, recover=args.recover,
54-
qspi_ini=args.qspi_ini)
54+
qspi_ini=args.qspi_ini, dry_run=args.dry_run)
5555
@classmethod
5656
def do_add_parser(cls, parser):
5757
super().do_add_parser(parser)

scripts/west_commands/runners/nrfutil.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ class NrfUtilBinaryRunner(NrfBinaryRunner):
1717

1818
def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False,
1919
erase_mode=None, ext_erase_mode=None, reset=True, tool_opt=None,
20-
force=False, recover=False,
21-
ext_mem_config_file=None):
20+
force=False, recover=False, ext_mem_config_file=None,
21+
dry_run=False):
2222

2323
super().__init__(cfg, family, softreset, pinreset, dev_id, erase,
2424
erase_mode, ext_erase_mode, reset, tool_opt, force,
25-
recover)
25+
recover, dry_run)
2626

2727
self.ext_mem_config_file = ext_mem_config_file
2828

@@ -54,7 +54,8 @@ def do_create(cls, cfg, args):
5454
ext_erase_mode=args.ext_erase_mode,
5555
reset=args.reset, tool_opt=args.tool_opt,
5656
force=args.force, recover=args.recover,
57-
ext_mem_config_file=args.ext_mem_config_file)
57+
ext_mem_config_file=args.ext_mem_config_file,
58+
dry_run=args.dry_run)
5859

5960
@classmethod
6061
def do_add_parser(cls, parser):
@@ -63,13 +64,13 @@ def do_add_parser(cls, parser):
6364
dest='ext_mem_config_file',
6465
help='path to an JSON file with external memory configuration')
6566

66-
def _exec(self, args):
67+
def _exec(self, args, force=False):
6768
jout_all = []
6869

6970
cmd = ['nrfutil', '--json', 'device'] + args
7071
self._log_cmd(cmd)
7172

72-
if self.dry_run:
73+
if self.dry_run and not force:
7374
return {}
7475

7576
with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p:
@@ -147,7 +148,7 @@ def _append_batch(self, op, json_file):
147148
cmd += ['--core', op['core']] if op.get('core') else []
148149
cmd += ['--x-family', f'{self.family}']
149150
cmd += ['--x-append-batch', f'{json_file}']
150-
self._exec(cmd)
151+
self._exec(cmd, force=True)
151152

152153
def _exec_batch(self):
153154
# Use x-append-batch to get the JSON from nrfutil itself

0 commit comments

Comments
 (0)