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