00001
00042 #ifndef DEBUG_H_INCLUDED
00043 #define DEBUG_H_INCLUDED
00044
00045 #include <compiler.h>
00046 #include <stdarg.h>
00047
00088 enum debug_level {
00089 DEBUG_NONE = 0,
00090 DEBUG_PANIC,
00091 DEBUG_ASSERT,
00092 DEBUG_ERROR,
00093 DEBUG_WARNING,
00094 DEBUG_INFO,
00095 DEBUG_VERBOSE,
00096 };
00097
00098 #ifndef CONFIG_DEBUG_CONSOLE
00099 # define dbg_init() do { } while (0)
00100 # undef DEBUG_LEVEL
00101 # define DEBUG_LEVEL DEBUG_NONE
00102 #else
00103 extern const struct stream_ops *dbg_backend_init(void);
00104 extern void dbg_init(void);
00105 # ifndef DEBUG_LEVEL
00106 # ifdef CONFIG_DEBUG_LEVEL
00107 # define DEBUG_LEVEL CONFIG_DEBUG_LEVEL
00108 # else
00109 # define DEBUG_LEVEL DEBUG_INFO
00110 # endif
00111 # endif
00112 #endif
00113
00114 extern int dbg_priv_vprintf(const char *format, va_list ap);
00115 extern int dbg_priv_printf(const char *format, ...) __printf_format(1, 2);
00116 extern int dbg_priv_putstr(const char *str);
00117 extern int dbg_priv_putchar(int c);
00118
00125 static inline int dbg_priv_retzero(void)
00126 {
00127 return 0;
00128 }
00129
00135 #define dbg_priv_check_level(level) \
00136 (DEBUG_LEVEL != DEBUG_NONE && (level) <= DEBUG_LEVEL)
00137
00152 #define dbg_vprintf_level(level, format, ap) \
00153 (dbg_priv_check_level(level) \
00154 ? dbg_priv_vprintf(format, ap) \
00155 : dbg_priv_retzero())
00156
00170 #define dbg_printf_level(level, ...) \
00171 (dbg_priv_check_level(level) \
00172 ? dbg_priv_printf(__VA_ARGS__) \
00173 : dbg_priv_retzero())
00174
00184 #define dbg_putstr_level(level, str) \
00185 (dbg_priv_check_level(level) \
00186 ? dbg_priv_putstr(str) \
00187 : dbg_priv_retzero())
00188
00198 #define dbg_putchar_level(level, c) \
00199 (dbg_priv_check_level(level) \
00200 ? dbg_priv_putchar(c) \
00201 : dbg_priv_retzero())
00202
00207 #define dbg_putstr(str) \
00208 dbg_putstr_level(DEBUG_VERBOSE, str)
00209
00213 #define dbg_putchar(c) \
00214 dbg_putchar_level(DEBUG_VERBOSE, c)
00215
00220 #define dbg_panic(...) \
00221 dbg_printf_level(DEBUG_PANIC, __VA_ARGS__)
00222
00226 #define dbg_error(...) \
00227 dbg_printf_level(DEBUG_ERROR, __VA_ARGS__)
00228
00232 #define dbg_warning(...) \
00233 dbg_printf_level(DEBUG_WARNING, __VA_ARGS__)
00234
00238 #define dbg_info(...) \
00239 dbg_printf_level(DEBUG_INFO, __VA_ARGS__)
00240
00244 #define dbg_verbose(...) \
00245 dbg_printf_level(DEBUG_VERBOSE, __VA_ARGS__)
00246
00248
00249 #endif