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 420ebd208a
commit 0ed6610212
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': {