diff --git a/cpu/esp32/Makefile.dep b/cpu/esp32/Makefile.dep
index da8b9ab2a7..3bf4b3ee1c 100644
--- a/cpu/esp32/Makefile.dep
+++ b/cpu/esp32/Makefile.dep
@@ -84,6 +84,10 @@ ifneq (,$(filter shell,$(USEMODULE)))
USEMODULE += ps
endif
+ifneq (,$(filter log_color,$(USEMODULE)))
+ USEMODULE += esp_log_colored
+endif
+
# if SPI RAM is enabled, ESP-IDF heap and quot flash mode have to be used
ifneq (,$(filter esp_spi_ram,$(USEMODULE)))
USEMODULE += esp_idf_heap
diff --git a/cpu/esp32/Makefile.include b/cpu/esp32/Makefile.include
index 6127225ea8..b52b43a823 100644
--- a/cpu/esp32/Makefile.include
+++ b/cpu/esp32/Makefile.include
@@ -67,6 +67,8 @@ PSEUDOMODULES += esp_hw_counter
PSEUDOMODULES += esp_i2c_sw
PSEUDOMODULES += esp_i2c_hw
PSEUDOMODULES += esp_idf_newlib
+PSEUDOMODULES += esp_log_colored
+PSEUDOMODULES += esp_log_tagged
PSEUDOMODULES += esp_spi_ram
PSEUDOMODULES += esp_spiffs
PSEUDOMODULES += esp_wifi_any
@@ -145,6 +147,12 @@ ifeq ($(QEMU), 1)
CFLAGS += -DQEMU
endif
+ifneq (,$(filter esp_log_colored,$(USEMODULE)))
+ BOOTLOADER_BIN = bootloader_with_colors.bin
+else
+ BOOTLOADER_BIN = bootloader_without_colors.bin
+endif
+
# LINKFLAGS += -Wl,--verbose
LINKFLAGS += -L$(ESP32_SDK_DIR)/components/esp32
@@ -198,7 +206,7 @@ ifeq ($(QEMU), 1)
FLASHER = dd
FFLAGS += if=/dev/zero bs=1M count=4 | tr "\\000" "\\377" > tmp.bin && cat tmp.bin |
FFLAGS += head -c $$((0x1000)) |
- FFLAGS += cat - $(RIOTCPU)/$(CPU)/bin/bootloader.bin tmp.bin |
+ FFLAGS += cat - $(RIOTCPU)/$(CPU)/bin/$(BOOTLOADER_BIN) tmp.bin |
FFLAGS += head -c $$((0x8000)) |
FFLAGS += cat - $(BINDIR)/partitions.bin tmp.bin |
FFLAGS += head -c $$((0x10000)) |
@@ -212,7 +220,7 @@ else
FFLAGS += --chip esp32 -p $(PROG_DEV) -b $(PROGRAMMER_SPEED)
FFLAGS += --before default_reset --after hard_reset write_flash
FFLAGS += -z -fm $(FLASH_MODE) -fs detect -ff $(FLASH_FREQ)
- FFLAGS += 0x1000 $(RIOTCPU)/$(CPU)/bin/bootloader.bin
+ FFLAGS += 0x1000 $(RIOTCPU)/$(CPU)/bin/$(BOOTLOADER_BIN)
FFLAGS += 0x8000 $(BINDIR)/partitions.bin
FFLAGS += 0x10000 $(FLASHFILE).bin
endif
diff --git a/cpu/esp32/bin/bootloader.elf b/cpu/esp32/bin/bootloader.elf
deleted file mode 100755
index 7edfd36320..0000000000
Binary files a/cpu/esp32/bin/bootloader.elf and /dev/null differ
diff --git a/cpu/esp32/bin/bootloader.bin b/cpu/esp32/bin/bootloader_with_colors.bin
similarity index 100%
rename from cpu/esp32/bin/bootloader.bin
rename to cpu/esp32/bin/bootloader_with_colors.bin
diff --git a/cpu/esp32/bin/bootloader_without_colors.bin b/cpu/esp32/bin/bootloader_without_colors.bin
new file mode 100644
index 0000000000..e7b39fa35c
Binary files /dev/null and b/cpu/esp32/bin/bootloader_without_colors.bin differ
diff --git a/cpu/esp32/doc.txt b/cpu/esp32/doc.txt
index fb3922a507..6dcc150623 100644
--- a/cpu/esp32/doc.txt
+++ b/cpu/esp32/doc.txt
@@ -114,6 +114,8 @@ Module | Default | Short description
[esp_hw_counter](#esp32_timers) | not used | use hardware counters for RIOT timers
[esp_i2c_hw](#esp32_i2c_interfaces) | not used | use the i2C hardware implementation
[esp_idf_heap](#esp32_esp_idf_heap_implementation) | not used | enable ESP-IDF heap implementation
+[esp_log_colored](#esp32_esp_log_module) | not used | enable colored log output
+[esp_log_tagged](#esp32_esp_log_module) | not used | add additional information to the log output
[esp_now](#esp32_esp_now_network_interface) | not used | enable the ESP-NOW network device
[esp_spi_ram](#esp32_spi_ram) | not used | enable SPI RAM
[esp_spiffs](#esp32_spiffs_device) | not used | enable SPIFFS for on-board flash memory
@@ -409,6 +411,8 @@ esp_eth | Enable the Ethernet MAC (EMAC) interface as `netdev` network device, s
esp_gdb | Enable the compilation with debug information for debugging with [QEMU and GDB](#esp32_qemu_mode_and_gdb) (```QEMU=1```) or via [JTAG interface with OpenOCD](#esp32_jtag_debugging).
esp_i2c_hw | Use the hardware I2C implementation, see section [I2C Interfaces](#esp32_i2c_interfaces).
esp_idf_heap | Use the ESP-IDF heap implementation, see section [ESP-IDF Heap Implementation](#esp32_esp_idf_heap_implementation).
+esp_log_colored | Enable colored log output, see section [Log output](#esp32_esp_log_module).
+esp_log_tagged | Add additional information to the log output, see section [Log output](#esp32_esp_log_module).
esp_now | Enable the built-in WiFi module with the ESP-NOW protocol as `netdev` network device, see section [ESP-NOW Network Interface](#esp32_esp_now_network_interface).
esp_spiffs | Enable the optional SPIFFS drive in on-board flash memory, see section [SPIFFS Device](#esp32_spiffs_device).
esp_spi_ram | Enable the optional SPI RAM, see section [SPI RAM Modules](#esp32_spi_ram).
@@ -435,6 +439,41 @@ The flash mode determines whether 2 data lines (```dio``` and ```dout```) or 4 d
For more information about these flash modes, refer the documentation of [esptool.py](https://github.com/espressif/esptool/wiki/SPI-Flash-Modes).
+## Log output [[TOC](#esp32_toc)]
+
+The RIOT port for ESP32 implements a log module with a bunch of macros
+to generate log output according to the interface as defined in
+[system logging header](http://doc.riot-os.org/log_8h.html). These macros
+support colored and tagged log output.
+
+The colored log output is enabled by module `esp_log_colored`. If colored log
+output is enabled, log messages are displayed in color according to their type:
+Error messages are displayed in red, warnings in yellow, information
+messages in green and all other message types in standard color.
+
+When the `esp_log_tagged` module is used, all log messages are tagged with
+additional information: the type of message, the system time in ms, and the
+module or function in which the log message is generated. For example:
+
+```
+I (663) [main_trampoline] main(): This is RIOT! (Version: 2019.10-devel-437-gf506a)
+```
+
+Either the `LOG_*` macros as defined in
+[system logging header](http://doc.riot-os.org/log_8h.html) or the tagged
+version `LOG_TAG_*` of these macros can be used to produce tagged log output.
+If the `LOG_*` macros are used, the function which generates the log message
+is used in the tag while a `tag` parameter is used for the `LOG_TAG_*` macros.
+For example,
+```
+LOG_ERROR("error message");
+```
+generates a log message in which the name of the calling function is used as
+tag. With
+```
+LOG_TAG_ERROR("mod", "error message");
+```
+a log message with string `mod` in the tag is generated.
## ESP-IDF Heap Implementation [[TOC](#esp32_toc)]
diff --git a/cpu/esp32/include/esp_common_log.h b/cpu/esp32/include/esp_common_log.h
index 5d5d8ab63f..5cb179ef81 100644
--- a/cpu/esp32/include/esp_common_log.h
+++ b/cpu/esp32/include/esp_common_log.h
@@ -26,48 +26,111 @@
extern "C" {
#endif
+#include
+#include
+
#include "log.h"
-#define LOG_TAG(level, tag, ...) do { \
- if ((level) <= LOG_LEVEL) log_write_tagged(level, tag, __VA_ARGS__); } while (0U)
+extern uint32_t system_get_time_ms (void);
+extern int ets_printf(const char *fmt, ...);
+
+#if MODULE_ESP_LOG_COLORED
+
+#define LOG_RESET_COLOR "\033[0m"
+#define LOG_COLOR_E "\033[1;31m"
+#define LOG_COLOR_W "\033[1;33m"
+#define LOG_COLOR_I "\033[1m"
+#define LOG_COLOR_D "\033[0;32m"
+#define LOG_COLOR_V
+
+#else /* MODULE_ESP_LOG_COLORED */
+
+#define LOG_COLOR_E
+#define LOG_COLOR_W
+#define LOG_COLOR_I
+#define LOG_COLOR_D
+#define LOG_COLOR_V
+#define LOG_RESET_COLOR
+
+#endif /* MODULE_ESP_LOG_COLORED */
+
+#if MODULE_ESP_LOG_TAGGED
+
+#define LOG_FORMAT(letter, format) LOG_COLOR_ ## letter #letter " (%d) [%s] " format LOG_RESET_COLOR
+
+#define LOG_TAG(level, letter, tag, format, ...) \
+ do { \
+ if ((unsigned)level <= (unsigned)LOG_LEVEL) { \
+ printf(LOG_FORMAT(letter, format), system_get_time_ms(), tag, ##__VA_ARGS__); \
+ fflush(stdout); \
+ } \
+ } while(0)
+
+#define LOG_TAG_EARLY(level, letter, tag, format, ...) \
+ do { \
+ if (LOG_LEVEL >= level) { \
+ ets_printf(LOG_FORMAT(letter, format), system_get_time_ms(), tag, ##__VA_ARGS__); \
+ } \
+ } while(0)
+
+#else /* MODULE_ESP_LOG_TAGGED */
+
+#define LOG_FORMAT(letter, format) LOG_COLOR_ ## letter format LOG_RESET_COLOR
+
+#define LOG_TAG(level, letter, tag, format, ...) \
+ do { \
+ (void)tag; \
+ if ((unsigned)level <= (unsigned)LOG_LEVEL) { \
+ printf(LOG_FORMAT(letter, format), ##__VA_ARGS__); \
+ fflush(stdout); \
+ } \
+ } while (0U)
+
+#define LOG_TAG_EARLY(level, letter, tag, format, ...) \
+ do { \
+ (void)tag; \
+ if ((unsigned)level <= (unsigned)LOG_LEVEL) { \
+ ets_printf(LOG_FORMAT(letter, format), ##__VA_ARGS__); \
+ } \
+ } while (0U)
+
+#endif /* MODULE_ESP_LOG_TAGGED */
/**
* Override LOG_* definitions with a tagged version. By default the function
- * name is used tag.
+ * name is used as tag.
*/
+#ifndef MODULE_LOG_PRINTFNOFORMAT
#undef LOG_ERROR
#undef LOG_INFO
#undef LOG_WARNING
#undef LOG_DEBUG
-#define LOG_ERROR(fmt, ...) LOG_TAG(LOG_ERROR , __func__, fmt, ##__VA_ARGS__)
-#define LOG_WARNING(fmt, ...) LOG_TAG(LOG_WARNING, __func__, fmt, ##__VA_ARGS__)
-#define LOG_INFO(fmt, ...) LOG_TAG(LOG_INFO , __func__, fmt, ##__VA_ARGS__)
-#define LOG_DEBUG(fmt, ...) LOG_TAG(LOG_DEBUG , __func__, fmt, ##__VA_ARGS__)
+#define LOG_ERROR(format, ...) LOG_TAG(LOG_ERROR , E, __func__, format, ##__VA_ARGS__)
+#define LOG_WARNING(format, ...) LOG_TAG(LOG_WARNING, W, __func__, format, ##__VA_ARGS__)
+#define LOG_INFO(format, ...) LOG_TAG(LOG_INFO , I, __func__, format, ##__VA_ARGS__)
+#define LOG_DEBUG(format, ...) LOG_TAG(LOG_DEBUG , D, __func__, format, ##__VA_ARGS__)
+#endif
/** Tagged LOG_* definitions */
-#define LOG_TAG_ERROR(tag, fmt, ...) LOG_TAG(LOG_ERROR , tag, fmt, ##__VA_ARGS__)
-#define LOG_TAG_WARNING(tag, fmt, ...) LOG_TAG(LOG_WARNING, tag, fmt, ##__VA_ARGS__)
-#define LOG_TAG_INFO(tag, fmt, ...) LOG_TAG(LOG_INFO , tag, fmt, ##__VA_ARGS__)
-#define LOG_TAG_DEBUG(tag, fmt, ...) LOG_TAG(LOG_DEBUG , tag, fmt, ##__VA_ARGS__)
+#define LOG_TAG_ERROR(tag, format, ...) LOG_TAG(LOG_ERROR , E, tag, format, ##__VA_ARGS__)
+#define LOG_TAG_WARNING(tag, format, ...) LOG_TAG(LOG_WARNING, W, tag, format, ##__VA_ARGS__)
+#define LOG_TAG_INFO(tag, format, ...) LOG_TAG(LOG_INFO , I, tag, format, ##__VA_ARGS__)
+#define LOG_TAG_DEBUG(tag, format, ...) LOG_TAG(LOG_DEBUG , D, tag, format, ##__VA_ARGS__)
/** definitions for source code compatibility with ESP-IDF */
-#define ESP_EARLY_LOGE(tag, fmt, ...) LOG_TAG(LOG_ERROR , tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_EARLY_LOGW(tag, fmt, ...) LOG_TAG(LOG_WARNING, tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_EARLY_LOGI(tag, fmt, ...) LOG_TAG(LOG_INFO , tag, fmt "\n", ##__VA_ARGS__)
-/*
-#define ESP_EARLY_LOGI(tag, fmt, ...) ets_printf("I (%u) %s: " fmt "\n", \
- system_get_time_ms(), tag, ##__VA_ARGS__)
-*/
-#define ESP_LOGE(tag, fmt, ...) LOG_TAG(LOG_ERROR , tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_LOGW(tag, fmt, ...) LOG_TAG(LOG_WARNING, tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_LOGI(tag, fmt, ...) LOG_TAG(LOG_INFO , tag, fmt "\n", ##__VA_ARGS__)
+#define ESP_EARLY_LOGE(tag, format, ...) LOG_TAG_EARLY(LOG_ERROR , E, tag, format "\n", ##__VA_ARGS__)
+#define ESP_EARLY_LOGW(tag, format, ...) LOG_TAG_EARLY(LOG_WARNING, W, tag, format "\n", ##__VA_ARGS__)
+#define ESP_EARLY_LOGI(tag, format, ...) LOG_TAG_EARLY(LOG_INFO , I, tag, format "\n", ##__VA_ARGS__)
+#define ESP_LOGE(tag, format, ...) LOG_TAG(LOG_ERROR , E, tag, format "\n", ##__VA_ARGS__)
+#define ESP_LOGW(tag, format, ...) LOG_TAG(LOG_WARNING, W, tag, format "\n", ##__VA_ARGS__)
+#define ESP_LOGI(tag, format, ...) LOG_TAG(LOG_INFO , I, tag, format "\n", ##__VA_ARGS__)
#if ENABLE_DEBUG
-#define ESP_EARLY_LOGD(tag, fmt, ...) LOG_TAG(LOG_DEBUG, tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_EARLY_LOGV(tag, fmt, ...) LOG_TAG(LOG_ALL , tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_LOGD(tag, fmt, ...) LOG_TAG(LOG_DEBUG, tag, fmt "\n", ##__VA_ARGS__)
-#define ESP_LOGV(tag, fmt, ...) LOG_TAG(LOG_ALL , tag, fmt "\n", ##__VA_ARGS__)
+#define ESP_EARLY_LOGD(tag, format, ...) LOG_TAG_EARLY(LOG_DEBUG, D, tag, format "\n", ##__VA_ARGS__)
+#define ESP_EARLY_LOGV(tag, format, ...) LOG_TAG_EARLY(LOG_ALL , V, tag, format "\n", ##__VA_ARGS__)
+#define ESP_LOGD(tag, format, ...) LOG_TAG(LOG_DEBUG, D, tag, format "\n", ##__VA_ARGS__)
+#define ESP_LOGV(tag, format, ...) LOG_TAG(LOG_ALL , V, tag, format "\n", ##__VA_ARGS__)
#else /* ENABLE_DEBUG */
diff --git a/cpu/esp32/include/log_module.h b/cpu/esp32/include/log_module.h
index 60229f7134..7f5bf2e083 100644
--- a/cpu/esp32/include/log_module.h
+++ b/cpu/esp32/include/log_module.h
@@ -23,22 +23,35 @@
extern "C" {
#endif
-/**
- * @brief log_write overridden function
- *
- * @param[in] level (unused)
- * @param[in] format String that the function will print
- */
-void log_write(unsigned level, const char *format, ...);
+#include
+#include "esp_common_log.h"
-/**
- * @brief log_write overridden function, tagged version
- *
- * @param[in] level Level of the message
- * @param[in] tag Additional information like function or module
- * @param[in] format String that the function will print
- */
-void log_write_tagged(unsigned level, const char *tag, const char *format, ...);
+#ifdef MODULE_LOG_PRINTFNOFORMAT
+
+static inline void log_write(unsigned level, const char *format, ...) {
+ (void)level;
+ puts(format);
+}
+
+#else /* MODULE_LOG_PRINTFNOFORMAT */
+
+#define log_write(level, ...) \
+ do { \
+ if (level == LOG_ERROR) { \
+ LOG_TAG(LOG_ERROR, E, __func__, ##__VA_ARGS__); \
+ } \
+ else if (level == LOG_WARNING) { \
+ LOG_TAG(LOG_WARNING, W, __func__, ##__VA_ARGS__); \
+ } \
+ else if (level == LOG_INFO) { \
+ LOG_TAG(LOG_INFO, D, __func__, ##__VA_ARGS__); \
+ } \
+ else if (level == LOG_DEBUG) { \
+ LOG_TAG(LOG_DEBUG, E, __func__, ##__VA_ARGS__); \
+ } \
+ } while (0U);
+
+#endif /* MODULE_LOG_PRINTFNOFORMAT */
#ifdef __cplusplus
}
diff --git a/cpu/esp32/log_module.c b/cpu/esp32/log_module.c
deleted file mode 100644
index b90b26850f..0000000000
--- a/cpu/esp32/log_module.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2018 Gunar Schorcht
- *
- * This file is subject to the terms and conditions of the GNU Lesser
- * General Public License v2.1. See the file LICENSE in the top level
- * directory for more details.
- */
-
-/**
- * @ingroup cpu_esp32
- * @{
- *
- * @file
- * @brief Log module to realize consistent log messages
- *
- * @author Gunar Schorcht
- */
-
-#include
-#include
-
-#include "rom/ets_sys.h"
-
-#include "cpu_conf.h"
-#include "log.h"
-#include "syscalls.h"
-
-char _printf_buf[PRINTF_BUFSIZ];
-bool _new_line = true;
-
-void log_write(unsigned level, const char *format, ...)
-{
- if (level == LOG_NONE) {
- return;
- }
-
- if (_new_line) {
- /* if we are in new line, we print the prefix */
- char lc = 'U';
- switch (level) {
- case LOG_ERROR : lc = 'E'; break;
- case LOG_WARNING: lc = 'W'; break;
- case LOG_INFO : lc = 'I'; break;
- case LOG_DEBUG : lc = 'D'; break;
- case LOG_ALL : lc = 'V'; break;
- }
- ets_printf("%c (%u) ", lc, system_get_time_ms());
- }
-
- va_list arglist;
- va_start(arglist, format);
-
- int ret = vsnprintf(_printf_buf, PRINTF_BUFSIZ, format, arglist);
-
- if (ret > 0) {
- ets_printf (_printf_buf);
- }
-
- va_end(arglist);
-
- _new_line = (strrchr(format, '\n') != NULL);
-}
-
-void log_write_tagged(unsigned level, const char *tag, const char *format, ...)
-{
- if (level == LOG_NONE) {
- return;
- }
-
- if (_new_line) {
- /* if we are in new line, we print the prefix */
- char lc = 'U';
- switch (level) {
- case LOG_ERROR : lc = 'E'; break;
- case LOG_WARNING: lc = 'W'; break;
- case LOG_INFO : lc = 'I'; break;
- case LOG_DEBUG : lc = 'D'; break;
- case LOG_ALL : lc = 'V'; break;
- }
- #if LOG_TAG_IN_BRACKETS
- ets_printf("%c (%u) [%10s]: ", lc, system_get_time_ms(), tag);
- #else
- ets_printf("%c (%u) %10s: ", lc, system_get_time_ms(), tag);
- #endif
- }
-
- va_list arglist;
- va_start(arglist, format);
-
- int ret = vsnprintf(_printf_buf, PRINTF_BUFSIZ, format, arglist);
-
- if (ret > 0) {
- ets_printf (_printf_buf);
- }
-
- va_end(arglist);
-
- _new_line = (strrchr(format, '\n') != NULL);
-}
diff --git a/cpu/esp32/periph/adc.c b/cpu/esp32/periph/adc.c
index e511fe54e6..8dd816de5d 100644
--- a/cpu/esp32/periph/adc.c
+++ b/cpu/esp32/periph/adc.c
@@ -26,7 +26,6 @@
#include "adc_ctrl.h"
#include "esp_common.h"
#include "gpio_arch.h"
-#include "rom/ets_sys.h"
#include "soc/rtc_io_struct.h"
#include "soc/rtc_cntl_struct.h"
#include "soc/sens_reg.h"
@@ -271,11 +270,11 @@ static void _adc_module_init(void)
void adc_print_config(void)
{
- ets_printf("\tADC\t\tpins=[ ");
+ printf("\tADC\t\tpins=[ ");
#if defined(ADC_GPIOS)
for (unsigned i = 0; i < ADC_NUMOF; i++) {
- ets_printf("%d ", adc_channels[i]);
+ printf("%d ", adc_channels[i]);
}
#endif /* defined(ADC_GPIOS) */
- ets_printf("]\n");
+ printf("]\n");
}
diff --git a/cpu/esp32/periph/dac.c b/cpu/esp32/periph/dac.c
index bc569b3c31..c8d24a3dc7 100644
--- a/cpu/esp32/periph/dac.c
+++ b/cpu/esp32/periph/dac.c
@@ -26,7 +26,6 @@
#include "adc_ctrl.h"
#include "esp_common.h"
#include "gpio_arch.h"
-#include "rom/ets_sys.h"
#include "soc/rtc_io_struct.h"
#include "soc/rtc_cntl_struct.h"
#include "soc/sens_reg.h"
@@ -136,11 +135,11 @@ static bool _dac_conf_check(void)
void dac_print_config(void)
{
- ets_printf("\tDAC\t\tpins=[ ");
+ printf("\tDAC\t\tpins=[ ");
#if defined(DAC_GPIOS)
for (unsigned i = 0; i < DAC_NUMOF; i++) {
- ets_printf("%d ", dac_channels[i]);
+ printf("%d ", dac_channels[i]);
}
#endif /* defined(DAC_GPIOS) */
- ets_printf("]\n");
+ printf("]\n");
}
diff --git a/cpu/esp32/periph/i2c_hw.c b/cpu/esp32/periph/i2c_hw.c
index 4a2f379278..0ae20be194 100644
--- a/cpu/esp32/periph/i2c_hw.c
+++ b/cpu/esp32/periph/i2c_hw.c
@@ -869,8 +869,8 @@ static void _i2c_reset_hw (i2c_t dev)
void i2c_print_config(void)
{
for (unsigned dev = 0; dev < I2C_NUMOF; dev++) {
- ets_printf("\tI2C_DEV(%d)\tscl=%d sda=%d\n",
- dev, i2c_config[dev].scl, i2c_config[dev].sda);
+ printf("\tI2C_DEV(%u)\tscl=%d sda=%d\n",
+ dev, i2c_config[dev].scl, i2c_config[dev].sda);
}
}
diff --git a/cpu/esp32/periph/i2c_sw.c b/cpu/esp32/periph/i2c_sw.c
index d8b8463cfa..568b004871 100644
--- a/cpu/esp32/periph/i2c_sw.c
+++ b/cpu/esp32/periph/i2c_sw.c
@@ -700,8 +700,8 @@ static /* IRAM */ int _i2c_read_byte(_i2c_bus_t* bus, uint8_t *byte, bool ack)
void i2c_print_config(void)
{
for (unsigned dev = 0; dev < I2C_NUMOF; dev++) {
- ets_printf("\tI2C_DEV(%d)\tscl=%d sda=%d\n",
- dev, i2c_config[dev].scl, i2c_config[dev].sda);
+ printf("\tI2C_DEV(%u)\tscl=%d sda=%d\n",
+ dev, i2c_config[dev].scl, i2c_config[dev].sda);
}
}
diff --git a/cpu/esp32/periph/pwm.c b/cpu/esp32/periph/pwm.c
index 3bbe6a4e60..1e78ad143d 100644
--- a/cpu/esp32/periph/pwm.c
+++ b/cpu/esp32/periph/pwm.c
@@ -32,7 +32,6 @@
#include "gpio_arch.h"
#include "driver/periph_ctrl.h"
-#include "rom/ets_sys.h"
#include "soc/gpio_struct.h"
#include "soc/gpio_sig_map.h"
#include "soc/mcpwm_reg.h"
@@ -437,11 +436,11 @@ static bool _pwm_configuration(void)
void pwm_print_config(void)
{
for (unsigned pwm = 0; pwm < PWM_NUMOF; pwm++) {
- ets_printf("\tPWM_DEV(%d)\tchannels=[ ", pwm);
+ printf("\tPWM_DEV(%d)\tchannels=[ ", pwm);
for (int i = 0; i < _pwm_hw[pwm].gpio_num; i++) {
- ets_printf("%d ", _pwm_hw[pwm].gpios[i]);
+ printf("%d ", _pwm_hw[pwm].gpios[i]);
}
- ets_printf("]\n");
+ printf("]\n");
}
}
diff --git a/cpu/esp32/periph/spi.c b/cpu/esp32/periph/spi.c
index 2af333f6d1..b16a651f96 100644
--- a/cpu/esp32/periph/spi.c
+++ b/cpu/esp32/periph/spi.c
@@ -125,7 +125,7 @@ void IRAM_ATTR spi_init (spi_t bus)
_spi[bus].signal_miso = VSPIQ_IN_IDX;
break;
default: LOG_TAG_ERROR("spi", "invalid SPI interface controller "
- "used for SPI_DEV(%d)\n");
+ "used for SPI_DEV(%d)\n", bus);
break;
}
return;
@@ -361,11 +361,11 @@ static const char* _spi_names[] = { "CSPI", "FSPI", "HSPI", "VSPI" };
void spi_print_config(void)
{
for (unsigned bus = 0; bus < SPI_NUMOF; bus++) {
- ets_printf("\tSPI_DEV(%d)\t%s ", bus, _spi_names[spi_config[bus].ctrl]);
- ets_printf("sck=%d " , spi_config[bus].sck);
- ets_printf("miso=%d ", spi_config[bus].miso);
- ets_printf("mosi=%d ", spi_config[bus].mosi);
- ets_printf("cs=%d\n" , spi_config[bus].cs);
+ printf("\tSPI_DEV(%u)\t%s ", bus, _spi_names[spi_config[bus].ctrl]);
+ printf("sck=%d " , spi_config[bus].sck);
+ printf("miso=%d ", spi_config[bus].miso);
+ printf("mosi=%d ", spi_config[bus].mosi);
+ printf("cs=%d\n" , spi_config[bus].cs);
}
}
diff --git a/cpu/esp32/periph/uart.c b/cpu/esp32/periph/uart.c
index 6e5d4d2522..d0b5fcb2e6 100644
--- a/cpu/esp32/periph/uart.c
+++ b/cpu/esp32/periph/uart.c
@@ -205,8 +205,8 @@ void uart_system_init (void)
void uart_print_config(void)
{
for (unsigned uart = 0; uart < UART_NUMOF; uart++) {
- ets_printf("\tUART_DEV(%d)\ttxd=%d rxd=%d\n", uart,
- uart_config[uart].txd, uart_config[uart].rxd);
+ printf("\tUART_DEV(%u)\ttxd=%d rxd=%d\n", uart,
+ uart_config[uart].txd, uart_config[uart].rxd);
}
}
diff --git a/cpu/esp32/tools.c b/cpu/esp32/tools.c
index 513e3abd90..23f8878e79 100644
--- a/cpu/esp32/tools.c
+++ b/cpu/esp32/tools.c
@@ -43,18 +43,18 @@ void esp_hexdump (const void* addr, uint32_t num, char width, uint8_t per_line)
while (count < num) {
if (count % per_line == 0) {
- ets_printf ("%08" PRIx32 ": ", (uint32_t)((uint8_t*)addr+count*size));
+ printf ("%08" PRIx32 ": ", (uint32_t)((uint8_t*)addr+count*size));
}
switch (width) {
- case 'b': ets_printf("%02" PRIx8 " ", addr8[count++]); break;
- case 'h': ets_printf("%04" PRIx16 " ", addr16[count++]); break;
- case 'w': ets_printf("%08" PRIx32 " ", addr32[count++]); break;
- case 'g': ets_printf("%016" PRIx64 " ", addr64[count++]); break;
- default : ets_printf("."); count++; break;
+ case 'b': printf("%02" PRIx8 " ", addr8[count++]); break;
+ case 'h': printf("%04" PRIx16 " ", addr16[count++]); break;
+ case 'w': printf("%08" PRIx32 " ", addr32[count++]); break;
+ case 'g': printf("%016" PRIx64 " ", addr64[count++]); break;
+ default : printf("."); count++; break;
}
if (count % per_line == 0) {
- ets_printf ("\n");
+ printf ("\n");
}
}
- ets_printf ("\n");
+ printf ("\n");
}
diff --git a/cpu/esp32/vendor/esp-idf/esp_funcs.c b/cpu/esp32/vendor/esp-idf/esp_funcs.c
index 204eaea107..b7914693f5 100644
--- a/cpu/esp32/vendor/esp-idf/esp_funcs.c
+++ b/cpu/esp32/vendor/esp-idf/esp_funcs.c
@@ -86,6 +86,22 @@ uint32_t IRAM_ATTR esp_log_timestamp(void)
return system_get_time() / USEC_PER_MSEC;
}
+
+#if MODULE_ESP_LOG_TAGGED
+#define ESP_LOG_PREFIX(letter, tag) \
+ printf(LOG_COLOR_ ## letter #letter " (%d) [%s] ", \
+ system_get_time_ms(), tag)
+#else
+#define ESP_LOG_PREFIX(letter, tag) \
+ printf(LOG_COLOR_ ## letter "[%s] ", tag)
+#endif
+
+#if MODULE_ESP_LOG_COLORED
+#define ESP_LOG_SUFFIX() printf(LOG_RESET_COLOR)
+#else
+#define ESP_LOG_SUFFIX()
+#endif
+
/*
* provided by: /path/to/esp-idf/component/log/log.c
*/
@@ -97,23 +113,16 @@ void IRAM_ATTR esp_log_write(esp_log_level_t level,
}
char _printf_buf[PRINTF_BUFSIZ];
-
const char* prefix = (strchr (format, ':') + 2);
- char lc = 'U';
switch (level) {
case LOG_NONE : return;
- case LOG_ERROR : lc = 'E'; break;
- case LOG_WARNING: lc = 'W'; break;
- case LOG_INFO : lc = 'I'; break;
- case LOG_DEBUG : lc = 'D'; break;
- case LOG_ALL : lc = 'V'; break;
+ case LOG_ERROR : ESP_LOG_PREFIX(E, tag); break;
+ case LOG_WARNING: ESP_LOG_PREFIX(W, tag); break;
+ case LOG_INFO : ESP_LOG_PREFIX(I, tag); break;
+ case LOG_DEBUG : ESP_LOG_PREFIX(D, tag); break;
+ case LOG_ALL : ESP_LOG_PREFIX(V, tag); break;
}
- #ifdef LOG_TAG_IN_BRACKETS
- ets_printf("%c (%u) [%10s]: ", lc, system_get_time_ms(), tag);
- #else
- ets_printf("%c (%u) %10s: ", lc, system_get_time_ms(), tag);
- #endif
va_list arglist;
va_start(arglist, format);
@@ -124,11 +133,13 @@ void IRAM_ATTR esp_log_write(esp_log_level_t level,
int ret = vsnprintf(_printf_buf, PRINTF_BUFSIZ, prefix, arglist);
+ va_end(arglist);
+
if (ret > 0) {
- ets_printf (_printf_buf);
+ printf ("%s", _printf_buf);
}
- va_end(arglist);
+ ESP_LOG_SUFFIX();
}
/*
@@ -154,11 +165,11 @@ void spi_ram_init(void)
_spi_ram_initialized = true;
}
else {
- ets_printf("Failed to init external SPI RAM\n");
+ ESP_EARLY_LOGE("spi_ram", "Failed to init external SPI RAM\n");
_spi_ram_initialized = false;
}
#else
- ets_printf("External SPI RAM functions not enabled\n");
+ ESP_EARLY_LOGI("spi_ram", "External SPI RAM functions not enabled\n");
#endif
}
@@ -178,14 +189,14 @@ void spi_ram_heap_init(void)
#if CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC
esp_err_t r=esp_spiram_add_to_heapalloc();
if (r != ESP_OK) {
- ets_printf("External SPI RAM could not be added to heap!\n");
+ ESP_EARLY_LOGE("spi_ram", "External SPI RAM could not be added to heap!\n");
abort();
}
#if CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL
r=esp_spiram_reserve_dma_pool(CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL);
if (r != ESP_OK) {
- ets_printf("Could not reserve internal/DMA pool!\n");
+ ESP_EARLY_LOGE("spi_ram", "Could not reserve internal/DMA pool!\n");
abort();
}
#endif /* CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL */
@@ -197,7 +208,7 @@ void spi_ram_heap_init(void)
#endif /* CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC */
#else /* CONFIG_SPIRAM_SUPPORT */
- ets_printf("External SPI RAM functions not enabled\n");
+ ESP_EARLY_LOGI("spi_ram", "External SPI RAM functions not enabled\n");
#endif /* CONFIG_SPIRAM_SUPPORT */
}
diff --git a/cpu/esp32/vendor/esp-idf/include/log/esp_log.h b/cpu/esp32/vendor/esp-idf/include/log/esp_log.h
index 7743c05a7a..f7a5a2e1a7 100644
--- a/cpu/esp32/vendor/esp-idf/include/log/esp_log.h
+++ b/cpu/esp32/vendor/esp-idf/include/log/esp_log.h
@@ -318,41 +318,36 @@ void esp_log_write(esp_log_level_t level, const char* tag, const char* format, .
#include "esp_common.h"
-#if 0 /* TODO */
-
-#define LOG_FORMAT(letter, format) #letter " (%d) %s: " format "\n"
-
-#define ESP_LOG_LEVEL(level, tag, format, ...) do { \
- if ((esp_log_level_t)level==ESP_LOG_ERROR ) { \
- esp_log_write(ESP_LOG_ERROR, tag, LOG_FORMAT(E, format), \
- esp_log_timestamp(), tag, ##__VA_ARGS__); \
- } \
- else if ((esp_log_level_t)level==ESP_LOG_WARN ) { \
- esp_log_write(ESP_LOG_WARN, tag, LOG_FORMAT(W, format), \
- esp_log_timestamp(), tag, ##__VA_ARGS__); \
- } \
- else if ((esp_log_level_t)level==ESP_LOG_DEBUG ) { \
- esp_log_write(ESP_LOG_DEBUG, tag, LOG_FORMAT(D, format), \
- esp_log_timestamp(), tag, ##__VA_ARGS__); \
- } \
- else if ((esp_log_level_t)level==ESP_LOG_VERBOSE ) { \
- esp_log_write(ESP_LOG_VERBOSE, tag, LOG_FORMAT(V, format), \
- esp_log_timestamp(), tag, ##__VA_ARGS__); \
- } \
- else { \
- esp_log_write(ESP_LOG_INFO, tag, LOG_FORMAT(I, format), \
- esp_log_timestamp(), tag, ##__VA_ARGS__); \
- } \
- } while(0)
-
-#define ESP_LOG_LEVEL_LOCAL(level, tag, format, ...) do { \
- if ( LOG_LOCAL_LEVEL >= level ) ESP_LOG_LEVEL(level, tag, format, ##__VA_ARGS__); \
- } while(0)
-
-#else
-#define ESP_LOG_LEVEL_LOCAL(level, tag, format, ...)
+#ifndef LOG_LOCAL_LEVEL
+#define LOG_LOCAL_LEVEL (esp_log_level_t)LOG_LEVEL
#endif
+#define ESP_LOG_LEVEL(level, tag, format, ...) \
+ do { \
+ if ((esp_log_level_t)level==ESP_LOG_ERROR ) { \
+ LOG_TAG(level, E, tag, format, ##__VA_ARGS__); \
+ } \
+ else if ((esp_log_level_t)level==ESP_LOG_WARN ) { \
+ LOG_TAG(level, W, tag, format, ##__VA_ARGS__); \
+ } \
+ else if ((esp_log_level_t)level==ESP_LOG_INFO ) { \
+ LOG_TAG(level, I, tag, format, ##__VA_ARGS__); \
+ } \
+ else if ((esp_log_level_t)level==ESP_LOG_DEBUG ) { \
+ LOG_TAG(level, D, tag, format, ##__VA_ARGS__); \
+ } \
+ else if ((esp_log_level_t)level==ESP_LOG_VERBOSE ) { \
+ LOG_TAG(level, V, tag, format, ##__VA_ARGS__); \
+ } \
+ } while(0)
+
+#define ESP_LOG_LEVEL_LOCAL(level, tag, format, ...) \
+ do { \
+ if ( LOG_LOCAL_LEVEL >= level ) { \
+ ESP_LOG_LEVEL(level, tag, format, ##__VA_ARGS__); \
+ } \
+ } while(0)
+
#endif /* RIOT_VERSION */
#ifdef __cplusplus