]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - tmk_core/common/keyboard.c
xt_usb: Fix XT soft reset
[max/tmk_keyboard.git] / tmk_core / common / keyboard.c
index b0319369d0f590a9f3f87761ec74f1d93ab53ba2..0eb28418dbe13f2753bf1c244fe6a89750cb7658 100644 (file)
@@ -93,7 +93,7 @@ void keyboard_init(void)
 }
 
 /*
- * Do keyboard routine jobs: scan mantrix, light LEDs, ...
+ * Do keyboard routine jobs: scan matrix, light LEDs, ...
  * This is repeatedly called as fast as possible.
  */
 void keyboard_task(void)
@@ -126,19 +126,22 @@ void keyboard_task(void)
             matrix_ghost[r] = matrix_row;
 #endif
             if (debug_matrix) matrix_print();
-            for (uint8_t c = 0; c < MATRIX_COLS; c++) {
-                if (matrix_change & ((matrix_row_t)1<<c)) {
+            matrix_row_t col_mask = 1;
+            for (uint8_t c = 0; c < MATRIX_COLS; c++, col_mask <<= 1) {
+                if (matrix_change & col_mask) {
                     keyevent_t e = (keyevent_t){
                         .key = (keypos_t){ .row = r, .col = c },
-                        .pressed = (matrix_row & ((matrix_row_t)1<<c)),
+                        .pressed = (matrix_row & col_mask),
                         .time = (timer_read() | 1) /* time should not be 0 */
                     };
                     action_exec(e);
                     hook_matrix_change(e);
                     // record a processed key
-                    matrix_prev[r] ^= ((matrix_row_t)1<<c);
+                    matrix_prev[r] ^= col_mask;
+
+                    // This can miss stroke when scan matrix takes long like Topre
                     // process a key per task call
-                    goto MATRIX_LOOP_END;
+                    //goto MATRIX_LOOP_END;
                 }
             }
         }
@@ -146,7 +149,7 @@ void keyboard_task(void)
     // call with pseudo tick event when no real key event.
     action_exec(TICK);
 
-MATRIX_LOOP_END:
+//MATRIX_LOOP_END:
 
     hook_keyboard_loop();
 
@@ -179,3 +182,6 @@ void keyboard_set_leds(uint8_t leds)
 {
     led_set(leds);
 }
+
+__attribute__ ((weak))
+void led_set(uint8_t usb_led) {}