1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-30 23:48:15 +01:00

let user select uart for serial ota

This commit is contained in:
Tomasz Duda 2024-05-22 00:16:26 +02:00
parent 738b167c91
commit 61a25cf1c4
5 changed files with 32 additions and 20 deletions

View File

@ -311,7 +311,7 @@ async def to_code(config):
zephyr_add_overlay("""&uart1 { status = "okay";};""")
if config[CONF_HARDWARE_UART] == USB_CDC:
zephyr_add_prj_conf("UART_LINE_CTRL", True)
zephyr_add_cdc_acm(config)
zephyr_add_cdc_acm(config, 0)
# Register at end for safe mode
await cg.register_component(log, config)

View File

@ -135,7 +135,7 @@ def _format_prj_conf_val(value: PrjConfValueType) -> str:
raise ValueError
def zephyr_add_cdc_acm(config):
def zephyr_add_cdc_acm(config, id):
zephyr_add_prj_conf("USB_DEVICE_STACK", True)
zephyr_add_prj_conf("USB_CDC_ACM", True)
# prevent device to go to susspend, without this communication stop working in python
@ -144,12 +144,12 @@ def zephyr_add_cdc_acm(config):
# prevent logging when buffer is full
zephyr_add_prj_conf("USB_CDC_ACM_LOG_LEVEL_WRN", True)
zephyr_add_overlay(
"""
&zephyr_udc0 {
cdc_acm_uart0: cdc_acm_uart0 {
f"""
&zephyr_udc0 {{
cdc_acm_uart{id}: cdc_acm_uart{id} {{
compatible = "zephyr,cdc-acm-uart";
};
};
}};
}};
"""
)

View File

@ -6,6 +6,7 @@ from esphome.const import (
CONF_NUM_ATTEMPTS,
CONF_OTA,
CONF_REBOOT_TIMEOUT,
CONF_HARDWARE_UART,
)
from esphome.core import CORE, coroutine_with_priority
import esphome.final_validate as fv
@ -24,17 +25,23 @@ ZephyrMcumgrOTAComponent = cg.esphome_ns.namespace("zephyr_mcumgr").class_(
)
CONF_BLE = "ble"
CONF_USB_CDC = "usb_cdc"
def _validate_transport(conf):
if conf[CONF_BLE] or conf[CONF_USB_CDC]:
if conf[CONF_BLE] or conf[CONF_HARDWARE_UART]:
return conf
raise cv.Invalid(
f"At least one trasnport protocol has to be enabled. Set '{CONF_BLE}' or '{CONF_USB_CDC}'"
f"At least one trasnport protocol has to be enabled. Set '{CONF_BLE}' or '{CONF_HARDWARE_UART}'"
)
UARTS = {
"cdc": ("cdc_acm_uart0", 0),
"cdc1": ("cdc_acm_uart1", 1),
"uart0": ("uart0", -1),
"uart1": ("uart1", -1),
}
CONFIG_SCHEMA = cv.All(
cv.Schema(
{
@ -44,7 +51,9 @@ CONFIG_SCHEMA = cv.All(
): cv.positive_time_period_milliseconds,
cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int,
cv.Optional(CONF_BLE, default=True): cv.boolean,
cv.Optional(CONF_USB_CDC, default=False): cv.boolean,
cv.Optional(
CONF_HARDWARE_UART,
): cv.one_of(*UARTS, lower=True),
}
)
.extend(BASE_OTA_SCHEMA)
@ -117,17 +126,19 @@ async def to_code(config):
zephyr_add_prj_conf("MCUMGR_GRP_OS_MCUMGR_PARAMS", True)
zephyr_add_prj_conf("NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP", True)
if config[CONF_USB_CDC]:
zephyr_add_cdc_acm(config)
if config[CONF_HARDWARE_UART]:
cdc_id = UARTS[config[CONF_HARDWARE_UART]][1]
if cdc_id >= 0:
zephyr_add_cdc_acm(config, cdc_id)
zephyr_add_prj_conf("MCUMGR_TRANSPORT_UART", True)
zephyr_add_prj_conf("BASE64", True)
zephyr_add_prj_conf("CONSOLE", True)
zephyr_add_overlay(
"""
/ {
chosen {
zephyr,uart-mcumgr = &cdc_acm_uart0;
};
};
f"""
/ {{
chosen {{
zephyr,uart-mcumgr = &{UARTS[config[CONF_HARDWARE_UART]][0]};
}};
}};
"""
)

View File

@ -2,6 +2,7 @@ zephyr_ble_server:
ota:
- platform: zephyr_mcumgr
hardware_uart: cdc
on_begin:
then:
- logger.log: "OTA start"

View File

@ -52,7 +52,7 @@ dfu_mode:
ota:
- platform: zephyr_mcumgr
usb_cdc: True
hardware_uart: cdc1
on_begin:
then:
- logger.log: "OTA start"