summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2013-10-08 12:23:25 +0900
committertmk <nobody@nowhere>2013-10-08 12:23:25 +0900
commite8e8f93bcf0cdc8d72d35662db5a1da4716762b8 (patch)
tree70d355d125b724092f8891bee3753e169063725e
parent63b3e2cbfbca26ca3705542fa241f6604d6aadda (diff)
Fix ADB missing keystrokes problem Thanks, blargg! #14
- Add delay between scans to prevent overlaod of ADB keyboard controllers - <http://geekhack.org/index.php?topic=14290.msg1068919#msg1068919>
-rw-r--r--converter/adb_usb/matrix.c1
-rw-r--r--protocol/adb.c6
2 files changed, 7 insertions, 0 deletions
diff --git a/converter/adb_usb/matrix.c b/converter/adb_usb/matrix.c
index ee17f655f2..566592c93f 100644
--- a/converter/adb_usb/matrix.c
+++ b/converter/adb_usb/matrix.c
@@ -85,6 +85,7 @@ uint8_t matrix_scan(void)
uint8_t key0, key1;
is_modified = false;
+ _delay_ms(16); // delay for preventing overload of poor ADB keyboard controller
codes = adb_host_kbd_recv();
key0 = codes>>8;
key1 = codes&0xFF;
diff --git a/protocol/adb.c b/protocol/adb.c
index e4e26b7d7b..155d223fe7 100644
--- a/protocol/adb.c
+++ b/protocol/adb.c
@@ -83,6 +83,12 @@ bool adb_host_psw(void)
}
#endif
+/*
+ * Don't call this in a row without the delay, otherwise it makes some of poor controllers
+ * overloaded and misses strokes. Recommended delay is 16ms.
+ *
+ * Thanks a lot, blargg! <http://geekhack.org/index.php?topic=14290.msg1068919#msg1068919>
+ */
uint16_t adb_host_kbd_recv(void)
{
uint16_t data = 0;