mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
ps2: fix real hw
This commit is contained in:
@@ -18,13 +18,19 @@ static void mouse_setrate(int port, uint8_t rate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t identify(int port) {
|
static uint8_t identify(int port) {
|
||||||
__assert(device_write_response(port, DEVICE_CMD_IDENTIFY) == ACK);
|
|
||||||
|
|
||||||
bool timeout;
|
bool timeout;
|
||||||
uint8_t b = read_data_timeout(5, &timeout);
|
|
||||||
__assert(!timeout);
|
|
||||||
|
|
||||||
return b;
|
device_command(port, DEVICE_CMD_IDENTIFY);
|
||||||
|
uint8_t b = read_data_timeout(5, &timeout);
|
||||||
|
|
||||||
|
if (b != ACK) {
|
||||||
|
printf("ps2mouse: identify failed: %x\n", b);
|
||||||
|
return RESEND;
|
||||||
|
}
|
||||||
|
|
||||||
|
b = read_data_timeout(5, &timeout);
|
||||||
|
|
||||||
|
return timeout ? RESEND : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int datac;
|
static int datac;
|
||||||
@@ -77,6 +83,8 @@ static void mouseisr() {
|
|||||||
|
|
||||||
|
|
||||||
void ps2mouse_init() {
|
void ps2mouse_init() {
|
||||||
|
inb(PS2_PORT_DATA);
|
||||||
|
|
||||||
if (identify(2) != MOUSE) {
|
if (identify(2) != MOUSE) {
|
||||||
printf("Not a mouse!\n");
|
printf("Not a mouse!\n");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -89,9 +89,10 @@ static inline uint8_t device_write_response(int port, uint8_t command) {
|
|||||||
uint8_t r = RESEND;
|
uint8_t r = RESEND;
|
||||||
int tries = 0;
|
int tries = 0;
|
||||||
|
|
||||||
while (r == RESEND && tries-- < 5) {
|
while (r == RESEND && tries < 5) {
|
||||||
device_command(port, command);
|
device_command(port, command);
|
||||||
r = read_data();
|
r = read_data();
|
||||||
|
++tries;
|
||||||
}
|
}
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
|||||||
Reference in New Issue
Block a user