/**
******************************************************************************
* @file tae32f53xx_dbg.h
* @author MCD Application Team
* @brief The macro definitions for dbg
*
==============================================================================
##### How to use #####
==============================================================================
*
* If you want to use debug macro, you can use as following steps:
*
* Step 1: Macros in "tae32f53xx_dbg_conf.h"
* a. Define the TAE_USING_DBG to enable the feature
* #define TAE_USING_DBG
*
* b. Define the print interface for dbg
* #define TAE_DBG_PRINT(...) printf(__VA_ARGS__)
*
* c. Other optional macros define, such as TAE_USING_DBG_COLOR
*
* Step 2: Macros in your C/C++ file
* a. Define the debug tag and level for dbg. If you did not define this,
default definition will be used.
* #define DBG_TAG "TAG" // must be string
* #define DBG_LVL DBG_INFO // others DBG_ERROR, DBG_WARNING, DBG_LOG.
* DBG_LOG > DBG_INFO > DBG_WARNING > DBG_ERROR
*
* b. Include this header file
* #include "tae32f53xx_dbg.h" // this must after of DBG_LVL, DBG_TAG or other options
*
* Step 3: LOG_X macro to print out logs in your C/C++ file
* PLEASE NOTE: LOG_X is related to the DBG_LVL that defined in Step 2. Using LOG_X
* witch higher then DBG_LVL will be ignored.
* LOG_D("this is a debug log!");
* LOG_I("this is a info log!")
* LOG_W("this is a warning log!")
* LOG_E("this is a error log!");
*
******************************************************************************
* @attention
*
*
© Copyright (c) 2020 Tai-Action.
* All rights reserved.
*
* This software is licensed by Tai-Action under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _TAE32F53XX_DBG_H_
#define _TAE32F53XX_DBG_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Includes ------------------------------------------------------------------*/
#include "tae32f53xx_dbg_conf.h"
/** @addtogroup TAE_Utilities
* @{
*/
/** @defgroup TAE_Debug TAE Debug
* @brief TAE Debug
* @{
*/
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup TAE_Debug_Exported_Constants TAE Debug Exported Constants
* @brief TAE Debug Exported Constants
* @{
*/
#ifdef TAE_USING_DBG
/* DEBUG level */
#define DBG_NONE 0
#define DBG_ERROR 1
#define DBG_WARNING 2
#define DBG_INFO 3
#define DBG_LOG 4
/* The color for terminal (foreground) */
#define BLACK 30
#define RED 31
#define GREEN 32
#define YELLOW 33
#define BLUE 34
#define PURPLE 35
#define CYAN 36
#define WHITE 37
#define CLEAR_ALL 0
#ifndef DBG_TAG
#define DBG_TAG "DBG"
#endif
#ifndef DBG_LVL
#define DBG_LVL DBG_WARNING
#endif
#ifndef TAE_DBG_PRINT
#define TAE_DBG_PRINT(fmt, ...)
#endif
#endif /* TAE_USING_DBG */
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/** @defgroup TAE_Debug_Exported_Macros TAE Debug Exported Macros
* @brief TAE Debug Exported Macros
* @{
*/
#ifdef TAE_USING_DBG
#ifdef TAE_USING_DBG_COLOR
#define _DBG_COLOR(color) TAE_DBG_PRINT("\033["#color"m")
#define _DBG_LOG_HEAD(lvl_name, color) TAE_DBG_PRINT("\033["#color"m[" lvl_name "@" DBG_TAG "] ")
#define _DBG_LOG_END() TAE_DBG_PRINT("\033[0m")
#else
#define _DBG_COLOR(color)
#define _DBG_LOG_HEAD(lvl_name, color) TAE_DBG_PRINT("[" lvl_name "@" DBG_TAG "] ")
#define _DBG_LOG_END() TAE_DBG_PRINT("")
#endif /* TAE_USING_DBG_COLOR */
#define DBG_LogRaw(...) TAE_DBG_PRINT(__VA_ARGS__)
#define DBG_Log(lvl_name, color, fmt, ...) \
do { \
_DBG_LOG_HEAD(lvl_name, color); \
TAE_DBG_PRINT(fmt, ##__VA_ARGS__); \
_DBG_COLOR(0); \
} while (0)
#define DBG_LogLine(lvl_name, color, fmt, ...) \
do { \
_DBG_LOG_HEAD(lvl_name, color); \
TAE_DBG_PRINT(fmt, ##__VA_ARGS__); \
_DBG_COLOR(0); \
_DBG_LOG_END(); \
} while (0)
#define DBG_Here() \
if ((DBG_LVL) >= DBG_INFO) { \
_DBG_LOG_HEAD("I", 32); \
TAE_DBG_PRINT("Here is %s:%d", __FUNCTION__, \
__LINE__); \
_DBG_COLOR(0); \
_DBG_LOG_END(); \
}
#define DBG_Enter() \
if ((DBG_LVL) >= DBG_INFO) { \
_DBG_LOG_HEAD("I", 32); \
TAE_DBG_PRINT("Enter function %s", __FUNCTION__); \
_DBG_COLOR(0); \
_DBG_LOG_END(); \
}
#define DBG_Exit() \
if ((DBG_LVL) >= DBG_INFO) { \
_DBG_LOG_HEAD("I", 32); \
TAE_DBG_PRINT("Exit function %s", __FUNCTION__); \
_DBG_COLOR(0); \
_DBG_LOG_END(); \
}
#else
#define DBG_Log(level, fmt, ...)
#define DBG_LogLine(lvl_name, color, fmt, ...)
#define DBG_LogRaw(...)
#define DBG_Here()
#define DBG_Enter()
#define DBG_Exit()
#endif /* TAE_USING_DBG */
#if (DBG_LVL >= DBG_LOG)
#define LOG_D(fmt, ...) DBG_LogLine("D", CLEAR_ALL, fmt, ##__VA_ARGS__)
#else
#define LOG_D(fmt, ...)
#endif
#if (DBG_LVL >= DBG_INFO)
#define LOG_I(fmt, ...) DBG_LogLine("I", GREEN, fmt, ##__VA_ARGS__)
#else
#define LOG_I(fmt, ...)
#endif
#if (DBG_LVL >= DBG_WARNING)
#define LOG_W(fmt, ...) DBG_LogLine("W", YELLOW, fmt, ##__VA_ARGS__)
#else
#define LOG_W(fmt, ...)
#endif
#if (DBG_LVL >= DBG_ERROR)
#define LOG_E(fmt, ...) DBG_LogLine("E", RED, fmt, ##__VA_ARGS__)
#else
#define LOG_E(fmt, ...)
#endif
#define LOG_R(...) DBG_LogRaw(__VA_ARGS__)
#define LOG_Enter() DBG_Enter()
#define LOG_Exit() DBG_Exit()
#define LOG_Here() DBG_Here()
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
/* Private macros ------------------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _TAE32F53XX_DBG_H_ */
/************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/