2022-05-23 13:30:13 +00:00
|
|
|
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
2020-04-06 14:41:44 +00:00
|
|
|
from idf_py_actions.errors import FatalError
|
2021-01-26 02:49:01 +00:00
|
|
|
from idf_py_actions.tools import ensure_build_directory, is_target_supported, run_target
|
2020-04-06 14:41:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
def action_extensions(base_actions, project_path):
|
|
|
|
|
|
|
|
SUPPORTED_TARGETS = ['esp32s2']
|
|
|
|
|
2021-05-14 12:22:54 +00:00
|
|
|
def dfu_target(target_name, ctx, args, part_size):
|
|
|
|
ensure_build_directory(args, ctx.info_name)
|
|
|
|
run_target(target_name, args, {'ESP_DFU_PART_SIZE': part_size} if part_size else {})
|
|
|
|
|
|
|
|
def dfu_list_target(target_name, ctx, args):
|
2020-04-06 14:41:44 +00:00
|
|
|
ensure_build_directory(args, ctx.info_name)
|
|
|
|
run_target(target_name, args)
|
|
|
|
|
2020-05-26 15:35:40 +00:00
|
|
|
def dfu_flash_target(target_name, ctx, args, path):
|
2020-04-06 14:41:44 +00:00
|
|
|
ensure_build_directory(args, ctx.info_name)
|
|
|
|
|
|
|
|
try:
|
2021-01-26 02:49:01 +00:00
|
|
|
run_target(target_name, args, {'ESP_DFU_PATH': path})
|
2020-04-06 14:41:44 +00:00
|
|
|
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 = {
|
2021-01-26 02:49:01 +00:00
|
|
|
'actions': {
|
|
|
|
'dfu': {
|
|
|
|
'callback': dfu_target,
|
|
|
|
'short_help': 'Build the DFU binary',
|
|
|
|
'dependencies': ['all'],
|
2021-05-14 12:22:54 +00:00
|
|
|
'options': [
|
|
|
|
{
|
|
|
|
'names': ['--part-size'],
|
|
|
|
'help': 'Large files are split up into smaller partitions in order to avoid timeout during '
|
|
|
|
'erasing flash. This option allows to overwrite the default partition size of '
|
|
|
|
'mkdfu.py.'
|
|
|
|
}
|
|
|
|
],
|
2020-04-06 14:41:44 +00:00
|
|
|
},
|
2021-01-26 02:49:01 +00:00
|
|
|
'dfu-list': {
|
2021-05-14 12:22:54 +00:00
|
|
|
'callback': dfu_list_target,
|
2021-01-26 02:49:01 +00:00
|
|
|
'short_help': 'List DFU capable devices',
|
|
|
|
'dependencies': [],
|
2020-05-26 15:35:40 +00:00
|
|
|
},
|
2021-01-26 02:49:01 +00:00
|
|
|
'dfu-flash': {
|
|
|
|
'callback': dfu_flash_target,
|
|
|
|
'short_help': 'Flash the DFU binary',
|
|
|
|
'order_dependencies': ['dfu'],
|
|
|
|
'options': [
|
2020-05-26 15:35:40 +00:00
|
|
|
{
|
2021-01-26 02:49:01 +00:00
|
|
|
'names': ['--path'],
|
|
|
|
'default': '',
|
|
|
|
'help': 'Specify path to DFU device. The default empty path works if there is just one '
|
2021-05-14 12:22:54 +00:00
|
|
|
'ESP device with the same product identifier. See the device list for paths '
|
2021-01-26 02:49:01 +00:00
|
|
|
'of available devices.'
|
2020-05-26 15:35:40 +00:00
|
|
|
}
|
|
|
|
],
|
2020-04-06 14:41:44 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return dfu_actions if is_target_supported(project_path, SUPPORTED_TARGETS) else {}
|