diff options
Diffstat (limited to 'quantum/matrix.c')
| -rw-r--r-- | quantum/matrix.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c index 292171490..71292db51 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c | |||
| @@ -21,10 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 21 | #include "debug.h" | 21 | #include "debug.h" |
| 22 | #include "util.h" | 22 | #include "util.h" |
| 23 | #include "matrix.h" | 23 | #include "matrix.h" |
| 24 | #include "timer.h" | 24 | #include "debounce.h" |
| 25 | #include "quantum.h" | 25 | #include "quantum.h" |
| 26 | 26 | ||
| 27 | |||
| 28 | #if (MATRIX_COLS <= 8) | 27 | #if (MATRIX_COLS <= 8) |
| 29 | # define print_matrix_header() print("\nr/c 01234567\n") | 28 | # define print_matrix_header() print("\nr/c 01234567\n") |
| 30 | # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) | 29 | # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) |
| @@ -52,8 +51,9 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; | |||
| 52 | #endif | 51 | #endif |
| 53 | 52 | ||
| 54 | /* matrix state(1:on, 0:off) */ | 53 | /* matrix state(1:on, 0:off) */ |
| 55 | static matrix_row_t matrix[MATRIX_ROWS]; | 54 | static matrix_row_t raw_matrix[MATRIX_ROWS]; |
| 56 | 55 | ||
| 56 | static matrix_row_t matrix[MATRIX_ROWS]; | ||
| 57 | 57 | ||
| 58 | #if (DIODE_DIRECTION == COL2ROW) | 58 | #if (DIODE_DIRECTION == COL2ROW) |
| 59 | static void init_cols(void); | 59 | static void init_cols(void); |
| @@ -120,34 +120,40 @@ void matrix_init(void) { | |||
| 120 | 120 | ||
| 121 | // initialize matrix state: all keys off | 121 | // initialize matrix state: all keys off |
| 122 | for (uint8_t i=0; i < MATRIX_ROWS; i++) { | 122 | for (uint8_t i=0; i < MATRIX_ROWS; i++) { |
| 123 | raw_matrix[i] = 0; | ||
| 123 | matrix[i] = 0; | 124 | matrix[i] = 0; |
| 124 | } | 125 | } |
| 126 | debounce_init(MATRIX_ROWS); | ||
| 125 | 127 | ||
| 126 | matrix_init_quantum(); | 128 | matrix_init_quantum(); |
| 127 | } | 129 | } |
| 128 | 130 | ||
| 129 | uint8_t matrix_scan(void) | 131 | uint8_t matrix_scan(void) |
| 130 | { | 132 | { |
| 133 | bool changed = false; | ||
| 131 | 134 | ||
| 132 | #if (DIODE_DIRECTION == COL2ROW) | 135 | #if (DIODE_DIRECTION == COL2ROW) |
| 133 | // Set row, read cols | 136 | // Set row, read cols |
| 134 | for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { | 137 | for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { |
| 135 | read_cols_on_row(matrix, current_row); | 138 | changed |= read_cols_on_row(raw_matrix, current_row); |
| 136 | } | 139 | } |
| 137 | #elif (DIODE_DIRECTION == ROW2COL) | 140 | #elif (DIODE_DIRECTION == ROW2COL) |
| 138 | // Set col, read rows | 141 | // Set col, read rows |
| 139 | for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { | 142 | for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { |
| 140 | read_rows_on_col(matrix, current_col); | 143 | changed |= read_rows_on_col(raw_matrix, current_col); |
| 141 | } | 144 | } |
| 142 | #endif | 145 | #endif |
| 143 | 146 | ||
| 144 | matrix_scan_quantum(); | 147 | debounce(raw_matrix, matrix, MATRIX_ROWS, changed); |
| 145 | return 1; | 148 | |
| 149 | matrix_scan_quantum(); | ||
| 150 | return 1; | ||
| 146 | } | 151 | } |
| 147 | 152 | ||
| 148 | //Deprecated. | 153 | //Deprecated. |
| 149 | bool matrix_is_modified(void) | 154 | bool matrix_is_modified(void) |
| 150 | { | 155 | { |
| 156 | if (debounce_active()) return false; | ||
| 151 | return true; | 157 | return true; |
| 152 | } | 158 | } |
| 153 | 159 | ||
