]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
ibmpc: Protocol detection between AT and XT
authortmk <hasu@tmk-kbd.com>
Mon, 2 Mar 2020 02:02:48 +0000 (11:02 +0900)
committertmk <hasu@tmk-kbd.com>
Mon, 2 Mar 2020 02:04:30 +0000 (11:04 +0900)
tmk_core/protocol/ibmpc.c
tmk_core/protocol/ibmpc.h

index 8e195e9484b7bd916fdd98c7d80a2bda2d02e59d..2f5f70f59ac3701c89778489fe8aebc76f32f78c 100644 (file)
@@ -56,7 +56,7 @@ POSSIBILITY OF SUCH DAMAGE.
 } while (0)
 
 
-volatile uint8_t ibmpc_protocol = IBMPC_PROTOCOL_AT;
+volatile uint8_t ibmpc_protocol = IBMPC_PROTOCOL_NO;
 volatile uint8_t ibmpc_error = IBMPC_ERR_NONE;
 
 /* 2-byte buffer for data received from keyhboard
@@ -97,8 +97,6 @@ int16_t ibmpc_host_send(uint8_t data)
     bool parity = true;
     ibmpc_error = IBMPC_ERR_NONE;
 
-    if (ibmpc_protocol == IBMPC_PROTOCOL_XT) return -1;
-
     dprintf("w%02X ", data);
 
     IBMPC_INT_OFF();
@@ -269,6 +267,7 @@ ISR(IBMPC_INT_VECT)
         case 0b11000000:
             // XT_Clone-done
             isr_state = isr_state>>8;
+            ibmpc_protocol = IBMPC_PROTOCOL_XT_CLONE;
             goto DONE;
             break;
         case 0b10100000:    // ^2
@@ -284,6 +283,7 @@ ISR(IBMPC_INT_VECT)
                 } else {
                     // no stop bit: XT_IBM-done
                     isr_state = isr_state>>8;
+                    ibmpc_protocol = IBMPC_PROTOCOL_XT_IBM;
                     goto DONE;
                 }
              }
@@ -295,6 +295,7 @@ ISR(IBMPC_INT_VECT)
             // AT-done
             // TODO: parity check?
             isr_state = isr_state>>6;
+            ibmpc_protocol = IBMPC_PROTOCOL_AT;
             goto DONE;
             break;
         case 0b01100000:
index 602a43f359dba842b6d1f531cdb969fb7b5bfcf3..5dcf2aa1a456436b516d43c3c658235a355c5295 100644 (file)
@@ -70,10 +70,12 @@ POSSIBILITY OF SUCH DAMAGE.
 #define IBMPC_RESEND      0xFE
 #define IBMPC_SET_LED     0xED
 
-#define IBMPC_PROTOCOL_AT   0
-#define IBMPC_PROTOCOL_XT   1
+#define IBMPC_PROTOCOL_NO       0
+#define IBMPC_PROTOCOL_AT       1
+#define IBMPC_PROTOCOL_XT_IBM   2
+#define IBMPC_PROTOCOL_XT_CLONE 3
 
-// TODO: error numbers
+// Error numbers
 #define IBMPC_ERR_NONE        0
 #define IBMPC_ERR_RECV        0x00
 #define IBMPC_ERR_SEND        0x10