1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-01 16:38:19 +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";};""") zephyr_add_overlay("""&uart1 { status = "okay";};""")
if config[CONF_HARDWARE_UART] == USB_CDC: if config[CONF_HARDWARE_UART] == USB_CDC:
zephyr_add_prj_conf("UART_LINE_CTRL", True) 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 # Register at end for safe mode
await cg.register_component(log, config) await cg.register_component(log, config)

View File

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

View File

@ -6,6 +6,7 @@ from esphome.const import (
CONF_NUM_ATTEMPTS, CONF_NUM_ATTEMPTS,
CONF_OTA, CONF_OTA,
CONF_REBOOT_TIMEOUT, CONF_REBOOT_TIMEOUT,
CONF_HARDWARE_UART,
) )
from esphome.core import CORE, coroutine_with_priority from esphome.core import CORE, coroutine_with_priority
import esphome.final_validate as fv import esphome.final_validate as fv
@ -24,17 +25,23 @@ ZephyrMcumgrOTAComponent = cg.esphome_ns.namespace("zephyr_mcumgr").class_(
) )
CONF_BLE = "ble" CONF_BLE = "ble"
CONF_USB_CDC = "usb_cdc"
def _validate_transport(conf): def _validate_transport(conf):
if conf[CONF_BLE] or conf[CONF_USB_CDC]: if conf[CONF_BLE] or conf[CONF_HARDWARE_UART]:
return conf return conf
raise cv.Invalid( 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( CONFIG_SCHEMA = cv.All(
cv.Schema( cv.Schema(
{ {
@ -44,7 +51,9 @@ CONFIG_SCHEMA = cv.All(
): cv.positive_time_period_milliseconds, ): cv.positive_time_period_milliseconds,
cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int, cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int,
cv.Optional(CONF_BLE, default=True): cv.boolean, 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) .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("MCUMGR_GRP_OS_MCUMGR_PARAMS", True)
zephyr_add_prj_conf("NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP", True) zephyr_add_prj_conf("NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP", True)
if config[CONF_USB_CDC]: if config[CONF_HARDWARE_UART]:
zephyr_add_cdc_acm(config) 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("MCUMGR_TRANSPORT_UART", True)
zephyr_add_prj_conf("BASE64", True) zephyr_add_prj_conf("BASE64", True)
zephyr_add_prj_conf("CONSOLE", True) zephyr_add_prj_conf("CONSOLE", True)
zephyr_add_overlay( zephyr_add_overlay(
""" f"""
/ { / {{
chosen { chosen {{
zephyr,uart-mcumgr = &cdc_acm_uart0; zephyr,uart-mcumgr = &{UARTS[config[CONF_HARDWARE_UART]][0]};
}; }};
}; }};
""" """
) )

View File

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

View File

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