diff options
Diffstat (limited to 'src/drivers/hdi/ps2/mouse.h')
-rw-r--r-- | src/drivers/hdi/ps2/mouse.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/drivers/hdi/ps2/mouse.h b/src/drivers/hdi/ps2/mouse.h new file mode 100644 index 0000000..cbd02ef --- /dev/null +++ b/src/drivers/hdi/ps2/mouse.h @@ -0,0 +1,65 @@ +#ifndef MOUSE_H +#define MOUSE_H + +#include "string.h" + +#include "interrupts.h" +#include "port.h" + +#include "driver.h" + +#define MAX_NOF_MOUSE_PACKETS 5 + +typedef enum { + MOUSE_EVENT_TYPE_BUTTON_UP, + MOUSE_EVENT_TYPE_BUTTON_DOWN, + MOUSE_EVENT_TYPE_MOVE +} mouse_event_type_t; + +typedef enum { + MOUSE_BUTTON_LEFT = 1, + MOUSE_BUTTON_RIGHT = 2, + MOUSE_BUTTON_MIDDLE = 3 +} mouse_button_t; + +typedef struct { + mouse_event_type_t type; + mouse_button_t button; + int32_t old_cursor_x; + int32_t old_cursor_y; + int32_t cursor_x; + int32_t cursor_y; +} mouse_event_t; + +typedef void (*mouse_event_handler_t)( mouse_event_t *event, void *context ); + +typedef struct { + driver_t base; + interrupt_t *interrupts; + port8_t command_port; + port8_t data_port; + int nof_packets; // 3 or more mouse packets + uint8_t buf[MAX_NOF_MOUSE_PACKETS]; + uint8_t buttons; + uint8_t offset; + uint32_t res_x; + uint32_t res_y; + int32_t cursor_x; + int32_t cursor_y; + mouse_event_handler_t handler; + void *context; +} mouse_t; + +typedef struct { + driver_vtable_t base; +} mouse_vtable_t; + +void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, void *context ); +void mouse_activate( void *obj ); +void mouse_deactivate( void *obj ); +void mouse_deinit( void *obj ); +void mouse_print_info( void *obj ); + +uint32_t mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); + +#endif // MOUSE_H |