ardupilot/Tools/scripts/create_OEM_board.py
Peter Barker e0c9f5fc1c Tools: create_OEM_board: use argparse to parse command-line arguments
also fix use of global variables from within the class scope
2025-01-29 06:49:51 +11:00

75 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python
"""
script to automatically create a copy of a board for an OEM setup
usage example : ./Tools/scripts/create_OEM_board.py mRoPixracerPro mRoPixracerPro-MyCompany
AP_FLAKE8_CLEAN
"""
import sys
import os
import subprocess
import pathlib
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../libraries/AP_HAL_ChibiOS/hwdef/scripts'))
import chibios_hwdef # noqa
class OEMCreate:
def __init__(self, oem_board_name, board_name):
self.oem_board_name = oem_board_name
self.board_name = board_name
def run(self):
hwdef_dir = "libraries/AP_HAL_ChibiOS/hwdef"
oem_board_dirpath = f"{hwdef_dir}/{self.oem_board_name}"
if os.path.exists(oem_board_dirpath):
raise ValueError(f"{self.oem_board_dirpath} already exists") # FIXME exception type
hwdef_include_relpath = None
for extension in "dat", "inc":
tmp = f"../{self.board_name}/hwdef.{extension}"
tmp_norm = os.path.normpath(f"{oem_board_dirpath}/{tmp}")
if os.path.exists(tmp_norm):
hwdef_include_relpath = tmp
hwdef_include_normpath = tmp_norm
break
hwdef_content = f"include {hwdef_include_relpath}\n"
ch = chibios_hwdef.ChibiOSHWDef(hwdef_include_normpath)
use_bootloader_from_board = ch.get_config('USE_BOOTLOADER_FROM_BOARD', default=None, required=False)
if use_bootloader_from_board is None:
hwdef_content += "\n"
hwdef_content += f"USE_BOOTLOADER_FROM_BOARD {self.board_name}\n"
subprocess.run(["mkdir", oem_board_dirpath])
# create files and add reference to originals
new_hwdef = pathlib.Path(oem_board_dirpath, "hwdef.dat")
if hwdef_include_relpath is None:
raise ValueError(f"Could not find .inc or .dat for {self.board_name}")
new_hwdef.write_text(hwdef_content)
if os.path.exists(f"{hwdef_dir}/{self.board_name}/defaults.parm"):
path = pathlib.Path(f"{hwdef_dir}/{self.oem_board_name}/defaults.parm")
path.write_text(f"@include ../{self.board_name}/defaults.parm\n") # noqa
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='ArduPilot IMU Filter Tester Tool. Input one log file from ')
parser.add_argument('board_name', default=None, help='board to inherit from')
parser.add_argument('oem_board_name', default=None, help='new board name')
args = parser.parse_args()
oemcreate = OEMCreate(args.oem_board_name, args.board_name)
oemcreate.run()