From 9ae9742ac59b18cf989370f53d669daeb75bd7a3 Mon Sep 17 00:00:00 2001 From: tmk Date: Mon, 25 Nov 2013 17:43:26 +0900 Subject: Add ps2_busywait.c and recfactor PS/2 protocol --- converter/ps2_usb/matrix.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'converter/ps2_usb/matrix.c') diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c index 4187ea060..a4c27f5d5 100644 --- a/converter/ps2_usb/matrix.c +++ b/converter/ps2_usb/matrix.c @@ -19,6 +19,7 @@ along with this program. If not, see . #include #include #include +#include "action.h" #include "print.h" #include "util.h" #include "debug.h" @@ -185,8 +186,8 @@ uint8_t matrix_scan(void) matrix_break(PAUSE); } - uint8_t code; - while ((code = ps2_host_recv())) { + uint8_t code = ps2_host_recv(); + if (!ps2_error) { switch (state) { case INIT: switch (code) { @@ -207,11 +208,17 @@ uint8_t matrix_scan(void) matrix_make(PRINT_SCREEN); state = INIT; break; + case 0x00: // Overrun [3]p.25 + print("Overrun\n"); + clear_keyboard(); + state = INIT; + break; default: // normal key make if (code < 0x80) { matrix_make(code); } else { - debug("unexpected scan code at INIT: "); debug_hex(code); debug("\n"); + printf("unexpected scan code at INIT: %02X\n", code); + clear_keyboard(); } state = INIT; } @@ -232,7 +239,8 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_make(code|0x80); } else { - debug("unexpected scan code at E0: "); debug_hex(code); debug("\n"); + printf("unexpected scan code at E0: %02X\n", code); + clear_keyboard(); } state = INIT; } @@ -251,7 +259,8 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_break(code); } else { - debug("unexpected scan code at F0: "); debug_hex(code); debug("\n"); + printf("unexpected scan code at F0: %02X\n", code); + clear_keyboard(); } state = INIT; } @@ -266,7 +275,8 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_break(code|0x80); } else { - debug("unexpected scan code at E0_F0: "); debug_hex(code); debug("\n"); + printf("unexpected scan code at E0_F0: %02X\n", code); + clear_keyboard(); } state = INIT; } @@ -357,7 +367,11 @@ uint8_t matrix_scan(void) default: state = INIT; } - phex(code); + } + + if (ps2_error > PS2_ERR_STARTBIT3) { + uint8_t ret = ps2_host_send(PS2_RESEND); + printf("Resend: %02X\n", ret); } return 1; } -- cgit v1.2.3 From 9d26053f1c14da79336a64f800305660d1a71180 Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 26 Nov 2013 14:31:57 +0900 Subject: Fix ps2_host_recv_response --- converter/ps2_usb/matrix.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'converter/ps2_usb/matrix.c') diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c index a4c27f5d5..aa0c38c68 100644 --- a/converter/ps2_usb/matrix.c +++ b/converter/ps2_usb/matrix.c @@ -217,7 +217,7 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_make(code); } else { - printf("unexpected scan code at INIT: %02X\n", code); + xprintf("unexpected scan code at INIT: %02X\n", code); clear_keyboard(); } state = INIT; @@ -239,7 +239,7 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_make(code|0x80); } else { - printf("unexpected scan code at E0: %02X\n", code); + xprintf("unexpected scan code at E0: %02X\n", code); clear_keyboard(); } state = INIT; @@ -259,7 +259,7 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_break(code); } else { - printf("unexpected scan code at F0: %02X\n", code); + xprintf("unexpected scan code at F0: %02X\n", code); clear_keyboard(); } state = INIT; @@ -275,7 +275,7 @@ uint8_t matrix_scan(void) if (code < 0x80) { matrix_break(code|0x80); } else { - printf("unexpected scan code at E0_F0: %02X\n", code); + xprintf("unexpected scan code at E0_F0: %02X\n", code); clear_keyboard(); } state = INIT; @@ -371,7 +371,7 @@ uint8_t matrix_scan(void) if (ps2_error > PS2_ERR_STARTBIT3) { uint8_t ret = ps2_host_send(PS2_RESEND); - printf("Resend: %02X\n", ret); + xprintf("Resend: %02X\n", ret); } return 1; } -- cgit v1.2.3 From 10b2b1ae431b31b2ae29228dcaccb5ea292bbf9a Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 28 Nov 2013 15:50:17 +0900 Subject: Fix key stack and PS/2 Overrun --- converter/ps2_usb/matrix.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'converter/ps2_usb/matrix.c') diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c index aa0c38c68..45344c0f7 100644 --- a/converter/ps2_usb/matrix.c +++ b/converter/ps2_usb/matrix.c @@ -29,6 +29,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 +85,7 @@ uint8_t matrix_cols(void) void matrix_init(void) { + debug_enable = true; ps2_host_init(); // initialize matrix state: all keys off @@ -209,16 +211,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 +243,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 +260,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 +286,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 +381,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 +479,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; +} -- cgit v1.2.3