Fix ps2_host_recv_response
This commit is contained in:
parent
9ae9742ac5
commit
9d26053f1c
@ -40,10 +40,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#define println(s) print_P(PSTR(s "\n"))
|
#define println(s) print_P(PSTR(s "\n"))
|
||||||
|
|
||||||
#ifndef AVR_LIBC_PRINTF
|
|
||||||
#define printf(f, ...) xprintf(f, ##__VA_ARGS__)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* for old name */
|
/* for old name */
|
||||||
#define pdec(data) print_dec(data)
|
#define pdec(data) print_dec(data)
|
||||||
#define pdec16(data) print_dec(data)
|
#define pdec16(data) print_dec(data)
|
||||||
|
@ -217,7 +217,7 @@ uint8_t matrix_scan(void)
|
|||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
matrix_make(code);
|
matrix_make(code);
|
||||||
} else {
|
} else {
|
||||||
printf("unexpected scan code at INIT: %02X\n", code);
|
xprintf("unexpected scan code at INIT: %02X\n", code);
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
}
|
}
|
||||||
state = INIT;
|
state = INIT;
|
||||||
@ -239,7 +239,7 @@ uint8_t matrix_scan(void)
|
|||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
matrix_make(code|0x80);
|
matrix_make(code|0x80);
|
||||||
} else {
|
} else {
|
||||||
printf("unexpected scan code at E0: %02X\n", code);
|
xprintf("unexpected scan code at E0: %02X\n", code);
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
}
|
}
|
||||||
state = INIT;
|
state = INIT;
|
||||||
@ -259,7 +259,7 @@ uint8_t matrix_scan(void)
|
|||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
matrix_break(code);
|
matrix_break(code);
|
||||||
} else {
|
} else {
|
||||||
printf("unexpected scan code at F0: %02X\n", code);
|
xprintf("unexpected scan code at F0: %02X\n", code);
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
}
|
}
|
||||||
state = INIT;
|
state = INIT;
|
||||||
@ -275,7 +275,7 @@ uint8_t matrix_scan(void)
|
|||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
matrix_break(code|0x80);
|
matrix_break(code|0x80);
|
||||||
} else {
|
} else {
|
||||||
printf("unexpected scan code at E0_F0: %02X\n", code);
|
xprintf("unexpected scan code at E0_F0: %02X\n", code);
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
}
|
}
|
||||||
state = INIT;
|
state = INIT;
|
||||||
@ -371,7 +371,7 @@ uint8_t matrix_scan(void)
|
|||||||
|
|
||||||
if (ps2_error > PS2_ERR_STARTBIT3) {
|
if (ps2_error > PS2_ERR_STARTBIT3) {
|
||||||
uint8_t ret = ps2_host_send(PS2_RESEND);
|
uint8_t ret = ps2_host_send(PS2_RESEND);
|
||||||
printf("Resend: %02X\n", ret);
|
xprintf("Resend: %02X\n", ret);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,7 @@ uint8_t ps2_host_send(uint8_t data)
|
|||||||
WAIT(clock_hi, 50, 8);
|
WAIT(clock_hi, 50, 8);
|
||||||
WAIT(data_hi, 50, 9);
|
WAIT(data_hi, 50, 9);
|
||||||
|
|
||||||
|
inhibit();
|
||||||
res = ps2_host_recv_response();
|
res = ps2_host_recv_response();
|
||||||
ERROR:
|
ERROR:
|
||||||
inhibit();
|
inhibit();
|
||||||
@ -113,12 +114,14 @@ ERROR:
|
|||||||
/* receive data when host want else inhibit communication */
|
/* receive data when host want else inhibit communication */
|
||||||
uint8_t ps2_host_recv_response(void)
|
uint8_t ps2_host_recv_response(void)
|
||||||
{
|
{
|
||||||
// TODO:
|
|
||||||
// Command might take 20ms to response([3]p.21)
|
// Command might take 20ms to response([3]p.21)
|
||||||
// TrackPoint might take 25ms ([5]2.7)
|
// TrackPoint might take 25ms ([5]2.7)
|
||||||
|
// 250 * 100us(wait for start bit in ps2_host_recv)
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
uint8_t try = 200;
|
uint8_t try = 250;
|
||||||
while (try-- && (data = ps2_host_recv())) ;
|
do {
|
||||||
|
data = ps2_host_recv();
|
||||||
|
} while (try-- && ps2_error);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +175,7 @@ uint8_t ps2_host_recv(void)
|
|||||||
return data;
|
return data;
|
||||||
ERROR:
|
ERROR:
|
||||||
if (ps2_error > PS2_ERR_STARTBIT3) {
|
if (ps2_error > PS2_ERR_STARTBIT3) {
|
||||||
printf("x%02X\n", ps2_error);
|
xprintf("x%02X\n", ps2_error);
|
||||||
}
|
}
|
||||||
inhibit();
|
inhibit();
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user