]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
adb_usb: Fix #518 Lag on typing
authortmk <hasu@tmk-kbd.com>
Fri, 19 Jan 2018 01:15:26 +0000 (10:15 +0900)
committertmk <hasu@tmk-kbd.com>
Fri, 19 Jan 2018 01:15:26 +0000 (10:15 +0900)
converter/adb_usb/matrix.c

index 83f460411122e21e77dc056dae00f419f3db2066..7b371c5bb535b650ae8dc5f373e6a5b5c4fa8c4b 100644 (file)
@@ -30,13 +30,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "report.h"
 #include "host.h"
 #include "led.h"
+#include "timer.h"
 
 
 
 
 static bool has_media_keys = false;
 static bool is_iso_layout = false;
-static report_mouse_t mouse_report = {};
 
 // matrix state buffer(1:on, 0:off)
 static matrix_row_t matrix[MATRIX_ROWS];
@@ -122,12 +122,21 @@ void matrix_init(void)
 #endif
 #define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
 
+static report_mouse_t mouse_report = {};
+
 void adb_mouse_task(void)
 {
     uint16_t codes;
     int16_t x, y;
     static int8_t mouseacc;
-    _delay_ms(12);  // delay for preventing overload of poor ADB keyboard controller
+
+    /* tick of last polling */
+    static uint16_t tick_ms;
+
+    // polling with 12ms interval
+    if (timer_elapsed(tick_ms) < 12) return;
+    tick_ms = timer_read();
+
     codes = adb_host_mouse_recv();
     // If nothing received reset mouse acceleration, and quit.
     if (!codes) {
@@ -185,12 +194,18 @@ uint8_t matrix_scan(void)
     uint16_t codes;
     uint8_t key0, key1;
 
+    /* tick of last polling */
+    static uint16_t tick_ms;
+
     codes = extra_key;
     extra_key = 0xFFFF;
 
     if ( codes == 0xFFFF )
     {
-        _delay_ms(12);  // delay for preventing overload of poor ADB keyboard controller
+        // polling with 12ms interval
+        if (timer_elapsed(tick_ms) < 12) return 0;
+        tick_ms = timer_read();
+
         codes = adb_host_kbd_recv(ADB_ADDR_KEYBOARD);
 
         // Adjustable keybaord media keys