X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=converter%2Fps2_usb%2Fmatrix.c;h=45cf2a4a90fa87e2305bf5622e26a4d2f6bba5b0;hb=a3d96d3aa96318d339a67de1085e0ae495d57c84;hp=aa0c38c68d56067094e1122364d8efdac334f8ba;hpb=9d26053f1c14da79336a64f800305660d1a71180;p=max%2Ftmk_keyboard.git diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c index aa0c38c6..45cf2a4a 100644 --- a/converter/ps2_usb/matrix.c +++ b/converter/ps2_usb/matrix.c @@ -17,8 +17,6 @@ along with this program. If not, see . #include #include -#include -#include #include "action.h" #include "print.h" #include "util.h" @@ -29,6 +27,7 @@ along with this program. If not, see . static void matrix_make(uint8_t code); static void matrix_break(uint8_t code); +static void matrix_clear(void); #ifdef MATRIX_HAS_GHOST static bool matrix_has_ghost_in_row(uint8_t row); #endif @@ -84,6 +83,7 @@ uint8_t matrix_cols(void) void matrix_init(void) { + debug_enable = true; ps2_host_init(); // initialize matrix state: all keys off @@ -187,6 +187,7 @@ uint8_t matrix_scan(void) } uint8_t code = ps2_host_recv(); + if (code) xprintf("%i\r\n", code); if (!ps2_error) { switch (state) { case INIT: @@ -209,16 +210,18 @@ uint8_t matrix_scan(void) state = INIT; break; case 0x00: // Overrun [3]p.25 - print("Overrun\n"); + matrix_clear(); clear_keyboard(); + print("Overrun\n"); state = INIT; break; default: // normal key make if (code < 0x80) { matrix_make(code); } else { - xprintf("unexpected scan code at INIT: %02X\n", code); + matrix_clear(); clear_keyboard(); + xprintf("unexpected scan code at INIT: %02X\n", code); } state = INIT; } @@ -239,8 +242,9 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_make(code|0x80); } else { - xprintf("unexpected scan code at E0: %02X\n", code); + matrix_clear(); clear_keyboard(); + xprintf("unexpected scan code at E0: %02X\n", code); } state = INIT; } @@ -255,12 +259,18 @@ uint8_t matrix_scan(void) matrix_break(PRINT_SCREEN); state = INIT; break; + case 0xF0: + matrix_clear(); + clear_keyboard(); + xprintf("unexpected scan code at F0: F0(clear and cont.)\n"); + break; default: if (code < 0x80) { matrix_break(code); } else { - xprintf("unexpected scan code at F0: %02X\n", code); + matrix_clear(); clear_keyboard(); + xprintf("unexpected scan code at F0: %02X\n", code); } state = INIT; } @@ -275,8 +285,9 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_break(code|0x80); } else { - xprintf("unexpected scan code at E0_F0: %02X\n", code); + matrix_clear(); clear_keyboard(); + xprintf("unexpected scan code at E0_F0: %02X\n", code); } state = INIT; } @@ -369,10 +380,13 @@ uint8_t matrix_scan(void) } } - if (ps2_error > PS2_ERR_STARTBIT3) { + // TODO: request RESEND when error occurs? +/* + if (PS2_IS_FAILED(ps2_error)) { uint8_t ret = ps2_host_send(PS2_RESEND); xprintf("Resend: %02X\n", ret); } +*/ return 1; } @@ -464,3 +478,9 @@ static void matrix_break(uint8_t code) is_modified = true; } } + +inline +static void matrix_clear(void) +{ + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; +}