diff --git a/ps2d/src/controller.rs b/ps2d/src/controller.rs index 378ecb5764..1d758446be 100644 --- a/ps2d/src/controller.rs +++ b/ps2d/src/controller.rs @@ -76,9 +76,9 @@ enum MouseCommandData { } pub struct Ps2 { - pub data: Pio, - pub status: ReadOnly>, - pub command: WriteOnly> + data: Pio, + status: ReadOnly>, + command: WriteOnly> } impl Ps2 { diff --git a/ps2d/src/state.rs b/ps2d/src/state.rs index 0d33b2db2a..0ea9d62f03 100644 --- a/ps2d/src/state.rs +++ b/ps2d/src/state.rs @@ -4,7 +4,6 @@ use std::io::Write; use std::os::unix::io::AsRawFd; use std::str; use syscall; -use syscall::Io; use crate::controller::Ps2; use crate::vm; @@ -83,13 +82,13 @@ impl char> Ps2d { } } - pub fn irq(&mut self, keyboard: bool) { - self.handle(keyboard, self.ps2.data.read()); + pub fn irq(&mut self) { + while let Some((keyboard, data)) = self.ps2.next() { + self.handle(keyboard, data); + } } pub fn handle(&mut self, keyboard: bool, data: u8) { - println!("{}{:x}", if keyboard { 'k' } else { 'm' }, data); - if keyboard { let (scancode, pressed) = if data >= 0x80 { (data - 0x80, false) @@ -175,7 +174,7 @@ impl char> Ps2d { let flags = MousePacketFlags::from_bits_truncate(self.packets[0]); if ! flags.contains(ALWAYS_ON) { - panic!("ps2d: mouse misalign {:X}", self.packets[0]); + println!("ps2d: mouse misalign {:X}", self.packets[0]); self.packets = [0; 4]; self.packet_i = 0; @@ -228,7 +227,7 @@ impl char> Ps2d { }.to_event()).expect("ps2d: failed to write button event"); } } else { - panic!("ps2d: overflow {:X} {:X} {:X} {:X}", self.packets[0], self.packets[1], self.packets[2], self.packets[3]); + println!("ps2d: overflow {:X} {:X} {:X} {:X}", self.packets[0], self.packets[1], self.packets[2], self.packets[3]); } self.packets = [0; 4];