]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - hhkb/matrix.c
switch debug on/off by pressing 4 keys on booting time
[max/tmk_keyboard.git] / hhkb / matrix.c
index 3034a636126c47f4c4f90917a87d5c2654984256..a425439ccab0887184096f8aa8f5a4c001849e19 100644 (file)
@@ -31,6 +31,20 @@ static uint8_t _matrix0[MATRIX_ROWS];
 static uint8_t _matrix1[MATRIX_ROWS];
 
 
+static bool matrix_has_ghost_in_row(int row);
+static int bit_pop(uint8_t bits);
+
+
+inline
+int matrix_rows(void) {
+    return MATRIX_ROWS;
+}
+
+inline
+int matrix_cols(void) {
+    return MATRIX_COLS;
+}
+
 // this must be called once before matrix_scan.
 void matrix_init(void)
 {
@@ -48,7 +62,7 @@ void matrix_init(void)
     matrix_prev = _matrix1;
 }
 
-uint8_t matrix_scan(void)
+int matrix_scan(void)
 {
     uint8_t *tmp;
 
@@ -75,17 +89,51 @@ uint8_t matrix_scan(void)
 }
 
 bool matrix_is_modified(void) {
-    for (int i=0; i <MATRIX_ROWS; i++) {
+    for (int i = 0; i < MATRIX_ROWS; i++) {
         if (matrix[i] != matrix_prev[i])
             return true;
     }
     return false;
 }
 
+inline
 bool matrix_has_ghost(void) {
     return false;
 }
 
-bool matrix_has_ghost_in_row(uint8_t row) {
+inline
+uint16_t matrix_get_row(int row) {
+    return matrix[row];
+}
+
+void matrix_print(void) {
+    print("\nr/c 01234567\n");
+    for (int row = 0; row < matrix_rows(); row++) {
+        phex(row); print(": ");
+        pbin_reverse(matrix_get_row(row));
+        if (matrix_has_ghost_in_row(row)) {
+            print(" <ghost");
+        }
+        print("\n");
+    }
+}
+
+int matrix_key_count(void) {
+    int count = 0;
+    for (int i = 0; i < MATRIX_ROWS; i++) {
+        count += bit_pop(~matrix[i]);
+    }
+    return count;
+}
+
+inline
+static bool matrix_has_ghost_in_row(int row) {
     return false;
 }
+
+static int bit_pop(uint8_t bits) {
+    int c;
+    for (c = 0; bits; c++)
+        bits &= bits -1;
+    return c;
+}