From 61a25cf1c44336f6a6284b10a54235bbdeb93e94 Mon Sep 17 00:00:00 2001 From: Tomasz Duda <tomaszduda23@gmail.com> Date: Wed, 22 May 2024 00:16:26 +0200 Subject: [PATCH] let user select uart for serial ota --- esphome/components/logger/__init__.py | 2 +- esphome/components/zephyr/__init__.py | 12 +++---- .../components/zephyr_mcumgr/ota/__init__.py | 35 ++++++++++++------- tests/components/ota/test.nrf52.yaml | 1 + tests/test12.2.yaml | 2 +- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/esphome/components/logger/__init__.py b/esphome/components/logger/__init__.py index 6f01e3f04b..747ace310b 100644 --- a/esphome/components/logger/__init__.py +++ b/esphome/components/logger/__init__.py @@ -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) diff --git a/esphome/components/zephyr/__init__.py b/esphome/components/zephyr/__init__.py index f9698da61a..26b212c827 100644 --- a/esphome/components/zephyr/__init__.py +++ b/esphome/components/zephyr/__init__.py @@ -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"; - }; -}; + }}; +}}; """ ) diff --git a/esphome/components/zephyr_mcumgr/ota/__init__.py b/esphome/components/zephyr_mcumgr/ota/__init__.py index 6530bf726f..77eb10575c 100644 --- a/esphome/components/zephyr_mcumgr/ota/__init__.py +++ b/esphome/components/zephyr_mcumgr/ota/__init__.py @@ -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]}; + }}; +}}; """ ) diff --git a/tests/components/ota/test.nrf52.yaml b/tests/components/ota/test.nrf52.yaml index e0031b9a4c..41c2325820 100644 --- a/tests/components/ota/test.nrf52.yaml +++ b/tests/components/ota/test.nrf52.yaml @@ -2,6 +2,7 @@ zephyr_ble_server: ota: - platform: zephyr_mcumgr + hardware_uart: cdc on_begin: then: - logger.log: "OTA start" diff --git a/tests/test12.2.yaml b/tests/test12.2.yaml index ed372d82cb..2eae0f9107 100644 --- a/tests/test12.2.yaml +++ b/tests/test12.2.yaml @@ -52,7 +52,7 @@ dfu_mode: ota: - platform: zephyr_mcumgr - usb_cdc: True + hardware_uart: cdc1 on_begin: then: - logger.log: "OTA start"