diff --git a/quantum/keyboard.c b/quantum/keyboard.c index eb5e4b583a99..618f4f5f2e1b 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -252,6 +252,14 @@ __attribute__((weak)) void keyboard_post_init_kb(void) { keyboard_post_init_user(); } +/** \brief matrix_available + * + * Override this function if you have a condition where matrix tasks should not be available + */ +__attribute__((weak)) bool matrix_available(void) { + return true; +} + /** \brief keyboard_setup * * FIXME: needs doc @@ -449,11 +457,17 @@ static inline void generate_tick_event(void) { * @return false Matrix didn't change */ static bool matrix_task(void) { + bool matrix_changed = false; + + if (!matrix_available()) { + generate_tick_event(); + return matrix_changed; + } + static matrix_row_t matrix_previous[MATRIX_ROWS]; matrix_scan(); - bool matrix_changed = false; for (uint8_t row = 0; row < MATRIX_ROWS && !matrix_changed; row++) { matrix_changed |= matrix_previous[row] ^ matrix_get_row(row); } diff --git a/quantum/matrix.h b/quantum/matrix.h index 37f34164a07e..3aefc8cec30b 100644 --- a/quantum/matrix.h +++ b/quantum/matrix.h @@ -52,6 +52,8 @@ void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) #endif /* scan all key states on matrix */ uint8_t matrix_scan(void); +/* whether matrix tasks are available */ +bool matrix_available(void); /* whether a switch is on */ bool matrix_is_on(uint8_t row, uint8_t col); /* matrix state on row */