From 431e89648b6038e3f2e6ba79c220f2edb4625c35 Mon Sep 17 00:00:00 2001 From: Tomasz Duda Date: Sat, 3 Feb 2024 14:25:56 +0100 Subject: [PATCH] fix config dump over cdc --- esphome/components/logger/__init__.py | 4 ++- esphome/components/logger/logger.cpp | 2 ++ esphome/components/logger/logger.h | 6 ++++- esphome/components/logger/logger_nrf52.cpp | 30 +++++++++++++++++++--- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/esphome/components/logger/__init__.py b/esphome/components/logger/__init__.py index 20726749d3..6f9fb7433d 100644 --- a/esphome/components/logger/__init__.py +++ b/esphome/components/logger/__init__.py @@ -40,7 +40,7 @@ from esphome.components.libretiny.const import ( COMPONENT_BK72XX, COMPONENT_RTL87XX, ) -from esphome.components.nrf52 import add_zephyr_overlay +from esphome.components.nrf52 import add_zephyr_overlay, add_zephyr_prj_conf_option CODEOWNERS = ["@esphome/core"] logger_ns = cg.esphome_ns.namespace("logger") @@ -299,6 +299,8 @@ async def to_code(config): if CORE.using_zephyr: if config[CONF_HARDWARE_UART] == UART0: add_zephyr_overlay("""&uart0 { status = "okay";};""") + if config[CONF_HARDWARE_UART] == USB_CDC: + add_zephyr_prj_conf_option("CONFIG_UART_LINE_CTRL", True) # Register at end for safe mode await cg.register_component(log, config) diff --git a/esphome/components/logger/logger.cpp b/esphome/components/logger/logger.cpp index 386177dba5..42768add41 100644 --- a/esphome/components/logger/logger.cpp +++ b/esphome/components/logger/logger.cpp @@ -152,6 +152,7 @@ Logger::Logger(uint32_t baud_rate, size_t tx_buffer_size) : baud_rate_(baud_rate } #ifdef USE_USB_CDC +# ifndef USE_ZEPHYR void Logger::loop() { #ifdef USE_ARDUINO if (this->uart_ != UART_SELECTION_USB_CDC) { @@ -168,6 +169,7 @@ void Logger::loop() { #endif } #endif +#endif void Logger::set_baud_rate(uint32_t baud_rate) { this->baud_rate_ = baud_rate; } void Logger::set_log_level(const std::string &tag, int log_level) { diff --git a/esphome/components/logger/logger.h b/esphome/components/logger/logger.h index c9497fa3df..617e21aad3 100644 --- a/esphome/components/logger/logger.h +++ b/esphome/components/logger/logger.h @@ -21,6 +21,10 @@ #include #endif // USE_ESP_IDF +#ifdef USE_ZEPHYR +struct device; +#endif + namespace esphome { namespace logger { @@ -157,7 +161,7 @@ class Logger : public Component { #elif defined(USE_ESP_IDF) uart_port_t uart_num_; #elif defined(USE_ZEPHYR) - const struct device * uart_dev_{nullptr}; + const device * uart_dev_{nullptr}; #endif struct LogLevelOverride { std::string tag; diff --git a/esphome/components/logger/logger_nrf52.cpp b/esphome/components/logger/logger_nrf52.cpp index 8979e8e0f9..a539ae8764 100644 --- a/esphome/components/logger/logger_nrf52.cpp +++ b/esphome/components/logger/logger_nrf52.cpp @@ -4,19 +4,41 @@ #endif #include "logger.h" #include "esphome/core/log.h" - -namespace esphome { -namespace logger { +#include "esphome/core/application.h" #ifdef USE_ZEPHYR -// it must be inside namespace since there is duplicated macro EMPTY #include #include #include #endif +namespace esphome { +namespace logger { + + static const char *const TAG = "logger"; +#ifdef USE_ZEPHYR +void Logger::loop() { + if (this->uart_ != UART_SELECTION_USB_CDC || nullptr == uart_dev_) { + return; + } + static bool opened = false; + uint32_t dtr = 0; + uart_line_ctrl_get(uart_dev_, UART_LINE_CTRL_DTR, &dtr); + + /* Poll if the DTR flag was set, optional */ + if(opened == dtr) { + return; + } + + if(false == opened){ + App.schedule_dump_config(); + } + opened = !opened; +} +#endif + void Logger::pre_setup() { if (this->baud_rate_ > 0) { #ifdef USE_ARDUINO