mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 20: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) {
|
||||
__assert(device_write_response(port, DEVICE_CMD_IDENTIFY) == ACK);
|
||||
|
||||
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;
|
||||
@@ -77,6 +83,8 @@ static void mouseisr() {
|
||||
|
||||
|
||||
void ps2mouse_init() {
|
||||
inb(PS2_PORT_DATA);
|
||||
|
||||
if (identify(2) != MOUSE) {
|
||||
printf("Not a mouse!\n");
|
||||
return;
|
||||
|
||||
@@ -89,9 +89,10 @@ static inline uint8_t device_write_response(int port, uint8_t command) {
|
||||
uint8_t r = RESEND;
|
||||
int tries = 0;
|
||||
|
||||
while (r == RESEND && tries-- < 5) {
|
||||
while (r == RESEND && tries < 5) {
|
||||
device_command(port, command);
|
||||
r = read_data();
|
||||
++tries;
|
||||
}
|
||||
|
||||
return r;
|
||||
|
||||
Reference in New Issue
Block a user