#ifndef _LOG_H
#define _LOG_H
#if defined __cplusplus
extern “C” {
#endif
#include “stm32l0xx_hal.h”
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include “stdio.h”
//#include “calendar.h”
#if 0
#define BSP_XC100
#if (defined(BSP_XC100))
#define DBG_vInit(uart)
{
uart.Instance = USART1;
uart.Init.BaudRate = 115200;
uart.Init.WordLength = UART_WORDLENGTH_8B;
uart.Init.StopBits = UART_STOPBITS_1;
uart.Init.Parity = UART_PARITY_NONE;
uart.Init.Mode = UART_MODE_TX_RX;
uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
uart.Init.OverSampling = UART_OVERSAMPLING_16;
uart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
uart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&uart) != HAL_OK)
{
Error_Handler();
}
}
#define DBG_Disable(uart)
{ HAL_UART_DeInit(uart); }
#else
#define DBG_vInit(…)
#define DBG_Disable(…)
#endif
#endif
#ifndef RELEASE_VERSION_ENABLE
#define DEBUG_LOG (1)
#else
#define DEBUG_LOG (0)
#endif
//日志线程安全使能位
#ifndef USE_BOOTLOADER
#define LOG_THREAD_SAFE (1)
#else
#define LOG_THREAD_SAFE (0)
#endif
//日志时间打印使能位
#ifndef USE_BOOTLOADER
#define LOG_TIME_PRINT (1)
#else
#define LOG_TIME_PRINT (0)
#endif
// level
#define LEVEL_CLOSE (1)
#define LEVEL_SIMPLE_FORCE (4)
#define LEVEL_FORCE (5)
#define LEVEL_CLI (9)
#define LEVEL_RELEASE (10)
#define LEVEL_SIMPLE (11)
#define LEVEL_DEBUG (12)
#define LEVEL_INFO (13)
#define LEVEL_WARNING (14)
#define LEVEL_ERROR (15)
#define LEVEL (LEVEL_ERROR)
//日志颜色配置
#define LOG_COLOR_CONFIG_EN (1 == DEBUG_LOG)
// BUTTON_ACTION日志是否强制输出使能位
#define BUTTON_ACTION_LOG_EN (0)
//低功耗管理日志是否强制输出使能位
#define MANAGER_SLEEP_LOG_LOG_EN (0)
// BLE日志是否强制输出使能位
#define BLE_ORIGIN_DATA_LOG_LOG_EN (0)
#define BLE_CMD_DATA_LOG_LOG_EN (0)
// ZIGBEE日志是否强制输出使能位
#define ZB_ORIGIN_DATA_LOG_LOG_EN (0)
// DD-LIBS日志是否强制输出使能位
#ifndef RELEASE_VERSION_ENABLE
#define DD_LOG_EN (1)
#else
#define DD_LOG_EN (0)
#endif
#define DD_DATA_LOG_LOG_EN (0)
#define DD_DATA_UART_LOG_LOG_EN (0)
#define AUDIO_MESSAGE_OUTPUT_LOG_EN (0)
#define BLE_PROTOCOL (0)
//日志颜色
#if (1 == LOG_COLOR_CONFIG_EN)
#define LOG_COLOR_BLACK “30”
#define LOG_COLOR_RED “31”
#define LOG_COLOR_GREEN “32”
#define LOG_COLOR_BROWN “33”
#define LOG_COLOR_BLUE “34”
#define LOG_COLOR_PURPLE “35”
#define LOG_COLOR_CYAN “36”
#define LOG_COLOR_WHITE “37”
#define LOG_BACKGROUND_BLACK “40”
#define LOG_BACKGROUND_RED “41”
#define LOG_BACKGROUND_GREEN “42”
#define LOG_BACKGROUND_BROWN “43”
#define LOG_BACKGROUND_BLUE “44”
#define LOG_BACKGROUND_PURPLE “45”
#define LOG_BACKGROUND_CYAN “46”
#define LOG_BACKGROUND_WHITE “47”
#define LOG_COLOR(COLOR) “\033[0;” COLOR “m”
#define LOG_BOLD(COLOR) “\033[1;” COLOR “m”
#define LOG_RESET_COLOR “\033[0m”
#define LOG_COLOR_E LOG_COLOR(LOG_COLOR_RED)
#define LOG_COLOR_W LOG_COLOR(LOG_COLOR_BROWN)
#define LOG_COLOR_I LOG_COLOR(LOG_COLOR_GREEN)
#define LOG_COLOR_D
#define LOG_COLOR_V
#define LOG_BOLD_E LOG_BOLD(LOG_BACKGROUND_RED)
#define LOG_BOLD_W LOG_BOLD(LOG_BACKGROUND_BROWN)
#define LOG_BOLD_I LOG_BOLD(LOG_BACKGROUND_GREEN)
#define LOG_BOLD_D
#define LOG_BOLD_V
#define LOG_DISPLAY(COLOR, BACKGROUND) “\033[1;” COLOR “;” BACKGROUND “m”
#define LOG_PROMPT_DISPLAY LOG_DISPLAY(LOG_COLOR_BROWN, LOG_BACKGROUND_BLACK)
#else
#define LOG_COLOR_E
#define LOG_COLOR_W
#define LOG_COLOR_I
#define LOG_COLOR_D
#define LOG_COLOR_V
#define LOG_RESET_COLOR
#define LOG_BOLD_E
#define LOG_BOLD_W
#define LOG_BOLD_I
#define LOG_BOLD_D
#define LOG_BOLD_V
#define LOG_PROMPT_DISPLAY
#endif
#define DBG_vPrintf printf
#define LOG_PRINT(level, format, ARGS…)
do {
if ((LEVEL_SIMPLE_FORCE <= level) && (level <= LEVEL)) {
DBG_vPrintf(format, ##ARGS);
}
if (level != LEVEL_SIMPLE) {
DBG_vPrintf(LOG_STRING_NEW_LINE);
}
} while (0)
#if (DEBUG_LOG == 1)
#define LOG(format, …) LOG_PRINT(LEVEL_DEBUG, format, ##VA_ARGS)
#define LOG_SIMPLE(format, …) LOG_PRINT(LEVEL_SIMPLE, format, ##VA_ARGS)
#define LOG_ERROR(format, …)
LOG_PRINT(LEVEL_ERROR, LOG_COLOR_E format LOG_RESET_COLOR, ##VA_ARGS)
#define LOG_FORCE(format, …)
LOG_PRINT(LEVEL_FORCE, LOG_COLOR_E format LOG_RESET_COLOR, ##VA_ARGS)
#define LOG_HIGHLIGHT(format, …)
LOG_PRINT(LEVEL_DEBUG, LOG_PROMPT_DISPLAY format LOG_RESET_COLOR, ##VA_ARGS)
#define LOG_OTA(format, …) LOG_PRINT(LEVEL_SIMPLE, format, ##VA_ARGS)
#define LOG_RELEASE(format, …) LOG_PRINT(LEVEL_DEBUG, format, ##VA_ARGS)
#else
#define LOG(format, …)
#define LOG_SIMPLE(format, …)
#define LOG_ERROR(format, …)
#define LOG_FORCE(format, …)
#define LOG_HIGHLIGHT(format, …)
#define LOG_OTA(format, …) LOG_PRINT(LEVEL_SIMPLE, format, ##VA_ARGS)
#define LOG_RELEASE(format, …) LOG_PRINT(LEVEL_RELEASE, format, ##VA_ARGS)
#endif
#define LOG_STRING_NEW_LINE “\r\n”
#if defined __cplusplus
}
#endif
#endif