]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - keyboard/ergodox/matrix.c
Updates to CUB's layout - created Layer9 (app-specific shortcuts)
[tmk_firmware.git] / keyboard / ergodox / matrix.c
index e50932c92c25ffc752fc4a7098d5cb6e82c2599f..ee0d5d230f33a188c4bc70503e4cd53d8c8ad50e 100644 (file)
@@ -29,7 +29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "matrix.h"
 #include "ergodox.h"
 #include "i2cmaster.h"
-#ifdef DEBUG_MATRIX_FREQ
+#ifdef DEBUG_MATRIX_SCAN_RATE
 #include  "timer.h"
 #endif
 
@@ -47,9 +47,9 @@ static void init_cols(void);
 static void unselect_rows();
 static void select_row(uint8_t row);
 
-static uint8_t mcp23018_status;
+static uint8_t mcp23018_reset_loop;
 
-#ifdef DEBUG_MATRIX_FREQ
+#ifdef DEBUG_MATRIX_SCAN_RATE
 uint32_t matrix_timer;
 uint32_t matrix_scan_count;
 #endif
@@ -71,6 +71,7 @@ void matrix_init(void)
     // initialize row and col
     init_ergodox();
     mcp23018_status = init_mcp23018();
+    ergodox_blink_all_leds();
     unselect_rows();
     init_cols();
 
@@ -80,7 +81,7 @@ void matrix_init(void)
         matrix_debouncing[i] = 0;
     }
 
-#ifdef DEBUG_MATRIX_FREQ
+#ifdef DEBUG_MATRIX_SCAN_RATE
     matrix_timer = timer_read32();
     matrix_scan_count = 0;
 #endif
@@ -88,7 +89,22 @@ void matrix_init(void)
 
 uint8_t matrix_scan(void)
 {
-#ifdef DEBUG_MATRIX_FREQ
+    if (mcp23018_status) { // if there was an error
+        if (++mcp23018_reset_loop == 0) {
+            // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+            // this will be approx bit more frequent than once per second
+            print("trying to reset mcp23018\n");
+            mcp23018_status = init_mcp23018();
+            if (mcp23018_status) {
+                print("left side not responding\n");
+            } else {
+                print("left side attached\n");
+                ergodox_blink_all_leds();
+            }
+        }
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
     matrix_scan_count++;
 
     uint32_t timer_now = timer_read32();
@@ -134,8 +150,13 @@ uint8_t matrix_scan(void)
         case 4:
         case 5:
         case 7:
-            // red
+            // white
+            ergodox_left_led_1_on();
+            break;
+        case 9:
+            // white+green
             ergodox_left_led_1_on();
+            ergodox_left_led_3_on();
             break;
         default:
             // none