#ifndef USER_DRIVERS_INC_DEBUG_H_
#define USER_DRIVERS_INC_DEBUG_H_

#include <stdio.h>
#include "CH57x_common.h"


#ifdef __cplusplus
extern "C" {
#endif


/* DEBUG log function. DEBUG printf() 相关定义*/
#ifndef DBG_LOG_EN
#define DBG_LOG_EN                  1       //DEBUG LOG 输出总开关
#endif

#ifndef DBG_Particular_EN
#define DBG_Particular_EN           0       //详细信息输出 -- 具体到文件名，调用函数，行号
#endif

/*调试信息初始状态*/
#define DBG_OPT_RDR_STATUS          0       //给蓝牙发送状态使用
#define DBG_OPT_Debug_STATUS        0       //临时调试信息打印开关
#define DBG_OPT_PC_COMM             0       //PC通讯打印开关
#define DBG_OPT_BLE_STATUS          0       //蓝牙信息打印开关
#define DBG_OPT_DEVICE_STATUS       0       //设备驱动层打印调试信息打印开关
#define DBG_OPT_SYS_STATUS          0       //系统调试信息打印开关

/*调试信息输出控制位*/
#define DBG_BIT_RDR_STATUS          5
#define DBG_BIT_Debug_STATUS        4
#define DBG_BIT_PC_COMM             3
#define DBG_BIT_BLE_STATUS          2
#define DBG_BIT_DEVICE_STATUS       1
#define DBG_BIT_SYS_STATUS          0


#define WDT_NUM         150         //看门狗时间

extern uint32_t Dbg_Switch;

void WDT_Init(void);
void WDT_Feed(void);



void Systick_Init(void);
void Dbg_NoTick_Println(int DbgOptBit, const char *cmd, ...);
void Dbg_Println(int DbgOptBit, const char *cmd, ...);
void Dbg_Print_Buff(int DbgOptBit, const char *cmd, uint8_t *buff, uint32_t len);


#if DBG_LOG_EN

#if DBG_Particular_EN
#define DBG_Printf(...)     {printf("%s %s-%d :",__FILE__,__func__,__LINE__);printf(__VA_ARGS__);}
#else
#define DBG_Printf(...)     printf(__VA_ARGS__)
#endif

#else
#define DBG_Printf(...)
#endif

#define DBG_INFO(msg)       DBG_Printf("%s %s-%d :%s",__FILE__,__func__,__LINE__,msg)

#ifdef __cplusplus
}
#endif

#endif /* USER_DRIVEN_INC_DEBUG_H_ */
