diff options
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/common/keyboard.c | 63 | 
1 files changed, 35 insertions, 28 deletions
| diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 9466e10e2d..1b7c8c1a2f 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -119,6 +119,11 @@ void keyboard_setup(void) {      matrix_setup();  } +__attribute__((weak)) +bool is_keyboard_master(void) { +    return true; +} +  void keyboard_init(void) {      timer_init();      matrix_init(); @@ -168,36 +173,38 @@ void keyboard_task(void)      matrix_row_t matrix_change = 0;      matrix_scan(); -    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 (is_keyboard_master()) { +        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) {  #ifdef MATRIX_HAS_GHOST -            if (has_ghost_in_row(r, matrix_row)) { -                /* Keep track of whether ghosted status has changed for -                 * debugging. But don't update matrix_prev until un-ghosted, or -                 * the last key would be lost. -                 */ -                //if (debug_matrix && matrix_ghost[r] != matrix_row) { -                //    matrix_print(); -                //} +                if (has_ghost_in_row(r, matrix_row)) { +                    /* Keep track of whether ghosted status has changed for +                    * debugging. But don't update matrix_prev until un-ghosted, or +                    * the last key would be lost. +                    */ +                    //if (debug_matrix && matrix_ghost[r] != matrix_row) { +                    //    matrix_print(); +                    //} +                    //matrix_ghost[r] = matrix_row; +                    continue; +                }                  //matrix_ghost[r] = matrix_row; -                continue; -            } -            //matrix_ghost[r] = matrix_row; -#endif -            if (debug_matrix) matrix_print(); -            for (uint8_t c = 0; c < MATRIX_COLS; c++) { -                if (matrix_change & ((matrix_row_t)1<<c)) { -                    action_exec((keyevent_t){ -                        .key = (keypos_t){ .row = r, .col = c }, -                        .pressed = (matrix_row & ((matrix_row_t)1<<c)), -                        .time = (timer_read() | 1) /* time should not be 0 */ -                    }); -                    // record a processed key -                    matrix_prev[r] ^= ((matrix_row_t)1<<c); -                    // process a key per task call -                    goto MATRIX_LOOP_END; +#endif +                if (debug_matrix) matrix_print(); +                for (uint8_t c = 0; c < MATRIX_COLS; c++) { +                    if (matrix_change & ((matrix_row_t)1<<c)) { +                        action_exec((keyevent_t){ +                            .key = (keypos_t){ .row = r, .col = c }, +                            .pressed = (matrix_row & ((matrix_row_t)1<<c)), +                            .time = (timer_read() | 1) /* time should not be 0 */ +                        }); +                        // record a processed key +                        matrix_prev[r] ^= ((matrix_row_t)1<<c); +                        // process a key per task call +                        goto MATRIX_LOOP_END; +                    }                  }              }          } | 
