summaryrefslogtreecommitdiff
path: root/Source/Kernel/DeviceManager/Kbd.ns.h
blob: 50cd7462cfdde6004db68fbc73fa741613d7c6da (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
#ifndef DEF_KBD_NS_H
#define DEF_KBD_NS_H

#include <Core/common.wtf.h>
#include <Library/WChar.class.h>

//Used by variable kbdstatus
#define STATUS_SCRL 0x40
#define STATUS_NUM  0x20
#define STATUS_CAPS 0x10
#define STATUS_SHIFT 0x08
#define STATUS_CTRL 0x04
#define STATUS_ALT  0x02
#define STATUS_ALTGR 0x01

//Used in control keys keymap. The ones > 100 are modifiers and are not supposed to be sent to applications.
#define KBDC_LEFTCTRL 101
#define KBDC_RIGHTCTRL 102
#define KBDC_ALT 103
#define KBDC_ALTGR 104
#define KBDC_LEFTSUP 5	//Super = windows
#define KBDC_RIGHTSUP 6
#define KBDC_MENU 7
#define KBDC_LEFTSHIFT 108
#define KBDC_RIGHTSHIFT 109
#define KBDC_CAPSLOCK 110
#define KBDC_TAB 11
#define KBDC_ENTER 12
#define KBDC_BACKSPACE 13

#define KBDC_KPINSERT 14		//Key 0/insert
#define KBDC_KPEND 15			//Key 1/end
#define KBDC_KPDOWN 16			//Key 2/down
#define KBDC_KPPGDOWN 17		//Key 3/pgdown
#define KBDC_KPLEFT 18			//Key 4/left
#define KBDC_KP5 19				//Key 5			this is sent to receiving application, but must be ignored
#define KBDC_KPRIGHT 20			//Key 6/right
#define KBDC_KPHOME 21			//Key 7/home
#define KBDC_KPUP 22			//Key 8/up
#define KBDC_KPPGUP 23			//Key 9/pgup
#define KBDC_KPDEL 24			//Key ./del

#define KBDC_HOME 25
#define KBDC_END 26
#define KBDC_INSERT 27
#define KBDC_DEL 28
#define KBDC_PGUP 29
#define KBDC_PGDOWN 30
#define KBDC_UP 31
#define KBDC_DOWN 32
#define KBDC_LEFT 33
#define KBDC_RIGHT 34

#define KBDC_NUMLOCK 135
#define KBDC_SCRLLOCK 136
#define KBDC_PRTSCN 37		//Print screen
#define KBDC_SYSREQ 38

#define KBDC_ESCAPE 40
#define KBDC_F1 41
#define KBDC_F2 42
#define KBDC_F3 43
#define KBDC_F4 44
#define KBDC_F5 45
#define KBDC_F6 46
#define KBDC_F7 47
#define KBDC_F8 48
#define KBDC_F9 49
#define KBDC_F10 50
#define KBDC_F11 51
#define KBDC_F12 52

//This is a special case. Keycode is escaped, Keyboard:: will send a 0xB5 keycode, that must not be mixed up with 0x35
#define KBDC_KPSLASH 53

class VirtualTerminal;

namespace Kbd {
	//== Possible cases for keypress_t :
	// - hascmd && !haschar : this is a command key press/release (all grey keys except alt/ctrl/altgr/shift)
	// - haschar && !hascmd : this is a character key press/release. Modifiers can haz STATUS_SHIFT or STATUS_ALTGR
	// - haschar && hascmd : this is a character key press, but with ctrl and/or alt. See that in modifiers.
	// - !haschar && !hascmd : invalid keypress
	struct keypress_t {
		bool pressed;
		bool hascmd;
		bool haschar;
		u8int modifiers;
		u8int command;	
		WChar character; //is 0 if !haschar
		keypress_t() : hascmd(false), haschar(false), command(0), character('\0') {};
	};

	void setFocus(VirtualTerminal* vt);
	bool loadKeymap(String lang);
	void updateLeds();
	void keyPress(u8int scancode);
	void keyRelease(u8int scancode);
}

#endif