diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/matrix.c | 22 | ||||
-rw-r--r-- | quantum/matrix_common.c | 48 | ||||
-rw-r--r-- | quantum/split_common/matrix.c | 10 |
3 files changed, 52 insertions, 28 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c index 62a86fba68..1675f2477b 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -22,10 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "debounce.h" #include "quantum.h" -#ifdef MATRIX_MASKED -extern const matrix_row_t matrix_mask[]; -#endif - #ifdef DIRECT_PINS static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS; #elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW) @@ -34,22 +30,8 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; #endif /* matrix state(1:on, 0:off) */ -static matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values -static matrix_row_t matrix[MATRIX_ROWS]; // debounced values - -// helper functions - -inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); } - -inline matrix_row_t matrix_get_row(uint8_t row) { - // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a - // switch blocker installed and the switch is always pressed. -#ifdef MATRIX_MASKED - return matrix[row] & matrix_mask[row]; -#else - return matrix[row]; -#endif -} +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values // matrix code diff --git a/quantum/matrix_common.c b/quantum/matrix_common.c index 22704e8ee2..a8948a264b 100644 --- a/quantum/matrix_common.c +++ b/quantum/matrix_common.c @@ -3,6 +3,14 @@ #include "print.h" #include "debug.h" +/* matrix state(1:on, 0:off) */ +matrix_row_t raw_matrix[MATRIX_ROWS]; +matrix_row_t matrix[MATRIX_ROWS]; + +#ifdef MATRIX_MASKED +extern const matrix_row_t matrix_mask[]; +#endif + // user-defined overridable functions __attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); } @@ -19,6 +27,18 @@ inline uint8_t matrix_rows(void) { return MATRIX_ROWS; } inline uint8_t matrix_cols(void) { return MATRIX_COLS; } +inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); } + +inline matrix_row_t matrix_get_row(uint8_t row) { + // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a + // switch blocker installed and the switch is always pressed. +#ifdef MATRIX_MASKED + return matrix[row] & matrix_mask[row]; +#else + return matrix[row]; +#endif +} + // Deprecated. bool matrix_is_modified(void) { if (debounce_active()) return false; @@ -57,3 +77,31 @@ uint8_t matrix_key_count(void) { } return count; } + +// CUSTOM MATRIX 'LITE' +__attribute__((weak)) void matrix_init_custom(void) {} + +__attribute__((weak)) bool matrix_scan_custom(matrix_row_t current_matrix[]) { return true; } + +__attribute__((weak)) void matrix_init(void) { + matrix_init_custom(); + + // initialize matrix state: all keys off + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + raw_matrix[i] = 0; + matrix[i] = 0; + } + + debounce_init(MATRIX_ROWS); + + matrix_init_quantum(); +} + +__attribute__((weak)) uint8_t matrix_scan(void) { + bool changed = matrix_scan_custom(raw_matrix); + + debounce(raw_matrix, matrix, MATRIX_ROWS, changed); + + matrix_scan_quantum(); + return 1; +} diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c index 58602af859..ed1ff5acf3 100644 --- a/quantum/split_common/matrix.c +++ b/quantum/split_common/matrix.c @@ -41,8 +41,8 @@ static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; #endif /* matrix state(1:on, 0:off) */ -static matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values -static matrix_row_t matrix[MATRIX_ROWS]; // debounced values +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values // row offsets for each hand uint8_t thisHand, thatHand; @@ -50,12 +50,6 @@ uint8_t thisHand, thatHand; // user-defined overridable functions __attribute__((weak)) void matrix_slave_scan_user(void) {} -// helper functions - -inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); } - -inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; } - // matrix code #ifdef DIRECT_PINS |