#ifndef _LOG_H
#define _LOG_H

#include <stdio.h>



/*
ANSI C标准中有几个标准预定义宏（也是常用的）：
__LINE__：在源代码中插入当前源代码行号；
__FILE__：在源文件中插入当前源文件名； 
__DATE__：在源文件中插入当前的编译日期
__TIME__：在源文件中插入当前编译时间；
__STDC__：当要求程序严格遵循ANSI C标准时该标识被赋值为1；
__cplusplus：当编写C++程序时该标识符被定义。
*/


#define YSP_DEBUG 0   //总调试输出,非零用printf打印,0则记录到日志文件 

#define TRACE_DEBUG        			1
#define ERROR_DEBUG        			2  //要关闭则设置为0 
#define ACTION_DEBUG       			4  
#define COMUNICATION_TRACE_DEBUG 	8
#define COMUNICATION_EEROR_DEBUG 	16
#define PARA_TRACE_DEBUG   			32 
#define PARA_ERROR_DEBUG   			64
#define ANALYSIS_TRACE_DEBUG 		128
#define ANALYSIS_EEROR_DEBUG 		256
#define IEC61850_TRACE_DEBUG 		512
#define IEC61850_ERROR_DEBUG 		1024
#define DEBUG_ALL          0xFFFFFFFF

extern unsigned int debug_flags;
extern void my_log_init(void);
extern void do_my_log(const char *fmt,...);
extern void remove_old_log(unsigned int rsv_time);

#if YSP_DEBUG
#define LOG_DEBUG(flag,fmt,...)\
	do{\
		if(debug_flags&flag){\
			printf(fmt,##__VA_ARGS__);}\
		}while(0)
#else
#define LOG_DEBUG(flag,fmt,...)\
	do{\
		if(debug_flags&flag){\
			do_my_log(fmt,##__VA_ARGS__);}\
		}while(0)
#endif

/** lower two bits indicate debug level
 * - 0 all
 * - 1 warning
 * - 2 serious
 * - 3 severe
 */
#define LWIP_DBG_LEVEL_ALL     0x00
#define LWIP_DBG_LEVEL_OFF     LWIP_DBG_LEVEL_ALL /* compatibility define only */
#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */
#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */
#define LWIP_DBG_LEVEL_SEVERE  0x03
#define LWIP_DBG_MASK_LEVEL    0x03

/** flag for LWIP_DEBUGF to enable that debug message */
#define LWIP_DBG_ON            0x80U
/** flag for LWIP_DEBUGF to disable that debug message */
#define LWIP_DBG_OFF           0x00U

/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */
#define LWIP_DBG_TRACE         0x40U
/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */
#define LWIP_DBG_STATE         0x20U
/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */
#define LWIP_DBG_FRESH         0x10U
/** flag for LWIP_DEBUGF to halt after printing this debug message */
#define LWIP_DBG_HALT          0x08U



#endif

