X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=common%2Fkeyboard.c;h=401fdb4e17f311be9bdae5d6f991f8ac4aff6bd1;hb=ef8439bddb2d7fe5fd95faf2b6bebd8235acf160;hp=ea4d0ee7e6128457479a286250113a690fe091b4;hpb=ee7ce433357a1c1bbcaba54525fc5b5b5404aa82;p=max%2Ftmk_keyboard.git diff --git a/common/keyboard.c b/common/keyboard.c index ea4d0ee7..401fdb4e 100644 --- a/common/keyboard.c +++ b/common/keyboard.c @@ -1,5 +1,5 @@ /* -Copyright 2011,2012 Jun Wako +Copyright 2011,2012,2013 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 @@ -14,6 +14,8 @@ 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 . */ +#include +#include #include "keyboard.h" #include "matrix.h" #include "keymap.h" @@ -26,15 +28,31 @@ along with this program. If not, see . #include "command.h" #include "util.h" #include "sendchar.h" -#ifdef MOUSEKEY_ENABLE +#include "bootmagic.h" +#include "eeconfig.h" #include "mousekey.h" + + +#ifdef MATRIX_HAS_GHOST +static bool has_ghost_in_row(uint8_t row) +{ + matrix_row_t matrix_row = matrix_get_row(row); + // No ghost exists when less than 2 keys are down on the row + if (((matrix_row - 1) & matrix_row) == 0) + return false; + + // Ghost occurs when the row shares column line with other row + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + if (i != row && (matrix_get_row(i) & matrix_row)) + return true; + } + return false; +} #endif void keyboard_init(void) { - // TODO: to enable debug print magic key bind on boot time - // TODO: configuration of sendchar impl print_sendchar_func = sendchar; @@ -43,6 +61,22 @@ void keyboard_init(void) #ifdef PS2_MOUSE_ENABLE ps2_mouse_init(); #endif + +#ifdef BOOTMAGIC_ENABLE + bootmagic(); + + if (eeconfig_is_enabled()) { + uint8_t config; + config = eeconfig_read_debug(); + // ignored if debug is enabled by program before. + if (!debug_enable) debug_enable = (config & EECONFIG_DEBUG_ENABLE); + if (!debug_matrix) debug_matrix = (config & EECONFIG_DEBUG_MATRIX); + if (!debug_keyboard) debug_keyboard = (config & EECONFIG_DEBUG_KEYBOARD); + if (!debug_mouse) debug_mouse = (config & EECONFIG_DEBUG_MOUSE); + } else { + eeconfig_init(); + } +#endif } /* @@ -57,48 +91,45 @@ void keyboard_task(void) matrix_row_t matrix_change = 0; matrix_scan(); - for (int r = 0; r < MATRIX_ROWS; r++) { + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { matrix_row = matrix_get_row(r); matrix_change = matrix_row ^ matrix_prev[r]; if (matrix_change) { if (debug_matrix) matrix_print(); - - for (int c = 0; c < MATRIX_COLS; c++) { - if (matrix_change & (1<