summaryrefslogtreecommitdiff
path: root/src/drivers/hdi/keyboard.h
blob: aab7383282d571d55aa14d981776fd1ff20a13a8 (plain)
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
#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_info( void *obj );

#endif // KEYBOARD_H