]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboards/ergodox_ez/matrix.c
Remove more commented out MCUs
[qmk_firmware.git] / keyboards / ergodox_ez / matrix.c
index 97f764113b27ab2e6d219c7d662f8818c968eebe..2bfe27b9a300411a095d4d255fd5db128b6b09a9 100644 (file)
@@ -1,9 +1,5 @@
 /*
 
-Note for ErgoDox EZ customizers: Here be dragons!
-This is not a file you want to be messing with.
-All of the interesting stuff for you is under keymaps/ :)
-Love, Erez
 
 Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
 
@@ -95,7 +91,7 @@ void matrix_init(void) {
   // initialize matrix state: all keys off
   for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
     matrix[i]     = 0;
-    raw_matrix[i] = 0;    
+    raw_matrix[i] = 0;
   }
 
 #ifdef DEBUG_MATRIX_SCAN_RATE
@@ -123,6 +119,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 +164,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;