ibmpc: Fix error handling for keyobard hotswap

This commit is contained in:
tmk 2020-01-07 11:31:03 +09:00
parent f7b74361a0
commit f68a1f5590

View file

@ -116,7 +116,7 @@ uint8_t matrix_scan(void)
if (ibmpc_error) { if (ibmpc_error) {
xprintf("err: %02X\n", ibmpc_error); xprintf("\nERR: %02X\n", ibmpc_error);
// when recv error, neither send error nor buffer full // when recv error, neither send error nor buffer full
if (!(ibmpc_error & (IBMPC_ERR_SEND | IBMPC_ERR_FULL))) { if (!(ibmpc_error & (IBMPC_ERR_SEND | IBMPC_ERR_FULL))) {
@ -151,7 +151,7 @@ uint8_t matrix_scan(void)
case READ_ID: case READ_ID:
keyboard_id = read_keyboard_id(); keyboard_id = read_keyboard_id();
if (ibmpc_error) { if (ibmpc_error) {
xprintf("err: %02X\n", ibmpc_error); xprintf("\nERR: %02X\n", ibmpc_error);
ibmpc_error = IBMPC_ERR_NONE; ibmpc_error = IBMPC_ERR_NONE;
} }
xprintf("ID: %04X\n", keyboard_id); xprintf("ID: %04X\n", keyboard_id);
@ -202,13 +202,13 @@ uint8_t matrix_scan(void)
case LOOP: case LOOP:
switch (keyboard_kind) { switch (keyboard_kind) {
case PC_XT: case PC_XT:
process_cs1(); if (process_cs1() == -1) state = INIT;
break; break;
case PC_AT: case PC_AT:
process_cs2(); if (process_cs2() == -1) state = INIT;
break; break;
case PC_TERMINAL: case PC_TERMINAL:
process_cs3(); if (process_cs3() == -1) state = INIT;
break; break;
default: default:
break; break;
@ -765,8 +765,9 @@ static int8_t process_cs3(void)
case READY: case READY:
switch (code) { switch (code) {
case 0x00: case 0x00:
case 0xff: case 0xFF:
xprintf("!CS3_%02X!\n", code); xprintf("!CS3_%02X!\n", code);
return -1;
break; break;
case 0xF0: case 0xF0:
state = F0; state = F0;
@ -782,16 +783,17 @@ static int8_t process_cs3(void)
matrix_make(code); matrix_make(code);
} else { } else {
xprintf("!CS3_%02X!\n", code); xprintf("!CS3_%02X!\n", code);
return -1;
} }
state = READY;
} }
break; break;
case F0: // Break code case F0: // Break code
switch (code) { switch (code) {
case 0x00: case 0x00:
case 0xff: case 0xFF:
xprintf("!CS3_F0_%02X!\n", code); xprintf("!CS3_F0_%02X!\n", code);
state = READY; state = READY;
return -1;
break; break;
case 0x83: // F7 case 0x83: // F7
matrix_break(0x02); matrix_break(0x02);
@ -802,12 +804,13 @@ static int8_t process_cs3(void)
state = READY; state = READY;
break; break;
default: default:
state = READY;
if (code < 0x80) { if (code < 0x80) {
matrix_break(code); matrix_break(code);
} else { } else {
xprintf("!CS3_F0_%02X!\n", code); xprintf("!CS3_F0_%02X!\n", code);
return -1;
} }
state = READY;
} }
break; break;
} }