/* Copyright 2011 Jun Wako <wakojun@gmail.com> 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 <http://www.gnu.org/licenses/>. */ #ifndef DEBUG_H #define DEBUG_H 1 #include <stdbool.h> #include "print.h" #ifdef __cplusplus extern "C" { #endif /* * Debug output control */ typedef union { struct { bool enable : 1; bool matrix : 1; bool keyboard : 1; bool mouse : 1; uint8_t reserved : 4; }; uint8_t raw; } debug_config_t; extern debug_config_t debug_config; #ifdef __cplusplus } #endif /* for backward compatibility */ #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 /* NO_DEBUG */ #endif