1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-10 12:50:30 +01:00
This commit is contained in:
Tomasz Duda 2024-05-08 20:49:38 +02:00
parent e2cd3775fc
commit 3512e255cf
3 changed files with 50 additions and 26 deletions

View File

@ -148,7 +148,4 @@ async def to_code(config):
cg.add_platformio_option("board_upload.require_upload_port", "true")
cg.add_platformio_option("board_upload.wait_for_upload_port", "true")
#
if CORE.using_zephyr:
zephyr_to_code(conf)
else:
raise NotImplementedError
zephyr_to_code(conf)

View File

@ -45,8 +45,6 @@ PrjConfValueType = Union[bool, str, int]
def zephyr_add_prj_conf(name: str, value: PrjConfValueType):
"""Set an zephyr prj conf value."""
if not CORE.using_zephyr:
raise ValueError("Not an zephyr project")
if not name.startswith("CONFIG_"):
name = "CONFIG_" + name
if name in CORE.data[KEY_ZEPHYR][KEY_PRJ_CONF]:
@ -59,8 +57,6 @@ def zephyr_add_prj_conf(name: str, value: PrjConfValueType):
def zephyr_add_overlay(content):
if not CORE.using_zephyr:
raise ValueError("Not an zephyr project")
CORE.data[KEY_ZEPHYR][KEY_OVERLAY] += content

View File

@ -12,7 +12,6 @@ import esphome.final_validate as fv
from esphome.components.zephyr.const import BOOTLOADER_MCUBOOT
from esphome.components.zephyr import zephyr_add_prj_conf
DEPENDENCIES = ["zephyr_ble_server"]
AUTO_LOAD = ["zephyr_mcumgr"]
esphome = cg.esphome_ns.namespace("esphome")
@ -20,7 +19,19 @@ ZephyrMcumgrOTAComponent = cg.esphome_ns.namespace("zephyr_mcumgr").class_(
"OTAComponent", cg.Component
)
CONFIG_SCHEMA = (
CONF_BLE_MODE = "ble"
CONF_USB_CDC_MODE = "usb_cdc"
def _validate_transport(conf):
if conf[CONF_BLE_MODE] or conf[CONF_USB_CDC_MODE]:
return conf
raise cv.Invalid(
f"At least one trasnport protocol has to be enabled. Set '{CONF_BLE_MODE}' or '{CONF_USB_CDC_MODE}'"
)
CONFIG_SCHEMA = cv.All(
cv.Schema(
{
cv.GenerateID(): cv.declare_id(ZephyrMcumgrOTAComponent),
@ -28,27 +39,46 @@ CONFIG_SCHEMA = (
CONF_REBOOT_TIMEOUT, default="5min"
): cv.positive_time_period_milliseconds,
cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int,
cv.Optional(CONF_BLE_MODE, default=True): cv.boolean,
cv.Optional(CONF_USB_CDC_MODE, default=False): cv.boolean,
}
)
.extend(BASE_OTA_SCHEMA)
.extend(cv.COMPONENT_SCHEMA)
.extend(cv.COMPONENT_SCHEMA),
_validate_transport,
)
def _validate_mcumgr(config):
if CORE.using_zephyr:
fconf = fv.full_config.get()
try:
bootloader = fconf.get_config_for_path(["nrf52", "bootloader"])
if bootloader != BOOTLOADER_MCUBOOT:
raise cv.Invalid(f"'{bootloader}' bootloader does not support OTA")
except KeyError:
pass
fconf = fv.full_config.get()
try:
bootloader = fconf.get_config_for_path(["nrf52", "bootloader"])
if bootloader != BOOTLOADER_MCUBOOT:
raise cv.Invalid(f"'{bootloader}' bootloader does not support OTA")
except KeyError:
pass
FINAL_VALIDATE_SCHEMA = _validate_mcumgr
KEY_ZEPHYR_BLE_SERVER = "zephyr_ble_server"
# TODO cdc ota, check if ble server is enabled
def _validate_ble_server(config):
if config[CONF_BLE_MODE]:
has_ble_server = KEY_ZEPHYR_BLE_SERVER in fv.full_config.get()
if not has_ble_server:
raise cv.Invalid(
f"'{KEY_ZEPHYR_BLE_SERVER}' component is required for BLE OTA"
)
def _final_validate(config):
_validate_mcumgr(config)
_validate_ble_server(config)
FINAL_VALIDATE_SCHEMA = _final_validate
# TODO cdc ota
@coroutine_with_priority(50.0)
@ -78,10 +108,11 @@ async def to_code(config):
zephyr_add_prj_conf("MCUMGR_GRP_IMG_STATUS_HOOKS", True)
zephyr_add_prj_conf("MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK", True)
# mcumgr ble
zephyr_add_prj_conf("MCUMGR_TRANSPORT_BT", True)
zephyr_add_prj_conf("MCUMGR_TRANSPORT_BT_REASSEMBLY", True)
if config[CONF_BLE_MODE]:
zephyr_add_prj_conf("MCUMGR_TRANSPORT_BT", True)
zephyr_add_prj_conf("MCUMGR_TRANSPORT_BT_REASSEMBLY", True)
zephyr_add_prj_conf("MCUMGR_GRP_OS", True)
zephyr_add_prj_conf("MCUMGR_GRP_OS_MCUMGR_PARAMS", True)
zephyr_add_prj_conf("MCUMGR_GRP_OS", 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)