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