5 #include <driver/uart.h> 6 #include "freertos/FreeRTOS.h" 9 #if defined(USE_ESP32_FRAMEWORK_ARDUINO) || defined(USE_ESP_IDF) 11 #endif // USE_ESP32_FRAMEWORK_ARDUINO || USE_ESP_IDF 18 static const char *
const TAG =
"logger";
20 static const char *
const LOG_LEVEL_COLORS[] = {
22 ESPHOME_LOG_BOLD(ESPHOME_LOG_COLOR_RED),
23 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_YELLOW),
24 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_GREEN),
25 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_MAGENTA),
26 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_CYAN),
27 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_GRAY),
28 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_WHITE),
30 static const char *
const LOG_LEVEL_LETTERS[] = {
47 const char *color = LOG_LEVEL_COLORS[level];
48 const char *letter = LOG_LEVEL_LETTERS[level];
64 #ifdef USE_STORE_LOG_STR_IN_FLASH 73 auto *format_pgm_p =
reinterpret_cast<const uint8_t *
>(format);
104 return ESPHOME_LOG_LEVEL;
118 #endif // USE_ARDUINO 121 #
if defined(USE_ESP32_VARIANT_ESP32S2)
123 #elif defined(USE_ESP32_VARIANT_ESP32C3)
125 #elif defined(USE_ESP32_VARIANT_ESP32S3)
133 uart_write_bytes(
uart_num_, msg, strlen(msg));
145 if (xPortGetFreeHeapSize() < 2048)
163 switch (this->
uart_) {
179 Serial.setDebugOutput(ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE);
191 Serial1.setDebugOutput(ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE);
194 #if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && \ 195 !defined(USE_ESP32_VARIANT_ESP32S3) 208 #endif // USE_ARDUINO 218 #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && !defined(USE_ESP32_VARIANT_ESP32S3) 222 #endif // !USE_ESP32_VARIANT_ESP32C3 && !USE_ESP32_VARIANT_ESP32S2 && !USE_ESP32_VARIANT_ESP32S3 223 #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) 227 #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3 228 #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) 232 #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 235 uart_config_t uart_config{};
237 uart_config.data_bits = UART_DATA_8_BITS;
238 uart_config.parity = UART_PARITY_DISABLE;
239 uart_config.stop_bits = UART_STOP_BITS_1;
240 uart_config.flow_ctrl = UART_HW_FLOWCTRL_DISABLE;
241 uart_param_config(
uart_num_, &uart_config);
244 uart_driver_install(
uart_num_, uart_buffer_size, uart_buffer_size, 10,
nullptr, 0);
246 #endif // USE_ESP_IDF 250 uart_set_debug(UART_NO);
252 #endif // USE_ESP8266 255 #if defined(USE_ESP_IDF) || defined(USE_ESP32_FRAMEWORK_ARDUINO) 257 if (ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE) {
258 esp_log_level_set(
"*", ESP_LOG_VERBOSE);
260 #endif // USE_ESP_IDF || USE_ESP32_FRAMEWORK_ARDUINO 262 ESP_LOGI(TAG,
"Log initialized");
269 #if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) 277 const char *
const LOG_LEVELS[] = {
"NONE",
"ERROR",
"WARN",
"INFO",
"CONFIG",
"DEBUG",
"VERBOSE",
"VERY_VERBOSE"};
281 #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && !defined(USE_ESP32_VARIANT_ESP32S3) 283 #endif // !USE_ESP32_VARIANT_ESP32C3 && !USE_ESP32_VARIANT_ESP32S2 && !USE_ESP32_VARIANT_ESP32S3 284 #if defined(USE_ESP_IDF) 285 #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) 287 #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3 288 #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) 290 #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 291 #endif // USE_ESP_IDF 295 const char *
const UART_SELECTIONS[] = {
"UART0",
"UART1",
"UART0_SWAP"};
298 const char *
const UART_SELECTIONS[] = {
"UART0",
"UART1",
"USB_CDC"};
299 #endif // USE_ESP8266 301 ESP_LOGCONFIG(TAG,
"Logger:");
302 ESP_LOGCONFIG(TAG,
" Level: %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
303 ESP_LOGCONFIG(TAG,
" Log Baud Rate: %" PRIu32, this->
baud_rate_);
304 #if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) 305 ESP_LOGCONFIG(TAG,
" Hardware UART: %s", UART_SELECTIONS[this->
uart_]);
309 ESP_LOGCONFIG(TAG,
" Level for '%s': %s", it.tag.c_str(), LOG_LEVELS[it.level]);
void set_baud_rate(uint32_t baud_rate)
Manually set the baud rate for serial, set to 0 to disable.
void add_on_log_callback(std::function< void(int, const char *, const char *)> &&callback)
Register a callback that will be called for every log message sent.
UARTSelection
Enum for logging UART selection.
int level_for(const char *tag)
void log_vprintf_(int level, const char *tag, int line, const char *format, va_list args)
void vprintf_to_buffer_(const char *format, va_list args)
void dump_config() override
float get_setup_priority() const override
Logger(uint32_t baud_rate, size_t tx_buffer_size)
void write_header_(int level, const char *tag, int line)
const float BUS
For communication buses like i2c/spi.
UARTSelection get_uart() const
Get the UART used by the logger.
void set_null_terminator_()
void printf_to_buffer_(const char *format,...)
void write_to_buffer_(char value)
const char *const LOG_LEVELS[]
void pre_setup()
Set up this component.
uint8_t progmem_read_byte(const uint8_t *addr)
const char *const UART_SELECTIONS[]
void log_message_(int level, const char *tag, int offset=0)
std::vector< LogLevelOverride > log_levels_
void set_log_level(const std::string &tag, int log_level)
Set the log level of the specified tag.
bool recursion_guard_
Prevents recursive log calls, if true a log message is already being processed.
CallbackManager< void(int, const char *, const char *)> log_callback_
int HOT esp_idf_log_vprintf_(const char *format, va_list args)
bool is_buffer_full_() const