1# Copyright (c) 2024 NXP 2# 3# SPDX-License-Identifier: Apache-2.0 4 5'''Runner for teensy .''' 6 7import os 8import subprocess 9 10from runners.core import ZephyrBinaryRunner 11 12 13class TeensyBinaryRunner(ZephyrBinaryRunner): 14 '''Runner front-end for teensy.''' 15 16 def __init__(self, cfg, mcu, teensy_loader): 17 super().__init__(cfg) 18 19 self.mcu_args = ['--mcu', mcu] 20 self.teensy_loader = teensy_loader 21 self.hex_name = cfg.hex_file 22 23 @classmethod 24 def name(cls): 25 return 'teensy' 26 27 @classmethod 28 def do_add_parser(cls, parser): 29 parser.add_argument('--mcu', required=True, 30 help='Teensy mcu target') 31 parser.add_argument('--teensy', default='teensy_loader_cli', 32 help='path to teensy cli tool, default is teensy_loader_cli') 33 34 @classmethod 35 def do_create(cls, cfg, args): 36 ret = TeensyBinaryRunner( 37 cfg, args.mcu, 38 teensy_loader=args.teensy) 39 return ret 40 41 def do_run(self, command): 42 self.require(self.teensy_loader) 43 if command == 'flash': 44 self.flash() 45 46 def flash(self): 47 if self.hex_name is not None and os.path.isfile(self.hex_name): 48 fname = self.hex_name 49 else: 50 raise ValueError( 51 f'Cannot flash; no hex ({self.hex_name}) file found. ') 52 53 cmd = ([self.teensy_loader] + 54 self.mcu_args + 55 [fname]) 56 57 self.logger.info(f'Flashing file: {fname}') 58 59 try: 60 self.check_output(cmd) 61 self.logger.info('Success') 62 except subprocess.CalledProcessError as grepexc: 63 self.logger.error(f"Failure {grepexc.returncode}") 64