]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
ergodox_ez: fixed bug where debounce() was called without calculating changed (#5589)
authorAlex Ong <the.onga@gmail.com>
Tue, 9 Apr 2019 04:52:38 +0000 (14:52 +1000)
committerDrashna Jaelre <drashna@live.com>
Tue, 9 Apr 2019 04:52:38 +0000 (21:52 -0700)
keyboards/ergodox_ez/matrix.c

index 97f764113b27ab2e6d219c7d662f8818c968eebe..6f604ae2b95acb90000dbb81801c201936d0a514 100644 (file)
@@ -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;