X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=converter%2Fibmpc_usb%2Fibmpc_usb.c;h=eb71d3335c721ef80b2524036b835c0387ceadbc;hb=e1cbd227ccd24d4204f6eb4d4de4d6d83a0b7615;hp=951bf988c19fbc60df895f56afe094dc241add0a;hpb=c023e5feeafd8582105b84ee63c2faa4592f874c;p=max%2Ftmk_keyboard.git diff --git a/converter/ibmpc_usb/ibmpc_usb.c b/converter/ibmpc_usb/ibmpc_usb.c index 951bf988..eb71d333 100644 --- a/converter/ibmpc_usb/ibmpc_usb.c +++ b/converter/ibmpc_usb/ibmpc_usb.c @@ -125,7 +125,7 @@ uint8_t matrix_scan(void) if (ibmpc_error) { - xprintf("\nERR: %02X\n", ibmpc_error); + xprintf("\nERR:%02X\n", ibmpc_error); // when recv error, neither send error nor buffer full if (!(ibmpc_error & (IBMPC_ERR_SEND | IBMPC_ERR_FULL))) { @@ -220,7 +220,7 @@ uint8_t matrix_scan(void) keyboard_id = read_keyboard_id(); if (ibmpc_error) { - xprintf("\nERR: %02X\n", ibmpc_error); + xprintf("\nERR:%02X\n", ibmpc_error); ibmpc_error = IBMPC_ERR_NONE; } @@ -411,7 +411,7 @@ static uint8_t cs1_e0code(uint8_t code) { case 0x63: return 0x7B; // Wake (MUHENKAN) default: - xprintf("!CS1_?!\n"); + xprintf("!CS1_E0_%02X!\n", code); return code; } return 0x00; @@ -422,7 +422,7 @@ static int8_t process_cs1(void) static enum { INIT, E0, - // Pause: E1 1D 45, E1 9D C5 + // Pause: E1 1D 45, E1 9D C5 [a] (TODO: test) E1, E1_1D, E1_9D, @@ -433,12 +433,20 @@ static int8_t process_cs1(void) return 0; } + // Check invalid codes; 0x59-7F won't be used in real XT keyboards probably + // 0x62 is used to handle escape code E0 and E1 + if ((code & 0x7F) >= 0x62) { + xprintf("!CS1_INV!\n"); + state = INIT; + return -1; + } + switch (state) { case INIT: switch (code) { case 0x00: case 0xFF: // Error/Overrun [3]p.26 - xprintf("!CS1_%02X!\n", code); + xprintf("!CS1_ERR!\n"); return -1; break; case 0xE0: @@ -659,9 +667,13 @@ static int8_t process_cs2(void) case INIT: switch (code) { case 0x00: // Error/Overrun [3]p.26 + xprintf("!CS2_OVR!\n"); + matrix_clear(); + clear_keyboard(); + break; case 0xFF: matrix_clear(); - xprintf("!CS2_%02X!\n", code); + xprintf("!CS2_ERR!\n"); state = INIT; return -1; break; @@ -838,8 +850,12 @@ static int8_t process_cs3(void) case READY: switch (code) { case 0x00: // Error/Overrun [3]p.26 + xprintf("!CS3_OVR!\n"); + matrix_clear(); + clear_keyboard(); + break; case 0xFF: - xprintf("!CS3_%02X!\n", code); + xprintf("!CS3_ERR!\n"); return -1; break; case 0xF0: @@ -855,7 +871,7 @@ static int8_t process_cs3(void) if (code < 0x80) { matrix_make(code); } else { - xprintf("!CS3_%02X!\n", code); + xprintf("!CS3_READY!\n"); return -1; } } @@ -863,8 +879,13 @@ static int8_t process_cs3(void) case F0: // Break code switch (code) { case 0x00: + xprintf("!CS3_F0_OVR!\n"); + matrix_clear(); + clear_keyboard(); + state = READY; + break; case 0xFF: - xprintf("!CS3_F0_%02X!\n", code); + xprintf("!CS3_F0_ERR!\n"); state = READY; return -1; break; @@ -881,7 +902,7 @@ static int8_t process_cs3(void) if (code < 0x80) { matrix_break(code); } else { - xprintf("!CS3_F0_%02X!\n", code); + xprintf("!CS3_F0!\n"); return -1; } }