from idf_py_actions.errors import FatalError from idf_py_actions.tools import ensure_build_directory, is_target_supported, run_target def action_extensions(base_actions, project_path): SUPPORTED_TARGETS = ['esp32s2'] def dfu_target(target_name, ctx, args): ensure_build_directory(args, ctx.info_name) run_target(target_name, args) def dfu_flash_target(target_name, ctx, args, path): ensure_build_directory(args, ctx.info_name) try: run_target(target_name, args, {'ESP_DFU_PATH': path}) except FatalError: # Cannot capture the error from dfu-util here so the best advise is: print('Please have a look at the "Device Firmware Upgrade through USB" chapter in API Guides of the ' 'ESP-IDF documentation for solving common dfu-util issues.') raise dfu_actions = { 'actions': { 'dfu': { 'callback': dfu_target, 'short_help': 'Build the DFU binary', 'dependencies': ['all'], }, 'dfu-list': { 'callback': dfu_target, 'short_help': 'List DFU capable devices', 'dependencies': [], }, 'dfu-flash': { 'callback': dfu_flash_target, 'short_help': 'Flash the DFU binary', 'order_dependencies': ['dfu'], 'options': [ { 'names': ['--path'], 'default': '', 'help': 'Specify path to DFU device. The default empty path works if there is just one ' 'ESP device with the same product identificator. See the device list for paths ' 'of available devices.' } ], }, } } return dfu_actions if is_target_supported(project_path, SUPPORTED_TARGETS) else {}