diff options
author | Alex Ong <the.onga@gmail.com> | 2019-04-09 14:52:38 +1000 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-04-08 21:52:38 -0700 |
commit | 3761c28bf9a0d8c117b124c8d1a958e033b1e99f (patch) | |
tree | 6143d112280869dfae2c150ec56b7d3c900fdae6 | |
parent | fa4052c26e33b42b65521fd5ba9f94a3a778b275 (diff) |
ergodox_ez: fixed bug where debounce() was called without calculating changed (#5589)
-rw-r--r-- | keyboards/ergodox_ez/matrix.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index 97f764113b..6f604ae2b9 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -123,6 +123,17 @@ void matrix_power_up(void) { #endif } +// Reads and stores a row, returning +// whether a change occurred. +static inline bool store_raw_matrix_row(uint8_t index) { + matrix_row_t temp = read_cols(index); + if (raw_matrix[index] != temp) { + raw_matrix[index] = temp; + return true; + } + return false; +} + uint8_t matrix_scan(void) { if (mcp23018_status) { // if there was an error if (++mcp23018_reset_loop == 0) { @@ -157,22 +168,24 @@ uint8_t matrix_scan(void) { #ifdef LEFT_LEDS mcp23018_status = ergodox_left_leds_update(); #endif // LEFT_LEDS + bool changed = false; for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) { // select rows from left and right hands - select_row(i); - select_row(i + MATRIX_ROWS_PER_SIDE); + uint8_t left_index = i; + uint8_t right_index = i + MATRIX_ROWS_PER_SIDE; + select_row(left_index); + select_row(right_index); // we don't need a 30us delay anymore, because selecting a // left-hand row requires more than 30us for i2c. - - // grab left + right cols. - raw_matrix[i] = read_cols(i); - raw_matrix[i+MATRIX_ROWS_PER_SIDE] = read_cols(i+MATRIX_ROWS_PER_SIDE); + changed |= store_raw_matrix_row(left_index); + changed |= store_raw_matrix_row(right_index); + unselect_rows(); } - debounce(raw_matrix, matrix, MATRIX_ROWS, true); + debounce(raw_matrix, matrix, MATRIX_ROWS, changed); matrix_scan_quantum(); return 1; |