if (isr_state == 0x8000) {
timer_start = t;
} else {
- // should not take more than 1ms
- if (timer_start != t && (uint8_t)(timer_start + 1) != t) {
+ // This gives 2.0ms at least before timeout
+ if ((uint8_t)(t - timer_start) >= 3) {
ibmpc_isr_debug = isr_state;
ibmpc_error = IBMPC_ERR_TIMEOUT;
goto ERROR;
case 0b01010000:
case 0b11010000:
// AT-done
- // DO NOT check stop bit. Zenith Z-150(AT) asserts stop bit as low for no reason.
- // https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#zenith-z-150-beige
// TODO: parity check?
ibmpc_isr_debug = isr_state;
+ // stop bit check
+ if (isr_state & 0x8000) {
+ ibmpc_protocol = IBMPC_PROTOCOL_AT;
+ } else {
+ // Zenith Z-150 AT(beige/white lable) asserts stop bit as low
+ // https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#zenith-z-150-beige
+ ibmpc_protocol = IBMPC_PROTOCOL_AT_Z150;
+ }
isr_state = isr_state>>6;
- ibmpc_protocol = IBMPC_PROTOCOL_AT;
goto DONE;
break;
case 0b01100000: