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:
parent
738b167c91
commit
61a25cf1c4
@ -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)
|
||||||
|
@ -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";
|
||||||
};
|
}};
|
||||||
};
|
}};
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -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]};
|
||||||
};
|
}};
|
||||||
};
|
}};
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
@ -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"
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user