#ifndef KEYBOARD_H #define KEYBOARD_H #include "driver.h" typedef enum { KEYBOARD_EVENT_TYPE_KEY_PRESSED, KEYBOARD_EVENT_TYPE_KEY_RELEASED } keyboard_event_type_t; typedef enum { KEYBOARD_MODIFIER_SHIFT = 0x01, KEYBOARD_MODIFIER_CTRL = 0x02, KEYBOARD_MODIFIER_ALT = 0x04 } keyboard_modifier_mask_t; typedef enum { KEYBOARD_KEY_UNKNOWN, KEYBOARD_KEY_ASCII, KEYBOARD_KEY_ESC, KEYBOARD_KEY_TAB, KEYBOARD_KEY_INS, KEYBAORD_KEY_DEL, KEYBAORD_KEY_BACKSPACE, KEYBAORD_CURSOR_LEFT, KEYBOARD_CURSOR_RIGHT, KEYBOARD_CURSOR_UP, KEYBOARD_CURSOR_DOWN } keyboard_key_t; typedef struct { keyboard_event_type_t type; keyboard_modifier_mask_t modifiers; keyboard_key_t key; char ascii_key; } keyboard_event_t; typedef void (*keyboard_event_handler_t)( keyboard_event_t *event, void *context ); typedef struct { driver_t base; keyboard_event_handler_t handler; } keyboard_t; typedef struct { driver_vtable_t base; } keyboard_vtable_t; void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, interrupt_t *interrupt, void *context ); void keyboard_activate( void *obj ); void keyboard_deactivate( void *obj ); void keyboard_deinit( void *obj ); void keyboard_print_name( void *obj ); void keyboard_print_info( void *obj ); #endif // KEYBOARD_H