diff options
Diffstat (limited to 'src/keyboard.c')
-rw-r--r-- | src/keyboard.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 2b2ac71..053b721 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -64,6 +64,14 @@ static void read_ack( keyboard_t *keyboard ) } */ +static keyboard_vtable_t keyboard_vtable = { + { + keyboard_activate, + keyboard_deactivate, + keyboard_deinit + } +}; + void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, void *context ) { memset( keyboard, 0, sizeof( keyboard_t ) ); @@ -74,7 +82,16 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, void keyboard->shift = false; keyboard->handler = handler; keyboard->context = context; - + + keyboard->base.vtable = &keyboard_vtable.base; +} + +void keyboard_activate( void *obj ) +{ + puts( "Activating driver for PS/2 keyboard.." ); + + keyboard_t *keyboard = obj; + // first switch off port 1 send_command( keyboard, COMMAND_DISABLE_PORT1 ); @@ -107,11 +124,20 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, void send_command( keyboard, COMMAND_ENABLE_PORT1 ); } -void keyboard_deinit( keyboard_t *keyboard ) +void keyboard_deactivate( void *obj ) { + puts( "Deactivating driver for PS/2 keyboard.." ); + + keyboard_t *keyboard = obj; + send_command( keyboard, COMMAND_DISABLE_PORT1 ); } +void keyboard_deinit( void *obj ) +{ + // nothing to do +} + typedef enum { KEYCODE_UNKNOWN, KEYCODE_ASCII_CHAR |