1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-07 03:10:27 +01:00

move install of smp to post build step

This commit is contained in:
Tomasz Duda 2024-05-06 18:55:36 +02:00
parent 51719ec448
commit 42846032d0
8 changed files with 63 additions and 35 deletions

View File

@ -1,4 +1,3 @@
import os
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.const import (
@ -13,12 +12,8 @@ from esphome.const import (
CONF_PLATFORM_VERSION,
)
from esphome.core import CORE, coroutine_with_priority
from esphome.helpers import (
copy_file_if_changed,
)
from esphome.components.zephyr import (
zephyr_copy_files,
zephyr_set_core_data,
zephyr_to_code,
)
@ -153,27 +148,7 @@ 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")
#
cg.add_platformio_option(
"extra_scripts", [f"pre:build_{CORE.data[KEY_CORE][KEY_TARGET_FRAMEWORK]}.py"]
)
if CORE.using_zephyr:
zephyr_to_code(conf)
else:
raise NotImplementedError
# Called by writer.py
def copy_files():
if CORE.using_zephyr:
zephyr_copy_files()
dir = os.path.dirname(__file__)
build_zephyr_file = os.path.join(
dir, f"build_{CORE.data[KEY_CORE][KEY_TARGET_FRAMEWORK]}.py.script"
)
copy_file_if_changed(
build_zephyr_file,
CORE.relative_build_path(
f"build_{CORE.data[KEY_CORE][KEY_TARGET_FRAMEWORK]}.py"
),
)

View File

@ -1,12 +1,15 @@
import os
from typing import Union
import esphome.codegen as cg
from esphome.core import CORE
from esphome.helpers import (
write_file_if_changed,
copy_file_if_changed,
)
from esphome.const import (
CONF_VARIANT,
CONF_BOARD,
KEY_NAME,
)
from .const import (
ZEPHYR_VARIANT_GENERIC,
@ -16,6 +19,8 @@ from .const import (
KEY_OVERLAY,
zephyr_ns,
BOOTLOADER_MCUBOOT,
KEY_EXTRA_BUILD_FILES,
KEY_PATH,
)
@ -31,6 +36,7 @@ def zephyr_set_core_data(config):
CORE.data[KEY_ZEPHYR][KEY_PRJ_CONF] = {}
CORE.data[KEY_ZEPHYR][KEY_OVERLAY] = ""
CORE.data[KEY_ZEPHYR][KEY_BOOTLOADER] = config[KEY_BOOTLOADER]
CORE.data[KEY_ZEPHYR][KEY_EXTRA_BUILD_FILES] = {}
return config
@ -58,6 +64,24 @@ def zephyr_add_overlay(content):
CORE.data[KEY_ZEPHYR][KEY_OVERLAY] += content
def add_extra_build_file(filename: str, path: str) -> bool:
"""Add an extra build file to the project."""
if filename not in CORE.data[KEY_ZEPHYR][KEY_EXTRA_BUILD_FILES]:
CORE.data[KEY_ZEPHYR][KEY_EXTRA_BUILD_FILES][filename] = {
KEY_NAME: filename,
KEY_PATH: path,
}
return True
return False
def add_extra_script(stage: str, filename: str, path: str):
"""Add an extra script to the project."""
key = f"{stage}:{filename}"
if add_extra_build_file(filename, path):
cg.add_platformio_option("extra_scripts", [key])
def zephyr_to_code(conf):
cg.add(zephyr_ns.setup_preferences())
cg.add_build_flag("-DUSE_ZEPHYR")
@ -110,6 +134,17 @@ def zephyr_to_code(conf):
zephyr_add_prj_conf("USB_CDC_ACM_LOG_LEVEL_WRN", True)
add_extra_script(
"pre",
"pre_build.py",
os.path.join(os.path.dirname(__file__), "pre_build.py.script"),
)
add_extra_script(
"post",
"post_build.py",
os.path.join(os.path.dirname(__file__), "post_build.py.script"),
)
def _format_prj_conf_val(value: PrjConfValueType) -> str:
if isinstance(value, bool):
@ -121,7 +156,8 @@ def _format_prj_conf_val(value: PrjConfValueType) -> str:
raise ValueError
def zephyr_copy_files():
# Called by writer.py
def copy_files():
want_opts = CORE.data[KEY_ZEPHYR][KEY_PRJ_CONF]
contents = (
"\n".join(
@ -156,3 +192,9 @@ def zephyr_copy_files():
CORE.relative_build_path(f"boards/{CORE.data[KEY_ZEPHYR][KEY_BOARD]}.json"),
fake_board_manifest,
)
for _, file in CORE.data[KEY_ZEPHYR][KEY_EXTRA_BUILD_FILES].items():
copy_file_if_changed(
file[KEY_PATH],
CORE.relative_build_path(file[KEY_NAME]),
)

View File

@ -2,10 +2,14 @@ import esphome.codegen as cg
ZEPHYR_VARIANT_GENERIC = "generic"
ZEPHYR_VARIANT_NRF_SDK = "nrf-sdk"
KEY_ZEPHYR = "zephyr"
KEY_PRJ_CONF = "prj_conf"
KEY_OVERLAY = "overlay"
KEY_BOOTLOADER = "bootloader"
KEY_EXTRA_BUILD_FILES = "extra_build_files"
KEY_PATH = "path"
BOOTLOADER_MCUBOOT = "mcuboot"
zephyr_ns = cg.esphome_ns.namespace("zephyr")

View File

@ -0,0 +1,10 @@
Import("env")
import sys
try:
import smp
import smpclient
except ImportError:
if sys.version_info >= (3, 10):
env.Execute("$PYTHONEXE -m pip install smp==1.0.0 git+https://github.com/tomaszduda23/smpclient/@d25c8035ae2858fd41a106058297b619d58fbcb5")

View File

@ -310,8 +310,8 @@ def copy_src_tree():
CORE.relative_src_path("esphome.h"),
ESPHOME_H_FORMAT.format(include_s + '\n#include "pio_includes.h"'),
)
elif CORE.is_nrf52:
from esphome.components.nrf52 import copy_files
elif CORE.using_zephyr:
from esphome.components.zephyr import copy_files
copy_files()

View File

@ -8,7 +8,7 @@ from bleak import BleakScanner, BleakClient
from bleak.exc import BleakDeviceNotFoundError, BleakDBusError
from esphome.espota2 import ProgressBar
if sys.version_info >= (3, 10):
try:
from smpclient.transport.ble import SMPBLETransport
from smpclient.transport.serial import SMPSerialTransport
from smpclient import SMPClient
@ -17,6 +17,8 @@ if sys.version_info >= (3, 10):
from smpclient.requests.os_management import ResetWrite
from smpclient.generics import error, success
from smp.exceptions import SMPBadStartDelimiter
except ModuleNotFoundError:
pass
SMP_SERVICE_UUID = "8D53DC1D-1DB7-4CD3-868B-8A527460AA84"
@ -89,7 +91,7 @@ def get_image_tlv_sha256(file):
async def smpmgr_upload(config, host, firmware):
if sys.version_info < (3, 10):
_LOGGER.error("smpmgr requires at least python 3.10")
_LOGGER.error("BLE OTA requires at least python 3.10")
return 1
image_tlv_sha256 = get_image_tlv_sha256(firmware)
if image_tlv_sha256 is None:

View File

@ -29,11 +29,6 @@ pyparsing >= 3.0
argcomplete>=2.0.0
# for mcumgr
smp==1.0.0
smpclient @ git+https://github.com/tomaszduda23/smpclient/@d25c8035ae2858fd41a106058297b619d58fbcb5
bleak==0.21.1
pydantic==2.7.0
cbor2==5.6.1
crcmod==1.7
# pretty print by logging?
rich==13.7.0