You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 lines
5.5 KiB

//*********************************************/
//
// File: debug.h
//
// Author: Domenico La Fauci
//
//********************************************/
#ifndef Debug_H
#define Debug_H
#include <stdio.h>
#include <string.h>
#define INFO_INIT_FLAG 1
#define INFO_TCP_FLAG 2
#define INFO_SPI_FLAG 4
#define INFO_CM_FLAG 8
#define INFO_UTIL_FLAG 16
#define INFO_D (1<<0xD) // Debug
#define INFO_E (1<<0xE) // Error
#define INFO_WARN_FLAG (1<<0xF) // Warning
#define DEFAULT_INFO_FLAG 0 //INFO_WARN_FLAG
#ifdef _DEBUG_
#define DEFINE_DEBUG_VARIABLES() \
uint16_t enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \
uint16_t verboseDebug = 0; \
uint16_t dumpDebug = 0; \
uint16_t pollDebug = 0;
#else
#define DEFINE_DEBUG_VARIABLES() \
uint16_t enableDebug = DEFAULT_INFO_FLAG; \
uint16_t verboseDebug = 0; \
uint16_t dumpDebug = 0; \
uint16_t pollDebug = 0;
#endif
#define INIT_DEBUG_VARIABLES() \
enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \
verboseDebug = 0; \
dumpDebug = 0; pollDebug = 0;
#define PRINT_DEBUG_VARIABLES() \
printk("Debug enabled: 0x%x\n", enableDebug); \
printk("Verbose enabled: 0x%x\n", verboseDebug); \
printk("Dump enabled: 0x%x\n", dumpDebug); \
printk("POoll enabled: 0x%x\n", pollDebug);
#define TURNON_DEBUG_VARIABLES() \
enableDebug = 0xff;
extern uint16_t enableDebug;
extern uint16_t verboseDebug;
extern uint16_t dumpDebug;
extern uint16_t pollDebug;
#define ENABLE_DEBUG_LEVEL 1
#define VERBOSE_DEBUG_LEVEL 2
#define DUMP_DEBUG_LEVEL 3
#define POLL_DEBUG_LEVEL 4
#define CHECK_DEBUG(VAR, LEVEL, LEVEL_LIMIT, FLAG) \
do{ \
if (LEVEL >= LEVEL_LIMIT) VAR |= FLAG; \
else VAR &= ~FLAG; \
}while(0);
#define CHECK_ENA_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(enableDebug, LEVEL, ENABLE_DEBUG_LEVEL, FLAG)
#define CHECK_VERB_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(verboseDebug, LEVEL, VERBOSE_DEBUG_LEVEL, FLAG)
#define CHECK_DUMP_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(dumpDebug, LEVEL, DUMP_DEBUG_LEVEL, FLAG)
#define CHECK_POLL_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(pollDebug, LEVEL, POLL_DEBUG_LEVEL, FLAG)
#define CHECK_DEBUG_LEVEL(LEVEL, INFO_FLAG) \
CHECK_ENA_DEBUG(LEVEL, INFO_FLAG) \
CHECK_VERB_DEBUG(LEVEL, INFO_FLAG) \
CHECK_DUMP_DEBUG(LEVEL, INFO_FLAG) \
CHECK_POLL_DEBUG(LEVEL, INFO_FLAG)
#ifdef _INFO_DEBUG_
#define PRINT_DEBUG(msg, args...) do { \
printk("[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_DEBUG(msg, args...) do { \
printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#define WARN_DEBUG(msg, args...) do { \
printk("W-[%s] " msg , __func__ , ##args ); \
} while (0)
#else
do { }while(0);
#endif
#define IF_DEBUG(X,Y) do { \
if (enableDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#define IF_DEBUG_VER(X,Y) do { \
if (verboseDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#define IF_DEBUG_DUMP(X,Y) do { \
if (dumpDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#define IF_DEBUG_POLL(X,Y) do { \
if (pollDebug & INFO_##X##_FLAG) {\
Y; \
}} while (0)
#define IF_WARN(Y) IF_DEBUG(WARN,Y)
#define IF_WARN_VER(Y) IF_DEBUG_VER(WARN,Y)
#define IF_TCP(Y) IF_DEBUG(TCP,Y)
#define IF_TCP_VER(Y) IF_DEBUG_VER(TCP,Y)
#define IF_TCP_POLL(Y) IF_DEBUG_POLL(TCP,Y)
#define IF_TCP_DUMP(Y) IF_DEBUG_DUMP(TCP,Y)
#define IF_SPI(Y) IF_DEBUG(SPI,Y)
#define IF_SPI_VER(Y) IF_DEBUG_VER(SPI,Y)
#define IF_SPI_DUMP(Y) IF_DEBUG_DUMP(SPI,Y)
#define IF_SPI_POLL(Y) IF_DEBUG_POLL(SPI,Y)
#define IF_UTIL(Y) IF_DEBUG(UTIL,Y)
#define IF_UTIL_VER(Y) IF_DEBUG_VER(UTIL,Y)
#define WARN(msg, args...) IF_DEBUG(WARN,WARN_DEBUG(msg, ##args))
#define WARN_VER(msg, args...) IF_DEBUG_VER(WARN,WARN_DEBUG(msg, ##args))
#define WARN_POLL(msg, args...) IF_DEBUG_POLL(WARN,WARN_DEBUG(msg, ##args))
#if 0 // disable to reduce the size of binary
#define INFO_INIT(msg, args...) IF_DEBUG(INIT,PRINT_DEBUG(msg, ##args))
#define INFO_INIT_VER(msg, args...) IF_DEBUG_VER(INIT,PRINT_DEBUG(msg, ##args))
#else
#define INFO_INIT(msg, args...)
#define INFO_INIT_VER(msg, args...)
#endif
#define INFO_TCP(msg, args...) IF_DEBUG(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_VER(msg, args...) IF_DEBUG_VER(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_DUMP(msg, args...) IF_DEBUG_DUMP(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_POLL(msg, args...) IF_DEBUG_POLL(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_SPI(msg, args...) IF_DEBUG(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_VER(msg, args...) IF_DEBUG_VER(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_DUMP(msg, args...) IF_DEBUG_DUMP(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_POLL(msg, args...) IF_DEBUG_POLL(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_UTIL(msg, args...) IF_DEBUG(UTIL,PRINT_DEBUG(msg, ##args))
#define INFO_UTIL_VER(msg, args...) IF_DEBUG_VER(UTIL,PRINT_DEBUG(msg, ##args))
#define CM_DPRINTF(msg, args...) IF_DEBUG(CM,PRINT_DEBUG(msg, ##args))
extern void dump(char* _buf, uint16_t _count);
#define _DUMP(BUF, COUNT) do { \
printk("[%s]: ", __func__); \
dump((char*)BUF, COUNT); \
} while (0)
#ifdef _APP_DEBUG_
#define DUMP(BUF, COUNT) _DUMP(BUF, COUNT)
#else
#define DUMP(BUF, COUNT) do {} while (0)
#endif
#endif
#define DUMP_TCP(BUF, COUNT) IF_TCP_DUMP(_DUMP(BUF, COUNT))
#define DUMP_SPI(BUF, COUNT) IF_SPI_DUMP(_DUMP(BUF, COUNT))
#define DUMP_SPI_CMD(BUF) do { \
if (dumpDebug & INFO_SPI_FLAG) { \
int i = 0; \
for (; i < CMD_MAX_LEN; ++i) \
{ \
printk("0x%x ", BUF[i]); \
if (BUF[i] == END_CMD) \
break; \
} \
printk("\n"); \
} \
}while(0);