Path: blob/master/Tools/ardupilotwaf/vscode_helper.py
4182 views
# flake8: noqa12import os3import json4import shutil56H7_DUAL_BANK_LIST = [7"STM32H7A3xx",8"STM32H7A3xxq",9"STM32H7B3xx",10"STM32H7B3xxq",11"STM32H742xx",12"STM32H743xx",13"STM32H745xg",14"STM32H745xx",15"STM32H747xg",16"STM32H747xx",17"STM32H753xx",18"STM32H755xx",19"STM32H755xx",20"STM32H757xx",21] # List of H7 boards with dual bank2223ELF_NAME_MAPPING = {24'copter': 'arducopter',25'plane': 'arduplane',26'rover': 'ardurover',27'sub': 'ardusub',28'blimp': 'blimp',29'antennatracker': 'antennatracker',30'bootloader': 'AP_Bootloader',31'AP_Periph': 'AP_Periph',32}3334def update_settings(bld):35if not bld.cmd in ELF_NAME_MAPPING:36return37board_name = bld.env.BOARD38elf_file_name = ELF_NAME_MAPPING.get(bld.cmd, bld.cmd)39if elf_file_name == 'ap_bootloader':40elf_file_path = os.path.join("${workspaceFolder}", "build", board_name, "bootloader", elf_file_name)41else:42elf_file_path = os.path.join("${workspaceFolder}", "build", board_name, "bin", elf_file_name)43vscode_setting_json_path = os.path.join(bld.srcnode.abspath(), '.vscode', 'settings.json')4445if not os.path.exists(vscode_setting_json_path):46with open(vscode_setting_json_path, 'w') as f:47json.dump({}, f, indent=4)4849try:50with open(vscode_setting_json_path, 'r') as f:51content = f.read().strip()52if content:53settings_json = json.loads(content)54else:55settings_json = {}56except json.JSONDecodeError:57print(f"VS-LAUNCH: \033[91m Error: invalid JSON in .vscode/settings.json, please fix it and try again.\033[0m")58return5960settings_json['wscript.elf_file_path'] = elf_file_path61settings_json['wscript.board'] = board_name62if board_name == 'sitl':63if os.uname().sysname == 'Darwin':64settings_json['wscript.MIMode'] = "lldb"65else:66settings_json['wscript.MIMode'] = "gdb"6768with open(vscode_setting_json_path, 'w') as f:69json.dump(settings_json, f, indent=4)7071def update_openocd_cfg(cfg):72if cfg.options.board != 'sitl':73openocd_cfg_path = os.path.join(cfg.srcnode.abspath(), 'build', cfg.options.board, 'openocd.cfg')74mcu_type = cfg.env.get_flat('APJ_BOARD_TYPE')75openocd_target = ''76if mcu_type.startswith("STM32H7"):77if mcu_type in H7_DUAL_BANK_LIST:78openocd_target = 'stm32h7_dual_bank.cfg'79else:80openocd_target = 'stm32h7x.cfg'81elif mcu_type.startswith("STM32F7"):82openocd_target = 'stm32f7x.cfg'83elif mcu_type.startswith("STM32F4"):84openocd_target = 'stm32f4x.cfg'85elif mcu_type.startswith("STM32F3"):86openocd_target = 'stm32f3x.cfg'87elif mcu_type.startswith("STM32L4"):88openocd_target = 'stm32l4x.cfg'89elif mcu_type.startswith("STM32G4"):90openocd_target = 'stm32g4x.cfg'9192if openocd_target:93with open(openocd_cfg_path, 'w+') as f:94f.write("source [find interface/stlink.cfg]\n")95f.write(f"source [find target/{openocd_target}]\n")96f.write("init\n")97f.write("$_TARGETNAME configure -rtos auto\n")9899def init_launch_json_if_not_exist(cfg):100launch_json_path = os.path.join(cfg.srcnode.abspath(), '.vscode', 'launch.json')101launch_default_json_path = os.path.join(cfg.srcnode.abspath(),'.vscode', 'launch.default.json')102103if not os.path.exists(launch_json_path):104if os.path.exists(launch_default_json_path):105print(f"Copying {launch_default_json_path} to {launch_json_path}")106shutil.copy(launch_default_json_path, launch_json_path)107108109