1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-26 15:12:21 +01:00

add overlay config

This commit is contained in:
Tomasz Duda
2024-02-03 12:29:47 +01:00
parent 49b54c6d03
commit 3fbf584f4d
4 changed files with 65 additions and 21 deletions

View File

@@ -40,6 +40,7 @@ from esphome.components.libretiny.const import (
COMPONENT_BK72XX, COMPONENT_BK72XX,
COMPONENT_RTL87XX, COMPONENT_RTL87XX,
) )
from esphome.components.nrf52 import add_zephyr_overlay
CODEOWNERS = ["@esphome/core"] CODEOWNERS = ["@esphome/core"]
logger_ns = cg.esphome_ns.namespace("logger") logger_ns = cg.esphome_ns.namespace("logger")
@@ -283,6 +284,7 @@ async def to_code(config):
add_idf_sdkconfig_option("CONFIG_ESP_CONSOLE_USB_CDC", True) add_idf_sdkconfig_option("CONFIG_ESP_CONSOLE_USB_CDC", True)
elif config[CONF_HARDWARE_UART] == USB_SERIAL_JTAG: elif config[CONF_HARDWARE_UART] == USB_SERIAL_JTAG:
add_idf_sdkconfig_option("CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG", True) add_idf_sdkconfig_option("CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG", True)
try: try:
uart_selection(USB_SERIAL_JTAG) uart_selection(USB_SERIAL_JTAG)
cg.add_build_flag("-DUSE_USB_SERIAL_JTAG") cg.add_build_flag("-DUSE_USB_SERIAL_JTAG")
@@ -294,6 +296,10 @@ async def to_code(config):
except cv.Invalid: except cv.Invalid:
pass pass
if CORE.using_zephyr:
if config[CONF_HARDWARE_UART] == UART0:
add_zephyr_overlay("""&uart0 { status = "okay";};""")
# Register at end for safe mode # Register at end for safe mode
await cg.register_component(log, config) await cg.register_component(log, config)

View File

@@ -37,7 +37,7 @@ enum UARTSelection {
#else #else
UART_SELECTION_UART0 = 0, UART_SELECTION_UART0 = 0,
#endif #endif
#if !defined(USE_NRF52) || defined(PIN_SERIAL2_RX) && defined(PIN_SERIAL2_TX) #ifndef USE_NRF52
UART_SELECTION_UART1, UART_SELECTION_UART1,
#endif #endif
#if defined(USE_LIBRETINY) || defined(USE_ESP32_VARIANT_ESP32) #if defined(USE_LIBRETINY) || defined(USE_ESP32_VARIANT_ESP32)
@@ -147,20 +147,17 @@ class Logger : public Component {
char *tx_buffer_{nullptr}; char *tx_buffer_{nullptr};
int tx_buffer_at_{0}; int tx_buffer_at_{0};
int tx_buffer_size_{0}; int tx_buffer_size_{0};
#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) #if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) || defined(USE_NRF52)
UARTSelection uart_{UART_SELECTION_UART0}; UARTSelection uart_{UART_SELECTION_UART0};
#endif #elif defined(USE_LIBRETINY)
#ifdef USE_NRF52
UARTSelection uart_{UART_SELECTION_USB_CDC};
#endif
#ifdef USE_LIBRETINY
UARTSelection uart_{UART_SELECTION_DEFAULT}; UARTSelection uart_{UART_SELECTION_DEFAULT};
#endif #endif
#ifdef USE_ARDUINO #ifdef USE_ARDUINO
Stream *hw_serial_{nullptr}; Stream *hw_serial_{nullptr};
#endif #elif defined(USE_ESP_IDF)
#ifdef USE_ESP_IDF
uart_port_t uart_num_; uart_port_t uart_num_;
#elif defined(USE_ZEPHYR)
const struct device * uart_dev_{nullptr};
#endif #endif
struct LogLevelOverride { struct LogLevelOverride {
std::string tag; std::string tag;

View File

@@ -8,32 +8,66 @@
namespace esphome { namespace esphome {
namespace logger { namespace logger {
#ifdef USE_ZEPHYR
// it must be inside namespace since there is duplicated macro EMPTY
#include <zephyr/device.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/usb/usb_device.h>
#endif
static const char *const TAG = "logger"; static const char *const TAG = "logger";
void Logger::pre_setup() { void Logger::pre_setup() {
if (this->baud_rate_ > 0) { if (this->baud_rate_ > 0) {
#ifdef USE_ARDUINO
switch (this->uart_) { switch (this->uart_) {
case UART_SELECTION_UART0: case UART_SELECTION_UART0:
this->hw_serial_ = &Serial1; this->hw_serial_ = &Serial1;
Serial1.begin(this->baud_rate_); Serial1.begin(this->baud_rate_);
break; break;
#if defined(PIN_SERIAL2_RX) && defined(PIN_SERIAL2_TX)
case UART_SELECTION_UART1:
this->hw_serial_ = &Serial2;
Serial2.begin(this->baud_rate_);
break;
#endif
case UART_SELECTION_USB_CDC: case UART_SELECTION_USB_CDC:
this->hw_serial_ = &Serial; this->hw_serial_ = &Serial;
Serial.begin(this->baud_rate_); Serial.begin(this->baud_rate_);
break; break;
} }
#elif defined(USE_ZEPHYR)
static const struct device *uart_dev = nullptr;
switch (this->uart_) {
case UART_SELECTION_UART0:
uart_dev = DEVICE_DT_GET_OR_NULL(DT_NODELABEL(uart0));
break;
case UART_SELECTION_USB_CDC:
uart_dev = DEVICE_DT_GET_OR_NULL(zephyr_cdc_acm_uart);
if(device_is_ready(uart_dev)) {
usb_enable(NULL);
}
break;
}
if (!device_is_ready(uart_dev)) {
ESP_LOGE(TAG, "%s is not ready.", get_uart_selection_());
} else {
uart_dev_ = uart_dev;
}
#endif
} }
global_logger = this; global_logger = this;
ESP_LOGI(TAG, "Log initialized"); ESP_LOGI(TAG, "Log initialized");
} }
const char *const UART_SELECTIONS[] = {"USB_CDC"}; #ifdef USE_ZEPHYR
void HOT Logger::write_msg_(const char *msg) {
if(nullptr == uart_dev_) {
return;
}
while(*msg) {
uart_poll_out(uart_dev_, *msg);
++msg;
}
uart_poll_out(uart_dev_, '\n');
}
#endif
const char *const UART_SELECTIONS[] = {"UART0", "USB_CDC"};
const char *Logger::get_uart_selection_() { return UART_SELECTIONS[this->uart_]; } const char *Logger::get_uart_selection_() { return UART_SELECTIONS[this->uart_]; }

View File

@@ -27,6 +27,7 @@ KEY_NRF52 = "nrf52"
def set_core_data(config): def set_core_data(config):
CORE.data[KEY_NRF52] = {} CORE.data[KEY_NRF52] = {}
CORE.data[KEY_NRF52][KEY_PRJ_CONF_OPTIONS] = {} CORE.data[KEY_NRF52][KEY_PRJ_CONF_OPTIONS] = {}
CORE.data[KEY_NRF52][KEY_ZEPHYR_OVERLAY] = ""
CORE.data[KEY_CORE][KEY_TARGET_PLATFORM] = PLATFORM_NRF52 CORE.data[KEY_CORE][KEY_TARGET_PLATFORM] = PLATFORM_NRF52
CORE.data[KEY_CORE][KEY_TARGET_FRAMEWORK] = config[CONF_FRAMEWORK][CONF_TYPE] CORE.data[KEY_CORE][KEY_TARGET_FRAMEWORK] = config[CONF_FRAMEWORK][CONF_TYPE]
return config return config
@@ -103,6 +104,7 @@ nrf52_ns = cg.esphome_ns.namespace("nrf52")
PrjConfValueType = Union[bool, str, int] PrjConfValueType = Union[bool, str, int]
KEY_PRJ_CONF_OPTIONS = "prj_conf_options" KEY_PRJ_CONF_OPTIONS = "prj_conf_options"
KEY_ZEPHYR_OVERLAY = "zephyr_overlay"
def add_zephyr_prj_conf_option(name: str, value: PrjConfValueType): def add_zephyr_prj_conf_option(name: str, value: PrjConfValueType):
@@ -118,6 +120,12 @@ def add_zephyr_prj_conf_option(name: str, value: PrjConfValueType):
CORE.data[KEY_NRF52][KEY_PRJ_CONF_OPTIONS][name] = value CORE.data[KEY_NRF52][KEY_PRJ_CONF_OPTIONS][name] = value
def add_zephyr_overlay(content):
if not CORE.using_zephyr:
raise ValueError("Not an zephyr project")
CORE.data[KEY_NRF52][KEY_ZEPHYR_OVERLAY] += content
@coroutine_with_priority(1000) @coroutine_with_priority(1000)
async def to_code(config): async def to_code(config):
cg.add(nrf52_ns.setup_preferences()) cg.add(nrf52_ns.setup_preferences())
@@ -206,10 +214,6 @@ def _format_prj_conf_val(value: PrjConfValueType) -> str:
raise ValueError raise ValueError
overlay = """
"""
# Called by writer.py # Called by writer.py
def copy_files(): def copy_files():
if CORE.using_zephyr: if CORE.using_zephyr:
@@ -223,7 +227,10 @@ def copy_files():
) )
write_file_if_changed(CORE.relative_build_path("zephyr/prj.conf"), contents) write_file_if_changed(CORE.relative_build_path("zephyr/prj.conf"), contents)
write_file_if_changed(CORE.relative_build_path("zephyr/app.overlay"), overlay) write_file_if_changed(
CORE.relative_build_path("zephyr/app.overlay"),
CORE.data[KEY_NRF52][KEY_ZEPHYR_OVERLAY],
)
dir = os.path.dirname(__file__) dir = os.path.dirname(__file__)
build_zephyr_file = os.path.join( build_zephyr_file = os.path.join(