summaryrefslogtreecommitdiff
path: root/src/mouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mouse.c')
-rw-r--r--src/mouse.c29
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;