1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#ifndef KEYBOARD_H
#define KEYBOARD_H
#include <stdbool.h>
#include "string.h"
#include "interrupts.h"
#include "port.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;
interrupt_t *interrupts;
port8_t command_port;
port8_t data_port;
bool shift;
keyboard_event_handler_t handler;
interrupt_handler_t interrupt_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_info( void *obj );
uint32_t keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t esp );
#endif // KEYBOARD_H
|