From 48cac9e3c8710ae3e27c66fbd7043f38e7c6535e Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Wed, 15 Jan 2020 01:58:32 +0000 Subject: [PATCH] Migrate more custom matrix 'lite' code to core (#7863) * Migrate more custom matrix lite code to core * Align function names * fix up MATRIX_MASKED --- keyboards/xd84/custom_matrix_helper.c | 71 --------------------------- keyboards/xd84/matrix.c | 4 +- keyboards/xd84/rules.mk | 2 +- keyboards/xd96/custom_matrix_helper.c | 71 --------------------------- keyboards/xd96/matrix.c | 4 +- keyboards/xd96/rules.mk | 2 +- quantum/matrix.c | 22 +-------- quantum/matrix_common.c | 48 ++++++++++++++++++ quantum/split_common/matrix.c | 10 +--- 9 files changed, 58 insertions(+), 176 deletions(-) delete mode 100644 keyboards/xd84/custom_matrix_helper.c delete mode 100644 keyboards/xd96/custom_matrix_helper.c diff --git a/keyboards/xd84/custom_matrix_helper.c b/keyboards/xd84/custom_matrix_helper.c deleted file mode 100644 index e4e2563819..0000000000 --- a/keyboards/xd84/custom_matrix_helper.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright 2019 - * - * 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 . - */ -#include -#include -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "debounce.h" -#include "quantum.h" - -//_____COULD BE COMMON_________________________________________________________ -/* matrix state(1:on, 0:off) */ -/*static*/ matrix_row_t raw_matrix[MATRIX_ROWS]; -/*static*/ matrix_row_t matrix[MATRIX_ROWS]; - -__attribute__ ((weak)) -matrix_row_t matrix_get_row(uint8_t row) { - return matrix[row]; -} - -//_____CUSTOM MATRIX 'LITE'____________________________________________________ -__attribute__ ((weak)) -void custom_matrix_init(void) { -} - -__attribute__ ((weak)) -bool custom_matrix_scan(matrix_row_t current_matrix[]) { - bool changed = true; - return changed; -} - -__attribute__ ((weak)) -void matrix_init(void) { - - custom_matrix_init(); - - // 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 = custom_matrix_scan(raw_matrix); - - debounce(raw_matrix, matrix, MATRIX_ROWS, changed); - - matrix_scan_quantum(); - return 1; -} diff --git a/keyboards/xd84/matrix.c b/keyboards/xd84/matrix.c index a4ddbee9a0..92b8ff8546 100644 --- a/keyboards/xd84/matrix.c +++ b/keyboards/xd84/matrix.c @@ -82,14 +82,14 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) //_____CUSTOM MATRIX IMPLEMENTATION____________________________________________________ -void custom_matrix_init(void) { +void matrix_init_custom(void) { pca9555_init(IC1); pca9555_init(IC2); init_pins(); } -bool custom_matrix_scan(matrix_row_t current_matrix[]) { +bool matrix_scan_custom(matrix_row_t current_matrix[]) { bool changed = false; for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { changed |= read_cols_on_row(current_matrix, current_row); diff --git a/keyboards/xd84/rules.mk b/keyboards/xd84/rules.mk index 4a460d91fa..13e1b4ba37 100644 --- a/keyboards/xd84/rules.mk +++ b/keyboards/xd84/rules.mk @@ -37,7 +37,7 @@ LINK_TIME_OPTIMIZATION_ENABLE = yes CUSTOM_MATRIX = lite VPATH += drivers/gpio -SRC += custom_matrix_helper.c pca9555.c matrix.c +SRC += pca9555.c matrix.c QUANTUM_LIB_SRC += i2c_master.c LAYOUTS = 75_ansi 75_iso diff --git a/keyboards/xd96/custom_matrix_helper.c b/keyboards/xd96/custom_matrix_helper.c deleted file mode 100644 index e4e2563819..0000000000 --- a/keyboards/xd96/custom_matrix_helper.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright 2019 - * - * 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 . - */ -#include -#include -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "debounce.h" -#include "quantum.h" - -//_____COULD BE COMMON_________________________________________________________ -/* matrix state(1:on, 0:off) */ -/*static*/ matrix_row_t raw_matrix[MATRIX_ROWS]; -/*static*/ matrix_row_t matrix[MATRIX_ROWS]; - -__attribute__ ((weak)) -matrix_row_t matrix_get_row(uint8_t row) { - return matrix[row]; -} - -//_____CUSTOM MATRIX 'LITE'____________________________________________________ -__attribute__ ((weak)) -void custom_matrix_init(void) { -} - -__attribute__ ((weak)) -bool custom_matrix_scan(matrix_row_t current_matrix[]) { - bool changed = true; - return changed; -} - -__attribute__ ((weak)) -void matrix_init(void) { - - custom_matrix_init(); - - // 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 = custom_matrix_scan(raw_matrix); - - debounce(raw_matrix, matrix, MATRIX_ROWS, changed); - - matrix_scan_quantum(); - return 1; -} diff --git a/keyboards/xd96/matrix.c b/keyboards/xd96/matrix.c index e8fd850edb..8cecc79c26 100644 --- a/keyboards/xd96/matrix.c +++ b/keyboards/xd96/matrix.c @@ -80,14 +80,14 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) //_____CUSTOM MATRIX IMPLEMENTATION____________________________________________________ -void custom_matrix_init(void) { +void matrix_init_custom(void) { pca9555_init(IC1); pca9555_init(IC2); init_pins(); } -bool custom_matrix_scan(matrix_row_t current_matrix[]) { +bool matrix_scan_custom(matrix_row_t current_matrix[]) { bool changed = false; for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { changed |= read_cols_on_row(current_matrix, current_row); diff --git a/keyboards/xd96/rules.mk b/keyboards/xd96/rules.mk index d5ac5df36a..9afd4eec4e 100644 --- a/keyboards/xd96/rules.mk +++ b/keyboards/xd96/rules.mk @@ -37,5 +37,5 @@ LINK_TIME_OPTIMIZATION_ENABLE = yes CUSTOM_MATRIX = lite VPATH += drivers/gpio -SRC += custom_matrix_helper.c pca9555.c matrix.c +SRC += pca9555.c matrix.c QUANTUM_LIB_SRC += i2c_master.c 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 . #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