/* Copyright 2011 Jun Wako This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef DEBUG_H #define DEBUG_H 1 #include "print.h" /* * Debug output control */ #ifdef __cplusplus extern "C" { #endif typedef union { uint8_t raw; struct { bool enable:1; bool matrix:1; bool keyboard:1; bool mouse:1; uint8_t reserved:4; }; } debug_config_t; extern debug_config_t debug_config; debug_config_t debug_config __attribute__ ((weak)) = {}; #ifdef __cplusplus } #endif #define debug_enable (debug_config.enable) #define debug_matrix (debug_config.matrix) #define debug_keyboard (debug_config.keyboard) #define debug_mouse (debug_config.mouse) /* * Debug print utils */ #ifndef NO_DEBUG #define dprint(s) do { if (debug_enable) print(s); } while (0) #define dprintln(s) do { if (debug_enable) println(s); } while (0) #define dprintf(fmt, ...) do { if (debug_enable) xprintf(fmt, ##__VA_ARGS__); } while (0) #define dmsg(s) dprintf("%s at %s: %S\n", __FILE__, __LINE__, PSTR(s)) /* Deprecated. DO NOT USE these anymore, use dprintf instead. */ #define debug(s) do { if (debug_enable) print(s); } while (0) #define debugln(s) do { if (debug_enable) println(s); } while (0) #define debug_msg(s) do { \ if (debug_enable) { \ print(__FILE__); print(" at "); print_dec(__LINE__); print(" in "); print(": "); print(s); \ } \ } while (0) #define debug_dec(data) do { if (debug_enable) print_dec(data); } while (0) #define debug_decs(data) do { if (debug_enable) print_decs(data); } while (0) #define debug_hex4(data) do { if (debug_enable) print_hex4(data); } while (0) #define debug_hex8(data) do { if (debug_enable) print_hex8(data); } while (0) #define debug_hex16(data) do { if (debug_enable) print_hex16(data); } while (0) #define debug_hex32(data) do { if (debug_enable) print_hex32(data); } while (0) #define debug_bin8(data) do { if (debug_enable) print_bin8(data); } while (0) #define debug_bin16(data) do { if (debug_enable) print_bin16(data); } while (0) #define debug_bin32(data) do { if (debug_enable) print_bin32(data); } while (0) #define debug_bin_reverse8(data) do { if (debug_enable) print_bin_reverse8(data); } while (0) #define debug_bin_reverse16(data) do { if (debug_enable) print_bin_reverse16(data); } while (0) #define debug_bin_reverse32(data) do { if (debug_enable) print_bin_reverse32(data); } while (0) #define debug_hex(data) debug_hex8(data) #define debug_bin(data) debug_bin8(data) #define debug_bin_reverse(data) debug_bin8(data) #else /* NO_DEBUG */ #define dprint(s) #define dprintln(s) #define dprintf(fmt, ...) #define dmsg(s) #define debug(s) #define debugln(s) #define debug_msg(s) #define debug_dec(data) #define debug_decs(data) #define debug_hex4(data) #define debug_hex8(data) #define debug_hex16(data) #define debug_hex32(data) #define debug_bin8(data) #define debug_bin16(data) #define debug_bin32(data) #define debug_bin_reverse8(data) #define debug_bin_reverse16(data) #define debug_bin_reverse32(data) #define debug_hex(data) #define debug_bin(data) #define debug_bin_reverse(data) #endif #endif