From cfe64c1e07b6a45799a2875b0cf5c399b2cf83a9 Mon Sep 17 00:00:00 2001 From: Tomasz Duda Date: Thu, 15 Feb 2024 23:54:03 +0100 Subject: [PATCH] validate dfu --- esphome/components/dfu/__init__.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/esphome/components/dfu/__init__.py b/esphome/components/dfu/__init__.py index db0b17cd9a..f80a781921 100644 --- a/esphome/components/dfu/__init__.py +++ b/esphome/components/dfu/__init__.py @@ -7,6 +7,7 @@ from esphome.const import ( from esphome.core import CORE from esphome.components.zephyr import zephyr_add_prj_conf +import esphome.final_validate as fv dfu_ns = cg.esphome_ns.namespace("dfu") DeviceFirmwareUpdate = dfu_ns.class_("DeviceFirmwareUpdate", cg.Component) @@ -24,6 +25,21 @@ CONFIG_SCHEMA = cv.All( ) +# TODO move this to common place with OTA +def _validate_mcumgr(config): + if CORE.using_zephyr: + fconf = fv.full_config.get() + try: + bootloader = fconf.get_config_for_path(["nrf52", "bootloader"]) + if bootloader != "adafruit": + raise cv.Invalid(f"'{bootloader}' bootloader does not support DFU") + except KeyError: + pass + + +FINAL_VALIDATE_SCHEMA = _validate_mcumgr + + async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) reset_output = await cg.get_variable(config[CONF_RESET_OUTPUT])