scripts: zephyr_flash_debug: refactor pyocd runner
Prep work for adding debug and debugserver support. No significant
functional differences.
Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
diff --git a/scripts/support/zephyr_flash_debug.py b/scripts/support/zephyr_flash_debug.py
index 972410e..2271a9a 100755
--- a/scripts/support/zephyr_flash_debug.py
+++ b/scripts/support/zephyr_flash_debug.py
@@ -858,14 +858,24 @@
class PyOcdBinaryRunner(ZephyrBinaryRunner):
'''Runner front-end for pyocd-flashtool.'''
- def __init__(self, bin_name, target, flashtool='pyocd-flashtool',
+ def __init__(self, target, flashtool='pyocd-flashtool',
+ bin_name=None,
board_id=None, daparg=None, debug=False):
super(PyOcdBinaryRunner, self).__init__(debug=debug)
- self.bin_name = bin_name
- self.target = target
+
+ self.target_args = ['-t', target]
self.flashtool = flashtool
- self.board_id = board_id
- self.daparg = daparg
+ self.bin_name = bin_name
+
+ board_args = []
+ if board_id is not None:
+ board_args = ['-b', board_id]
+ self.board_args = board_args
+
+ daparg_args = []
+ if daparg is not None:
+ daparg_args = ['-da', daparg]
+ self.daparg_args = daparg_args
def replaces_shell_script(shell_script, command):
return command == 'flash' and shell_script == 'pyocd.sh'
@@ -875,49 +885,61 @@
Required:
- - O: build output directory
- - KERNEL_BIN_NAME: name of kernel binary
- PYOCD_TARGET: target override
- Optional:
+ Required for 'flash':
+
+ - O: build output directory
+ - KERNEL_BIN_NAME: name of kernel binary
+
+ Optional for 'flash':
- PYOCD_FLASHTOOL: flash tool path, defaults to pyocd-flashtool
- PYOCD_BOARD_ID: ID of board to flash, default is to guess
- PYOCD_DAPARG: arguments to pass to flashtool, default is none
'''
- bin_name = path.join(get_env_or_bail('O'),
- get_env_or_bail('KERNEL_BIN_NAME'))
target = get_env_or_bail('PYOCD_TARGET')
+ o = os.environ.get('O', None)
+ bin_ = os.environ.get('KERNEL_BIN_NAME', None)
+ bin_name = None
+ if o is not None:
+ if bin_ is not None:
+ bin_name = path.join(o, bin_)
+
flashtool = os.environ.get('PYOCD_FLASHTOOL', 'pyocd-flashtool')
board_id = os.environ.get('PYOCD_BOARD_ID', None)
daparg = os.environ.get('PYOCD_DAPARG', None)
- return PyOcdBinaryRunner(bin_name, target,
- flashtool=flashtool, board_id=board_id,
+ return PyOcdBinaryRunner(target, flashtool=flashtool,
+ bin_name=bin_name, board_id=board_id,
daparg=daparg, debug=debug)
def run(self, command, **kwargs):
- if command != 'flash':
- raise ValueError('only flash is supported')
+ if command not in {'flash', 'debug', 'debugserver'}:
+ raise ValueError('{} is not supported'.format(command))
- daparg_args = []
- if self.daparg is not None:
- daparg_args = ['-da', self.daparg]
+ if command == 'flash':
+ self.flash(**kwargs)
+ else:
+ self.debug_debugserver(command, **kwargs)
- board_args = []
- if self.board_id is not None:
- board_args = ['-b', self.board_id]
+ def flash(self, **kwargs):
+ if self.bin_name is None:
+ raise ValueError('Cannot flash; bin_name is missing')
cmd = ([self.flashtool] +
- daparg_args +
- ['-t', self.target] +
- board_args +
+ self.daparg_args +
+ self.target_args +
+ self.board_args +
[self.bin_name])
print('Flashing Target Device')
check_call(cmd, self.debug)
+ def debug_debugserver(command, **kwargs):
+ raise NotImplementedError()
+
# TODO: Stop using environment variables.
#