Build Status Docs.rs Badge

ps2 mouse

This crate provides a basic interface for interacting with a ps2 mouse.

Basic Example

```rust use ps2mouse::{Mouse, MouseState}; use spinningtop::Spinlock; use x86_64::instructions::port::PortReadOnly;

pub static MOUSE: Lazy> = Lazy::new(|| Spinlock::new(Mouse::new()));

// 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());
}

} ```