Improvements to ps2 mouse init

This commit is contained in:
Jeremy Soller
2022-09-08 09:55:06 -06:00
parent 2751d7d792
commit 49ba91b0ee
+18 -8
View File
@@ -110,7 +110,7 @@ impl Ps2 {
}
fn wait_write(&mut self) -> Result<(), Error> {
let mut timeout = 100_000;
let mut timeout = 1_000;
while self.status().contains(StatusFlags::INPUT_FULL) {
if timeout <= 0 {
return Err(Error::WriteTimeout);
@@ -121,7 +121,7 @@ impl Ps2 {
}
fn wait_read(&mut self) -> Result<(), Error> {
let mut timeout = 100_000;
let mut timeout = 1_000;
while ! self.status().contains(StatusFlags::OUTPUT_FULL) {
if timeout <= 0 {
return Err(Error::ReadTimeout);
@@ -132,8 +132,12 @@ impl Ps2 {
}
fn flush_read(&mut self, message: &str) {
while self.status().contains(StatusFlags::OUTPUT_FULL) {
eprintln!("ps2d: flush {}: {:X}", message, self.data.read());
let mut timeout = 1_000;
while timeout > 0 {
if self.status().contains(StatusFlags::OUTPUT_FULL) {
eprintln!("ps2d: flush {}: {:X}", message, self.data.read());
}
timeout -= 1;
}
}
@@ -328,27 +332,30 @@ impl Ps2 {
format_args!("mouse reset"),
4,
|x| {
// Clear remaining data
x.flush_read("mouse before reset");
// Reset mouse
let mut b = x.mouse_command(MouseCommand::Reset)?;
if b == 0xFA {
b = x.read()?;
if b != 0xAA {
eprintln!("ps2d: mouse failed self test 1: {:02X}", b);
//return Err(Error::CommandRetry);
return Err(Error::CommandRetry);
}
b = x.read()?;
if b != 0x00 {
eprintln!("ps2d: mouse failed self test 2: {:02X}", b);
//return Err(Error::CommandRetry);
return Err(Error::CommandRetry);
}
} else {
eprintln!("ps2d: mouse failed to reset: {:02X}", b);
//return Err(Error::CommandRetry);
return Err(Error::CommandRetry);
}
// Clear remaining data
x.flush_read("mouse reset");
x.flush_read("mouse after reset");
Ok(b)
}
@@ -386,6 +393,9 @@ impl Ps2 {
false
};
// Clear remaining data
self.flush_read("get device id");
{
// Set sample rate to maximum
let sample_rate = 200;