فهرست منبع

Resend the keyboard state every ms

In case there's some errors on the link, and the packet gets lost
Fred Sundvik 10 سال پیش
والد
کامیت
d835ad91a3
1فایلهای تغییر یافته به همراه7 افزوده شده و 8 حذف شده
  1. 7 8
      serial_link/system/system.c

+ 7 - 8
serial_link/system/system.c

@@ -140,13 +140,6 @@ void init_serial_link(void) {
 void matrix_set_remote(matrix_row_t* rows, uint8_t index);
 
 void serial_link_update(void) {
-    systime_t current_time = chVTGetSystemTimeX();
-    if (current_time - last_update > 1000) {
-        *begin_write_serial_link_connected() = true;
-        end_write_serial_link_connected();
-        last_update = current_time;
-    }
-
     if (read_serial_link_connected()) {
         serial_link_connected = true;
     }
@@ -157,13 +150,19 @@ void serial_link_update(void) {
         matrix.rows[i] = matrix_get_row(i);
         changed |= matrix.rows[i] != last_matrix.rows[i];
     }
-    if (changed) {
+
+    systime_t current_time = chVTGetSystemTimeX();
+    systime_t delta = current_time - last_update;
+    if (changed || delta > US2ST(1000)) {
+        last_update = current_time;
         last_matrix = matrix;
         matrix_object_t* m = begin_write_keyboard_matrix();
         for(uint8_t i=0;i<MATRIX_ROWS;i++) {
             m->rows[i] = matrix.rows[i];
         }
         end_write_keyboard_matrix();
+        *begin_write_serial_link_connected() = true;
+        end_write_serial_link_connected();
     }
 
     matrix_object_t* m = read_keyboard_matrix(0);