| # Copyright (c) 2019, Nordic Semiconductor ASA |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| '''Catch-all module for miscellaneous devices which can't use a |
| generic or widely used tool like J-Link, OpenOCD, etc. |
| |
| Please use this sparingly and only when your setup is exotic and |
| you're willing to handle requests for help. E.g. if your "board" is a |
| core on a special-purpose SoC which requires a complicated script to |
| network boot.''' |
| |
| from runners.core import ZephyrBinaryRunner, RunnerCaps |
| import argparse |
| |
| class MiscFlasher(ZephyrBinaryRunner): |
| '''Runner for handling special purpose flashing commands.''' |
| |
| def __init__(self, cfg, cmd, args): |
| super().__init__(cfg) |
| if not cmd: |
| # This is a board definition error, not a user error, |
| # so we can do it now and not in do_run(). |
| raise ValueError('no command was given') |
| self.cmd = cmd |
| self.args = args |
| |
| @classmethod |
| def name(cls): |
| return 'misc-flasher' |
| |
| @classmethod |
| def capabilities(cls): |
| return RunnerCaps(commands={'flash'}) |
| |
| @classmethod |
| def do_add_parser(cls, parser): |
| parser.add_argument('cmd', |
| help='''command to run; it will be passed the |
| build directory as its first argument''') |
| parser.add_argument('args', nargs=argparse.REMAINDER, |
| help='''additional arguments to pass after the build |
| directory''') |
| |
| @classmethod |
| def do_create(cls, cfg, args): |
| return MiscFlasher(cfg, args.cmd, args.args) |
| |
| def do_run(self, *args, **kwargs): |
| self.require(self.cmd) |
| self.check_call([self.cmd, self.cfg.build_dir] + self.args) |