From 2c9ae5ac95734b102ad038a80857eb8446220c79 Mon Sep 17 00:00:00 2001 From: tmk Date: Mon, 2 Mar 2020 11:02:48 +0900 Subject: [PATCH] ibmpc: Protocol detection between AT and XT --- tmk_core/protocol/ibmpc.c | 7 ++++--- tmk_core/protocol/ibmpc.h | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/tmk_core/protocol/ibmpc.c b/tmk_core/protocol/ibmpc.c index 8e195e94..2f5f70f5 100644 --- a/tmk_core/protocol/ibmpc.c +++ b/tmk_core/protocol/ibmpc.c @@ -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: diff --git a/tmk_core/protocol/ibmpc.h b/tmk_core/protocol/ibmpc.h index 602a43f3..5dcf2aa1 100644 --- a/tmk_core/protocol/ibmpc.h +++ b/tmk_core/protocol/ibmpc.h @@ -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 -- 2.46.2