2024-05-17 22:43:41 +03:00
/*
2025-03-12 14:59:04 +02:00
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
2024-05-17 22:43:41 +03:00
*
* SPDX-License-Identifier: Apache-2.0
*/
# pragma once
# include <stdint.h>
# include <stdbool.h>
# include <stddef.h>
# include <inttypes.h>
# include "esp_log_level.h"
# include "esp_assert.h"
# include "sdkconfig.h"
# ifdef __cplusplus
extern " C " {
# endif
/** @cond */
/// Log version macros.
# define ESP_LOG_V2 (1)
# if BOOTLOADER_BUILD
# define ESP_LOG_VERSION (CONFIG_BOOTLOADER_LOG_VERSION)
# else
# define ESP_LOG_VERSION (CONFIG_LOG_VERSION)
# endif
/**
* This define controls the log configuration options, particularly when the built project operates in constrained environments.
*
* For the bootloader build:
* It is always set to "1" because certain log features are unnecessary, reducing the binary size.
*
* For the application build:
* If this define is set in the user namespace, all logs in the specific file will use a simplified path for logging.
*
* This define determines whether the "constrained_env" flag will be enabled in ESP_LOG_CONFIGS_DEFAULT, indicating that logging is capable of functioning
* in constrained environments such as the bootloader, ISR, startup code, early log, or when the cache is disabled. In these cases,
* `esp_log()` utilizes a simplified implementation to output logs.
*/
# if BOOTLOADER_BUILD
# define ESP_LOG_CONSTRAINED_ENV (1)
# else // !BOOTLOADER_BUILD
# ifndef ESP_LOG_CONSTRAINED_ENV
# define ESP_LOG_CONSTRAINED_ENV (0)
# endif
# endif // !BOOTLOADER_BUILD
/**
* This define helps control log configuration options, specifically whether color output will be appended to log messages.
* If this define is not set in the user namespace, its value will be determined by Kconfig options.
* If the define is set in the user namespace, it will override the default configurations (ESP_LOG_CONFIGS_DEFAULT) for the user's specific file.
* This define controls the "dis_color" flag, which is included in ESP_LOG_CONFIGS_DEFAULT
*/
# ifndef ESP_LOG_COLOR_DISABLED
# if (!BOOTLOADER_BUILD && CONFIG_LOG_COLORS) || (BOOTLOADER_BUILD && CONFIG_BOOTLOADER_LOG_COLORS)
# define ESP_LOG_COLOR_DISABLED (0)
# else
# define ESP_LOG_COLOR_DISABLED (1)
# endif
# endif
/**
* This define helps control log configuration options, specifically whether timestamp will be appended to log message.
* If this define is not set in the user namespace, its value will be determined by Kconfig options.
* If the define is set in the user namespace, it will override the default configurations (ESP_LOG_CONFIGS_DEFAULT) for the user's specific file.
* This define controls the "dis_timestamp" flag, which is included in ESP_LOG_CONFIGS_DEFAULT
*/
# ifndef ESP_LOG_TIMESTAMP_DISABLED
# if (!BOOTLOADER_BUILD && CONFIG_LOG_TIMESTAMP_SOURCE_NONE) || (BOOTLOADER_BUILD && CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_NONE)
# define ESP_LOG_TIMESTAMP_DISABLED (1)
# else
# define ESP_LOG_TIMESTAMP_DISABLED (0)
# endif
# endif
2025-03-12 14:59:04 +02:00
/** @cond */
# if (!BOOTLOADER_BUILD && CONFIG_LOG_MODE_TEXT_EN) || (BOOTLOADER_BUILD && CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN)
# define ESP_LOG_MODE_TEXT_EN (1)
# else
# define ESP_LOG_MODE_TEXT_EN (0)
# endif
/** @endcond */
/**
* This define helps control log configuration options, specifically whether binary mode will be enabled.
* If this define is not set in the user namespace, its value will be determined by Kconfig options.
* If the define is set in the user namespace, it will override the default configurations (ESP_LOG_CONFIGS_DEFAULT) for the user's specific file.
* This define controls the "binary_mode" flag, which is included in ESP_LOG_CONFIGS_DEFAULT
*/
# ifndef ESP_LOG_MODE_BINARY_EN
# if (!BOOTLOADER_BUILD && CONFIG_LOG_MODE_BINARY_EN) || (BOOTLOADER_BUILD && CONFIG_BOOTLOADER_LOG_MODE_BINARY_EN)
# define ESP_LOG_MODE_BINARY_EN (1)
# else
# define ESP_LOG_MODE_BINARY_EN (0)
# endif
# elif ESP_LOG_MODE_TEXT_EN == 1 && ESP_LOG_MODE_BINARY_EN == 1
// Text logging mode is enabled via CONFIG option, but binary mode is enabled via ESP_LOG_MODE_BINARY_EN define in the user namespace.
// Suppressing binary logging mode.
# undef ESP_LOG_MODE_BINARY_EN
# define ESP_LOG_MODE_BINARY_EN (0)
# endif
2024-05-17 22:43:41 +03:00
/**
* This define helps control log configuration options, specifically whether formatting (ex.: color, timestamp) will be appended to log message.
* If the define is set in the user namespace, it will override the default configurations (ESP_LOG_CONFIGS_DEFAULT) for the user's specific file.
* This define controls the "require_formatting" flag, which is included in ESP_LOG_CONFIGS_DEFAULT
*/
# ifndef ESP_LOG_FORMATTING_DISABLED
# define ESP_LOG_FORMATTING_DISABLED (0)
# endif
/** @endcond */
/**
* @brief Logging configuration structure for ESP log.
*/
typedef struct {
union {
struct {
esp_log_level_t log_level : ESP_LOG_LEVEL_LEN ; /*!< Log level */
uint32_t constrained_env : 1 ; /*!< Flag indicating if logging is from a constrained environment (e.g., bootloader, ISR, startup code, early log, or when the cache is disabled). In such cases, esp_rom_vprintf is used instead of the vprintf. */
uint32_t require_formatting : 1 ; /*!< Flag specifying whether the log message needs additional formatting. If set, esp_log() will add formatting elements like color, timestamp, and tag to the log message. */
uint32_t dis_color : 1 ; /*!< Flag to disable color in log output. If set, log messages will not include color codes. */
uint32_t dis_timestamp : 1 ; /*!< Flag to disable timestamps in log output. If set, log messages will not include timestamps. */
2025-03-12 14:59:04 +02:00
uint32_t binary_mode : 1 ; /*!< Flag to indicate binary mode. */
uint32_t reserved : 24 ; /*!< Reserved for future use. Should be initialized to 0. */
2024-05-17 22:43:41 +03:00
} opts ;
uint32_t data ; /*!< Raw data representing all options in a 32-bit word. */
} ;
} esp_log_config_t ;
/** @cond */
# define ESP_LOG_OFFSET_CONSTRAINED_ENV (ESP_LOG_LEVEL_LEN) /*!< Offset for constrained_env field from esp_log_config_t */
# define ESP_LOG_OFFSET_REQUIRE_FORMATTING (4) /*!< Offset for require_formatting field from esp_log_config_t */
# define ESP_LOG_OFFSET_DIS_COLOR_OFFSET (5) /*!< Offset for dis_color field from esp_log_config_t */
# define ESP_LOG_OFFSET_DIS_TIMESTAMP (6) /*!< Offset for dis_timestamp field from esp_log_config_t */
2025-03-12 14:59:04 +02:00
# define ESP_LOG_OFFSET_BINARY_MODE (7) /*!< Offset for binary_mode field from esp_log_config_t */
2024-05-17 22:43:41 +03:00
ESP_STATIC_ASSERT ( ESP_LOG_OFFSET_CONSTRAINED_ENV = = ESP_LOG_LEVEL_LEN , " The log level should not overlap the following fields in esp_log_config_t " ) ;
/** @endcond */
# define ESP_LOG_CONFIG_LEVEL_MASK ((1 << ESP_LOG_LEVEL_LEN) - 1) /*!< Mask for level field in esp_log_config_t */
# define ESP_LOG_CONFIG_CONSTRAINED_ENV (1 << ESP_LOG_OFFSET_CONSTRAINED_ENV) /*!< Value for constrained_env field in esp_log_config_t */
# define ESP_LOG_CONFIG_REQUIRE_FORMATTING (1 << ESP_LOG_OFFSET_REQUIRE_FORMATTING) /*!< Value for require_formatting field in esp_log_config_t */
# define ESP_LOG_CONFIG_DIS_COLOR (1 << ESP_LOG_OFFSET_DIS_COLOR_OFFSET) /*!< Value for dis_color field in esp_log_config_t */
# define ESP_LOG_CONFIG_DIS_TIMESTAMP (1 << ESP_LOG_OFFSET_DIS_TIMESTAMP) /*!< Value for dis_timestamp field in esp_log_config_t */
2025-03-12 14:59:04 +02:00
# define ESP_LOG_CONFIG_BINARY_MODE (1 << ESP_LOG_OFFSET_BINARY_MODE) /*!< Value for binary_mode field in esp_log_config_t */
2024-05-17 22:43:41 +03:00
/**
* @brief Macro for setting log configurations according to selected Kconfig options.
*
* @note The `require_formatting` flag is always set for logv2.
*/
# ifndef ESP_LOG_CONFIGS_DEFAULT
# define ESP_LOG_CONFIGS_DEFAULT ( \
((ESP_LOG_CONSTRAINED_ENV) ? (ESP_LOG_CONFIG_CONSTRAINED_ENV) : 0) \
| ((ESP_LOG_FORMATTING_DISABLED) ? (0) : (ESP_LOG_CONFIG_REQUIRE_FORMATTING)) \
| ((ESP_LOG_COLOR_DISABLED) ? (ESP_LOG_CONFIG_DIS_COLOR) : 0) \
2025-03-12 14:59:04 +02:00
| ((ESP_LOG_TIMESTAMP_DISABLED) ? (ESP_LOG_CONFIG_DIS_TIMESTAMP) : 0) \
| ((ESP_LOG_MODE_BINARY_EN) ? (ESP_LOG_CONFIG_BINARY_MODE) : 0))
2024-05-17 22:43:41 +03:00
# endif
/**
* @brief Macro to initialize an `esp_log_config_t` structure.
*
* This macro directly initializes an `esp_log_config_t` structure by setting the raw `data` field
* with the provided `configs` parameter. It is useful when you have already defined the configuration
* settings and wish to apply them directly.
*
* @param configs The raw configuration data to initialize the `esp_log_config_t` structure.
*
* @return An initialized `esp_log_config_t` structure containing the specified configuration data.
*/
# if defined(__cplusplus)
# define ESP_LOG_CONFIG_INIT(configs) (__extension__({ \
esp_log_config_t __esp_log_config; \
__esp_log_config.data = (configs); \
__esp_log_config;}))
# else
# define ESP_LOG_CONFIG_INIT(configs) ((esp_log_config_t){.data = (configs)})
# endif
# ifdef __cplusplus
}
# endif