]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
ibmpc: Fix buffer full check
authortmk <hasu@tmk-kbd.com>
Tue, 12 May 2020 09:28:07 +0000 (18:28 +0900)
committertmk <hasu@tmk-kbd.com>
Tue, 12 May 2020 09:28:07 +0000 (18:28 +0900)
recv_data should appear to as 'sstt' when it is full with two data.
Both upper and lower byte should be checked.

tmk_core/protocol/ibmpc.c

index cb612eb1c08490a53f5368b9b638054496e3cf84..282a4f8260671aacf37f81e7c241af0e65440632 100644 (file)
@@ -229,6 +229,8 @@ void ibmpc_host_isr_clear(void)
     recv_data = 0xFFFF;
 }
 
+#define LO8(w)  (*((uint8_t *)&(w)))
+#define HI8(w)  (*(((uint8_t *)&(w))+1))
 // NOTE: With this ISR data line can be read within 2us after clock falling edge.
 // To read data line early as possible:
 // write naked ISR with asembly code to read the line and call C func to do other job?
@@ -379,7 +381,7 @@ DONE:
         ibmpc_error = IBMPC_ERR_FF;
         goto ERROR;
     }
-    if ((recv_data & 0xFF00) != 0xFF00) {
+    if (HI8(recv_data) != 0xFF && LO8(recv_data) != 0xFF) {
         // buffer full
         ibmpc_error = IBMPC_ERR_FULL;
         goto ERROR;