You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
# Copyright (c) 2024 NXP |
|
# |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
'''Runner for teensy .''' |
|
|
|
import os |
|
import subprocess |
|
|
|
from runners.core import ZephyrBinaryRunner |
|
|
|
|
|
class TeensyBinaryRunner(ZephyrBinaryRunner): |
|
'''Runner front-end for teensy.''' |
|
|
|
def __init__(self, cfg, mcu, teensy_loader): |
|
super().__init__(cfg) |
|
|
|
self.mcu_args = ['--mcu', mcu] |
|
self.teensy_loader = teensy_loader |
|
self.hex_name = cfg.hex_file |
|
|
|
@classmethod |
|
def name(cls): |
|
return 'teensy' |
|
|
|
@classmethod |
|
def do_add_parser(cls, parser): |
|
parser.add_argument('--mcu', required=True, |
|
help='Teensy mcu target') |
|
parser.add_argument('--teensy', default='teensy_loader_cli', |
|
help='path to teensy cli tool, default is teensy_loader_cli') |
|
|
|
@classmethod |
|
def do_create(cls, cfg, args): |
|
ret = TeensyBinaryRunner( |
|
cfg, args.mcu, |
|
teensy_loader=args.teensy) |
|
return ret |
|
|
|
def do_run(self, command): |
|
self.require(self.teensy_loader) |
|
if command == 'flash': |
|
self.flash() |
|
|
|
def flash(self): |
|
if self.hex_name is not None and os.path.isfile(self.hex_name): |
|
fname = self.hex_name |
|
else: |
|
raise ValueError( |
|
f'Cannot flash; no hex ({self.hex_name}) file found. ') |
|
|
|
cmd = ([self.teensy_loader] + |
|
self.mcu_args + |
|
[fname]) |
|
|
|
self.logger.info(f'Flashing file: {fname}') |
|
|
|
try: |
|
self.check_output(cmd) |
|
self.logger.info('Success') |
|
except subprocess.CalledProcessError as grepexc: |
|
self.logger.error(f"Failure {grepexc.returncode}")
|
|
|