feat(esptool): allow to set force for write_flash

This commit is contained in:
Peter Dragun 2023-04-11 12:33:17 +02:00
parent 96f2d215a2
commit faa82b060c
2 changed files with 32 additions and 6 deletions

View File

@ -43,7 +43,10 @@ else()
list(APPEND serial_tool_cmd -b ${ESPBAUD}) list(APPEND serial_tool_cmd -b ${ESPBAUD})
endif() endif()
# SERIAL_TOOL_ARGS is defined during the first cmake run
# SERIAL_TOOL_EXTRA_ARGS is used for additional arguments from the command line during run-time
list(APPEND serial_tool_cmd ${SERIAL_TOOL_ARGS}) list(APPEND serial_tool_cmd ${SERIAL_TOOL_ARGS})
list(APPEND serial_tool_cmd $ENV{SERIAL_TOOL_EXTRA_ARGS})
if(${SERIAL_TOOL_SILENT}) if(${SERIAL_TOOL_SILENT})
execute_process(COMMAND ${serial_tool_cmd} execute_process(COMMAND ${serial_tool_cmd}

View File

@ -3,6 +3,7 @@
import json import json
import os import os
import shlex
import signal import signal
import sys import sys
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
@ -166,7 +167,7 @@ def action_extensions(base_actions: Dict, project_path: str) -> Dict:
finally: finally:
signal.signal(signal.SIGINT, old_handler) signal.signal(signal.SIGINT, old_handler)
def flash(action: str, ctx: click.core.Context, args: PropertyDict) -> None: def flash(action: str, ctx: click.core.Context, args: PropertyDict, force: bool, extra_args: str) -> None:
""" """
Run esptool to flash the entire project, from an argfile generated by the build system Run esptool to flash the entire project, from an argfile generated by the build system
""" """
@ -177,7 +178,13 @@ def action_extensions(base_actions: Dict, project_path: str) -> Dict:
return return
args.port = args.port or get_default_serial_port() args.port = args.port or get_default_serial_port()
run_target(action, args, {'ESPBAUD': str(args.baud), 'ESPPORT': args.port}) extra = list()
if force:
extra.append('--force')
if extra_args:
extra += shlex.split(extra_args)
env = {'ESPBAUD': str(args.baud), 'ESPPORT': args.port, 'SERIAL_TOOL_EXTRA_ARGS': ';'.join(extra)}
run_target(action, args, env)
def erase_flash(action: str, ctx: click.core.Context, args: PropertyDict) -> None: def erase_flash(action: str, ctx: click.core.Context, args: PropertyDict) -> None:
ensure_build_directory(args, ctx.info_name) ensure_build_directory(args, ctx.info_name)
@ -205,13 +212,27 @@ def action_extensions(base_actions: Dict, project_path: str) -> Dict:
run_target(target_name, args, {'ESPBAUD': str(args.baud), 'ESPPORT': args.port}) run_target(target_name, args, {'ESPBAUD': str(args.baud), 'ESPPORT': args.port})
BAUD_AND_PORT = [BAUD_RATE, PORT] BAUD_AND_PORT = [BAUD_RATE, PORT]
flash_options = BAUD_AND_PORT + [
{
'names': ['--force'],
'is_flag': True,
'help': 'Force write, skip security and compatibility checks. Use with caution!',
},
{
'names': ['--extra-args'],
'help': (
'Pass extra arguments to esptool separated by space. For more details see `esptool.py write_flash --help`. '
'For example to compress and verify data use: `idf.py flash --extra-args="--compress --verify"`. Use with caution!'
)
}
]
serial_actions = { serial_actions = {
'global_action_callbacks': [global_callback], 'global_action_callbacks': [global_callback],
'actions': { 'actions': {
'flash': { 'flash': {
'callback': flash, 'callback': flash,
'help': 'Flash the project.', 'help': 'Flash the project.',
'options': global_options + BAUD_AND_PORT, 'options': global_options + flash_options,
'order_dependencies': ['all', 'erase-flash'], 'order_dependencies': ['all', 'erase-flash'],
}, },
'erase-flash': { 'erase-flash': {
@ -300,29 +321,31 @@ def action_extensions(base_actions: Dict, project_path: str) -> Dict:
'partition-table-flash': { 'partition-table-flash': {
'callback': flash, 'callback': flash,
'help': 'Flash partition table only.', 'help': 'Flash partition table only.',
'options': BAUD_AND_PORT, 'options': flash_options,
'order_dependencies': ['partition-table', 'erase-flash'], 'order_dependencies': ['partition-table', 'erase-flash'],
}, },
'bootloader-flash': { 'bootloader-flash': {
'callback': flash, 'callback': flash,
'help': 'Flash bootloader only.', 'help': 'Flash bootloader only.',
'options': BAUD_AND_PORT, 'options': flash_options,
'order_dependencies': ['bootloader', 'erase-flash'], 'order_dependencies': ['bootloader', 'erase-flash'],
}, },
'app-flash': { 'app-flash': {
'callback': flash, 'callback': flash,
'help': 'Flash the app only.', 'help': 'Flash the app only.',
'options': BAUD_AND_PORT, 'options': flash_options,
'order_dependencies': ['app', 'erase-flash'], 'order_dependencies': ['app', 'erase-flash'],
}, },
'encrypted-app-flash': { 'encrypted-app-flash': {
'callback': flash, 'callback': flash,
'help': 'Flash the encrypted app only.', 'help': 'Flash the encrypted app only.',
'options': flash_options,
'order_dependencies': ['app', 'erase-flash'], 'order_dependencies': ['app', 'erase-flash'],
}, },
'encrypted-flash': { 'encrypted-flash': {
'callback': flash, 'callback': flash,
'help': 'Flash the encrypted project.', 'help': 'Flash the encrypted project.',
'options': flash_options,
'order_dependencies': ['all', 'erase-flash'], 'order_dependencies': ['all', 'erase-flash'],
}, },
'erase-otadata': { 'erase-otadata': {