This crate provides a basic interface for interacting with a ps2 mouse.
```rust use ps2mouse::{Mouse, MouseState}; use spinningtop::Spinlock; use x86_64::instructions::port::PortReadOnly;
pub static MOUSE: Lazy
// Initialize the mouse and set the on complete event. fn initmouse() { MOUSE.lock().init().unwrap(); MOUSE.lock().seton_complete(test); }
// This will be fired when a packet is finished being processed. fn oncomplete(mousestate: MouseState) { println!("{:?}", mouse_state); }
// An example interrupt based on https://os.phil-opp.com/hardware-interrupts/. The ps2 mouse is configured to fire // interrupts at PIC offset 12. extern "x86-interrupt" fn mouseinterrupthandler(stackframe: &mut InterruptStackFrame) { let mut port = PortReadOnly::new(0x60); let packet = unsafe { port.read() }; MOUSE.lock().process_packet(packet);
unsafe {
PICS.lock()
.notify_end_of_interrupt(InterruptIndex::Mouse.into());
}
} ```