blob: 4fd0b1df4aa476d0c4e91272a2f267d2dfd6f959 (
plain) (
blame)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#ifndef DEF_DEV_KEYBOARD_H
#define DEF_DEV_KEYBOARD_H
#include <vfs/node.h>
// Control keys - arbitrary constants
#define KB_ESCAPE 1
#define KB_BACKSPACE 2
#define KB_TAB 3
#define KB_ENTER 4
#define KB_LCTRL 5
#define KB_RCTRL 6
#define KB_LSHIFT 7
#define KB_RSHIFT 8
#define KB_ALT 9
#define KB_CAPSLOCK 10
#define KB_F1 11
#define KB_F2 12
#define KB_F3 13
#define KB_F4 14
#define KB_F5 15
#define KB_F6 16
#define KB_F7 17
#define KB_F8 18
#define KB_F9 19
#define KB_F10 20
#define KB_F11 21
#define KB_F12 22
#define KB_NUMLOCK 23
#define KB_SCRLLOCK 24
#define KB_KPDEL 25 // also keypad .
#define KB_KPINS 26 // also keypad 0
#define KB_KPEND 27 // also 1
#define KB_KPDOWN 28 // also 2
#define KB_KPPGDOWN 29 // also 3
#define KB_KPLEFT 30 //...
#define KB_KP5 31
#define KB_KPRIGHT 32
#define KB_KPHOME 33
#define KB_KPUP 34
#define KB_KPPGUP 35 // also 9
#define KB_SYSREQ 36
#define KB_PRTSCN 38
#define KB_ALTGR 39
#define KB_HOME 40
#define KB_END 41
#define KB_PGUP 42
#define KB_PGDOWN 43
#define KB_INS 44
#define KB_DEL 45
#define KB_DOWN 46
#define KB_UP 47
#define KB_LEFT 48
#define KB_RIGHT 49
#define KB_LSUPER 50
#define KB_RSUPER 51
#define KB_MENU 52
#define KB_KPSLASH 53
#define KB_CMD_ALT 64 // any command with alt will have this flag
#define KB_CMD_CTRL 128 // any command with controll will have this flag
struct keypress {
bool pressed; // false = key was released
int scancode;
int command;
int character;
};
struct keymap {
int normal[128];
int shift[128];
int caps[128];
int altgr[128];
int shiftaltgr[128];
};
class vt;
class keyboard : public node {
private:
keymap* km;
vt *output;
protected:
bool num, caps, scroll;
bool shift, altgr;
bool alt, ctrl;
virtual void updateLeds() = 0;
public:
keyboard(node* parent);
virtual ~keyboard() {}
void outputTo(vt *vt);
void handle(int scancode, bool pressed);
int link(node* to, int mode);
};
#endif
|