diff options
Diffstat (limited to 'src/mouse.c')
-rw-r--r-- | src/mouse.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/mouse.c b/src/mouse.c index c7708ae..ea7a3ea 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -76,6 +76,14 @@ static void set_sample_rate( mouse_t *mouse, uint8_t samples ) read_ack( mouse ); } +static mouse_vtable_t mouse_vtable = { + { + mouse_activate, + mouse_deactivate, + mouse_deinit + } +}; + void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, void *context ) { memset( mouse, 0, sizeof( mouse_t ) ); @@ -95,6 +103,15 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, void *context ) port8_init( &mouse->command_port, 0x64 ); port8_init( &mouse->data_port, 0x60 ); + mouse->base.vtable = &mouse_vtable.base; +} + +void mouse_activate( void *obj ) +{ + puts( "Activating driver for PS/2 mouse.." ); + + mouse_t *mouse = obj; + // enable port 2 send_command( mouse, COMMAND_ENABLE_PORT2 ); @@ -129,12 +146,20 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, void *context ) read_ack( mouse ); } -void mouse_deinit( mouse_t *mouse ) +void mouse_deactivate( void *obj ) { - // disable mouse on second port + puts( "Dectivating driver for PS/2 mouse.." ); + + mouse_t *mouse = obj; + send_command( mouse, COMMAND_DISABLE_PORT2 ); } +void mouse_deinit( void *obj ) +{ + // nothing to do +} + uint32_t mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) { mouse_t *mouse = (mouse_t *)handler->driver; |