~ruther/qmk_firmware

3761c28bf9a0d8c117b124c8d1a958e033b1e99f — Alex Ong 6 years ago fa4052c
ergodox_ez: fixed bug where debounce() was called without calculating changed (#5589)

1 files changed, 20 insertions(+), 7 deletions(-)

M keyboards/ergodox_ez/matrix.c
M keyboards/ergodox_ez/matrix.c => keyboards/ergodox_ez/matrix.c +20 -7
@@ 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;