codec: use the CODEC_ID_* names instead of magic numbers
[platform/upstream/freerdp.git] / include / freerdp / keyboard_scancode.h
1 /**
2  * FreeRDP: A Remote Desktop Protocol Implementation
3  * RDP protocol "scancodes"
4  *
5  * Copyright 2009-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #ifndef __FREERDP_LOCALE_KEYBOARD_RDP_SCANCODE_H
21 #define __FREERDP_LOCALE_KEYBOARD_RDP_SCANCODE_H
22
23 /* @msdn{cc240584} says:
24  * "... (a scancode is an 8-bit value specifying a key location on the keyboard).
25  * The server accepts a scancode value and translates it into the correct character depending on the language locale and keyboard layout used in the session."
26  * The 8-bit value is later called "keyCode"
27  * The extended flag is for all practical an important 9th bit with a strange encoding - not just a modifier.
28  */
29
30 typedef uint32 RDP_SCANCODE;    /* Our own representation of a RDP protocol scancode */
31 #define rdp_scancode_code(_rdp_scancode) ((uint8)(_rdp_scancode & 0xff))
32 #define rdp_scancode_extended(_rdp_scancode) (((_rdp_scancode) & 0x100) ? true : false)
33 #define mk_rdp_scancode(_code, _extended) (((_code) & 0xff) | ((_extended) ? 0x100 : 0))
34
35
36 /* Defines for known RDP_SCANCODE protocol values.
37  * Mostly the same as the PKBDLLHOOKSTRUCT scanCode, "A hardware scan code for the key", @msdn{ms644967}.
38  * Based @msdn{ms894073} US, @msdn{ms894072} UK, @msdn{ms892472} */
39
40 #define RDP_SCANCODE_UNKNOWN       mk_rdp_scancode(0x00, false)
41
42 #define RDP_SCANCODE_ESCAPE        mk_rdp_scancode(0x01, false) /* VK_ESCAPE */
43 #define RDP_SCANCODE_KEY_1         mk_rdp_scancode(0x02, false) /* VK_KEY_1 */
44 #define RDP_SCANCODE_KEY_2         mk_rdp_scancode(0x03, false) /* VK_KEY_2 */
45 #define RDP_SCANCODE_KEY_3         mk_rdp_scancode(0x04, false) /* VK_KEY_3 */
46 #define RDP_SCANCODE_KEY_4         mk_rdp_scancode(0x05, false) /* VK_KEY_4 */
47 #define RDP_SCANCODE_KEY_5         mk_rdp_scancode(0x06, false) /* VK_KEY_5 */
48 #define RDP_SCANCODE_KEY_6         mk_rdp_scancode(0x07, false) /* VK_KEY_6 */
49 #define RDP_SCANCODE_KEY_7         mk_rdp_scancode(0x08, false) /* VK_KEY_7 */
50 #define RDP_SCANCODE_KEY_8         mk_rdp_scancode(0x09, false) /* VK_KEY_8 */
51 #define RDP_SCANCODE_KEY_9         mk_rdp_scancode(0x0A, false) /* VK_KEY_9 */
52 #define RDP_SCANCODE_KEY_0         mk_rdp_scancode(0x0B, false) /* VK_KEY_0 */
53 #define RDP_SCANCODE_OEM_MINUS     mk_rdp_scancode(0x0C, false) /* VK_OEM_MINUS */
54 #define RDP_SCANCODE_OEM_PLUS      mk_rdp_scancode(0x0D, false) /* VK_OEM_PLUS */
55 #define RDP_SCANCODE_BACKSPACE     mk_rdp_scancode(0x0E, false) /* VK_BACK Backspace */
56 #define RDP_SCANCODE_TAB           mk_rdp_scancode(0x0F, false) /* VK_TAB */
57 #define RDP_SCANCODE_KEY_Q         mk_rdp_scancode(0x10, false) /* VK_KEY_Q */
58 #define RDP_SCANCODE_KEY_W         mk_rdp_scancode(0x11, false) /* VK_KEY_W */
59 #define RDP_SCANCODE_KEY_E         mk_rdp_scancode(0x12, false) /* VK_KEY_E */
60 #define RDP_SCANCODE_KEY_R         mk_rdp_scancode(0x13, false) /* VK_KEY_R */
61 #define RDP_SCANCODE_KEY_T         mk_rdp_scancode(0x14, false) /* VK_KEY_T */
62 #define RDP_SCANCODE_KEY_Y         mk_rdp_scancode(0x15, false) /* VK_KEY_Y */
63 #define RDP_SCANCODE_KEY_U         mk_rdp_scancode(0x16, false) /* VK_KEY_U */
64 #define RDP_SCANCODE_KEY_I         mk_rdp_scancode(0x17, false) /* VK_KEY_I */
65 #define RDP_SCANCODE_KEY_O         mk_rdp_scancode(0x18, false) /* VK_KEY_O */
66 #define RDP_SCANCODE_KEY_P         mk_rdp_scancode(0x19, false) /* VK_KEY_P */
67 #define RDP_SCANCODE_OEM_4         mk_rdp_scancode(0x1A, false) /* VK_OEM_4 '[' on US */
68 #define RDP_SCANCODE_OEM_6         mk_rdp_scancode(0x1B, false) /* VK_OEM_6 ']' on US */
69 #define RDP_SCANCODE_RETURN        mk_rdp_scancode(0x1C, false) /* VK_RETURN Normal Enter */
70 #define RDP_SCANCODE_LCONTROL      mk_rdp_scancode(0x1D, false) /* VK_LCONTROL */
71 #define RDP_SCANCODE_KEY_A         mk_rdp_scancode(0x1E, false) /* VK_KEY_A */
72 #define RDP_SCANCODE_KEY_S         mk_rdp_scancode(0x1F, false) /* VK_KEY_S */
73 #define RDP_SCANCODE_KEY_D         mk_rdp_scancode(0x20, false) /* VK_KEY_D */
74 #define RDP_SCANCODE_KEY_F         mk_rdp_scancode(0x21, false) /* VK_KEY_F */
75 #define RDP_SCANCODE_KEY_G         mk_rdp_scancode(0x22, false) /* VK_KEY_G */
76 #define RDP_SCANCODE_KEY_H         mk_rdp_scancode(0x23, false) /* VK_KEY_H */
77 #define RDP_SCANCODE_KEY_J         mk_rdp_scancode(0x24, false) /* VK_KEY_J */
78 #define RDP_SCANCODE_KEY_K         mk_rdp_scancode(0x25, false) /* VK_KEY_K */
79 #define RDP_SCANCODE_KEY_L         mk_rdp_scancode(0x26, false) /* VK_KEY_L */
80 #define RDP_SCANCODE_OEM_1         mk_rdp_scancode(0x27, false) /* VK_OEM_1 ';' on US */
81 #define RDP_SCANCODE_OEM_7         mk_rdp_scancode(0x28, false) /* VK_OEM_7 "'" on US */
82 #define RDP_SCANCODE_OEM_3         mk_rdp_scancode(0x29, false) /* VK_OEM_3 Top left, '`' on US, JP DBE_SBCSCHAR */
83 #define RDP_SCANCODE_LSHIFT        mk_rdp_scancode(0x2A, false) /* VK_LSHIFT */
84 #define RDP_SCANCODE_OEM_5         mk_rdp_scancode(0x2B, false) /* VK_OEM_5 Next to Enter, '\' on US */
85 #define RDP_SCANCODE_KEY_Z         mk_rdp_scancode(0x2C, false) /* VK_KEY_Z */
86 #define RDP_SCANCODE_KEY_X         mk_rdp_scancode(0x2D, false) /* VK_KEY_X */
87 #define RDP_SCANCODE_KEY_C         mk_rdp_scancode(0x2E, false) /* VK_KEY_C */
88 #define RDP_SCANCODE_KEY_V         mk_rdp_scancode(0x2F, false) /* VK_KEY_V */
89 #define RDP_SCANCODE_KEY_B         mk_rdp_scancode(0x30, false) /* VK_KEY_B */
90 #define RDP_SCANCODE_KEY_N         mk_rdp_scancode(0x31, false) /* VK_KEY_N */
91 #define RDP_SCANCODE_KEY_M         mk_rdp_scancode(0x32, false) /* VK_KEY_M */
92 #define RDP_SCANCODE_OEM_COMMA     mk_rdp_scancode(0x33, false) /* VK_OEM_COMMA */
93 #define RDP_SCANCODE_OEM_PERIOD    mk_rdp_scancode(0x34, false) /* VK_OEM_PERIOD */
94 #define RDP_SCANCODE_OEM_2         mk_rdp_scancode(0x35, false) /* VK_OEM_2 '/' on US */
95 #define RDP_SCANCODE_RSHIFT        mk_rdp_scancode(0x36, false) /* VK_RSHIFT */
96 #define RDP_SCANCODE_MULTIPLY      mk_rdp_scancode(0x37, false) /* VK_MULTIPLY Numerical */
97 #define RDP_SCANCODE_LMENU         mk_rdp_scancode(0x38, false) /* VK_LMENU Left 'Alt' key */
98 #define RDP_SCANCODE_SPACE         mk_rdp_scancode(0x39, false) /* VK_SPACE */
99 #define RDP_SCANCODE_CAPSLOCK      mk_rdp_scancode(0x3A, false) /* VK_CAPITAL 'Caps Lock', JP DBE_ALPHANUMERIC */
100 #define RDP_SCANCODE_F1            mk_rdp_scancode(0x3B, false) /* VK_F1 */
101 #define RDP_SCANCODE_F2            mk_rdp_scancode(0x3C, false) /* VK_F2 */
102 #define RDP_SCANCODE_F3            mk_rdp_scancode(0x3D, false) /* VK_F3 */
103 #define RDP_SCANCODE_F4            mk_rdp_scancode(0x3E, false) /* VK_F4 */
104 #define RDP_SCANCODE_F5            mk_rdp_scancode(0x3F, false) /* VK_F5 */
105 #define RDP_SCANCODE_F6            mk_rdp_scancode(0x40, false) /* VK_F6 */
106 #define RDP_SCANCODE_F7            mk_rdp_scancode(0x41, false) /* VK_F7 */
107 #define RDP_SCANCODE_F8            mk_rdp_scancode(0x42, false) /* VK_F8 */
108 #define RDP_SCANCODE_F9            mk_rdp_scancode(0x43, false) /* VK_F9 */
109 #define RDP_SCANCODE_F10           mk_rdp_scancode(0x44, false) /* VK_F10 */
110 #define RDP_SCANCODE_NUMLOCK       mk_rdp_scancode(0x45, false) /* VK_NUMLOCK */ /* Note: when this seems to appear in PKBDLLHOOKSTRUCT it means Pause which must be sent as Ctrl + NumLock */
111 #define RDP_SCANCODE_SCROLLLOCK    mk_rdp_scancode(0x46, false) /* VK_SCROLL 'Scroll Lock', JP OEM_SCROLL */
112 #define RDP_SCANCODE_NUMPAD7       mk_rdp_scancode(0x47, false) /* VK_NUMPAD7 */
113 #define RDP_SCANCODE_NUMPAD8       mk_rdp_scancode(0x48, false) /* VK_NUMPAD8 */
114 #define RDP_SCANCODE_NUMPAD9       mk_rdp_scancode(0x49, false) /* VK_NUMPAD9 */
115 #define RDP_SCANCODE_SUBTRACT      mk_rdp_scancode(0x4A, false) /* VK_SUBTRACT */
116 #define RDP_SCANCODE_NUMPAD4       mk_rdp_scancode(0x4B, false) /* VK_NUMPAD4 */
117 #define RDP_SCANCODE_NUMPAD5       mk_rdp_scancode(0x4C, false) /* VK_NUMPAD5 */
118 #define RDP_SCANCODE_NUMPAD6       mk_rdp_scancode(0x4D, false) /* VK_NUMPAD6 */
119 #define RDP_SCANCODE_ADD           mk_rdp_scancode(0x4E, false) /* VK_ADD */
120 #define RDP_SCANCODE_NUMPAD1       mk_rdp_scancode(0x4F, false) /* VK_NUMPAD1 */
121 #define RDP_SCANCODE_NUMPAD2       mk_rdp_scancode(0x50, false) /* VK_NUMPAD2 */
122 #define RDP_SCANCODE_NUMPAD3       mk_rdp_scancode(0x51, false) /* VK_NUMPAD3 */
123 #define RDP_SCANCODE_NUMPAD0       mk_rdp_scancode(0x52, false) /* VK_NUMPAD0 */
124 #define RDP_SCANCODE_DECIMAL       mk_rdp_scancode(0x53, false) /* VK_DECIMAL Numerical, '.' on US */
125 #define RDP_SCANCODE_SYSREQ        mk_rdp_scancode(0x54, false) /* Sys Req */
126 #define RDP_SCANCODE_OEM_102       mk_rdp_scancode(0x56, false) /* VK_OEM_102 Lower left '\' on US */
127 #define RDP_SCANCODE_F11           mk_rdp_scancode(0x57, false) /* VK_F11 */
128 #define RDP_SCANCODE_F12           mk_rdp_scancode(0x58, false) /* VK_F12 */
129 #define RDP_SCANCODE_SLEEP         mk_rdp_scancode(0x5F, false) /* VK_SLEEP OEM_8 on FR (undocumented?) */
130 #define RDP_SCANCODE_ZOOM          mk_rdp_scancode(0x62, false) /* VK_ZOOM (undocumented?) */
131 #define RDP_SCANCODE_HELP          mk_rdp_scancode(0x63, false) /* VK_HELP (undocumented?) */
132
133 #define RDP_SCANCODE_F13           mk_rdp_scancode(0x64, false) /* VK_F13 */ /* JP agree, should 0x7d according to ms894073 */
134 #define RDP_SCANCODE_F14           mk_rdp_scancode(0x65, false) /* VK_F14 */
135 #define RDP_SCANCODE_F15           mk_rdp_scancode(0x66, false) /* VK_F15 */
136 #define RDP_SCANCODE_F16           mk_rdp_scancode(0x67, false) /* VK_F16 */
137 #define RDP_SCANCODE_F17           mk_rdp_scancode(0x68, false) /* VK_F17 */
138 #define RDP_SCANCODE_F18           mk_rdp_scancode(0x69, false) /* VK_F18 */
139 #define RDP_SCANCODE_F19           mk_rdp_scancode(0x6A, false) /* VK_F19 */
140 #define RDP_SCANCODE_F20           mk_rdp_scancode(0x6B, false) /* VK_F20 */
141 #define RDP_SCANCODE_F21           mk_rdp_scancode(0x6C, false) /* VK_F21 */
142 #define RDP_SCANCODE_F22           mk_rdp_scancode(0x6D, false) /* VK_F22 */
143 #define RDP_SCANCODE_F23           mk_rdp_scancode(0x6E, false) /* VK_F23 */ /* JP agree */
144 #define RDP_SCANCODE_F24           mk_rdp_scancode(0x6F, false) /* VK_F24 */ /* 0x87 according to ms894073 */
145
146 #define RDP_SCANCODE_HIRAGANA      mk_rdp_scancode(0x70, false) /* JP DBE_HIRAGANA */
147 #define RDP_SCANCODE_HANJA_KANJI   mk_rdp_scancode(0x71, false) /* VK_HANJA / VK_KANJI (undocumented?) */
148 #define RDP_SCANCODE_KANA_HANGUL   mk_rdp_scancode(0x72, false) /* VK_KANA / VK_HANGUL (undocumented?) */
149 #define RDP_SCANCODE_ABNT_C1       mk_rdp_scancode(0x73, false) /* VK_ABNT_C1 JP OEM_102 */
150 #define RDP_SCANCODE_F24_JP        mk_rdp_scancode(0x76, false) /* JP F24 */
151 #define RDP_SCANCODE_CONVERT_JP    mk_rdp_scancode(0x79, false) /* JP CONVERT */
152 #define RDP_SCANCODE_NONCONVERT_JP mk_rdp_scancode(0x7B, false) /* JP NONCONVERT */
153 #define RDP_SCANCODE_TAB_JP        mk_rdp_scancode(0x7C, false) /* JP TAB */
154 #define RDP_SCANCODE_BACKSLASH_JP  mk_rdp_scancode(0x7D, false) /* JP OEM_5 ('\') */
155 #define RDP_SCANCODE_ABNT_C2       mk_rdp_scancode(0x7E, false) /* VK_ABNT_C2, JP */
156 #define RDP_SCANCODE_ABNT_C2       mk_rdp_scancode(0x7E, false) /* JP OEM_PA2 */
157
158 #define RDP_SCANCODE_RETURN_KP     mk_rdp_scancode(0x1C, true)  /* not RDP_SCANCODE_RETURN Numerical Enter */
159 #define RDP_SCANCODE_RCONTROL      mk_rdp_scancode(0x1D, true)  /* VK_RCONTROL */
160 #define RDP_SCANCODE_DIVIDE        mk_rdp_scancode(0x35, true)  /* VK_DIVIDE Numerical */
161 #define RDP_SCANCODE_PRINTSCREEN   mk_rdp_scancode(0x37, true)  /* VK_EXECUTE/VK_PRINT/VK_SNAPSHOT Print Screen */
162 #define RDP_SCANCODE_RMENU         mk_rdp_scancode(0x38, true)  /* VK_RMENU Right 'Alt' / 'Alt Gr' */
163 #define RDP_SCANCODE_PAUSE         mk_rdp_scancode(0x46, true)  /* VK_PAUSE Pause / Break (Slightly special handling) */
164 #define RDP_SCANCODE_HOME          mk_rdp_scancode(0x47, true)  /* VK_HOME */
165 #define RDP_SCANCODE_UP            mk_rdp_scancode(0x48, true)  /* VK_UP */
166 #define RDP_SCANCODE_PRIOR         mk_rdp_scancode(0x49, true)  /* VK_PRIOR 'Page Up' */
167 #define RDP_SCANCODE_LEFT          mk_rdp_scancode(0x4B, true)  /* VK_LEFT */
168 #define RDP_SCANCODE_RIGHT         mk_rdp_scancode(0x4D, true)  /* VK_RIGHT */
169 #define RDP_SCANCODE_END           mk_rdp_scancode(0x4F, true)  /* VK_END */
170 #define RDP_SCANCODE_DOWN          mk_rdp_scancode(0x50, true)  /* VK_DOWN */
171 #define RDP_SCANCODE_NEXT          mk_rdp_scancode(0x51, true)  /* VK_NEXT 'Page Down' */
172 #define RDP_SCANCODE_INSERT        mk_rdp_scancode(0x52, true)  /* VK_INSERT */
173 #define RDP_SCANCODE_DELETE        mk_rdp_scancode(0x53, true)  /* VK_DELETE */
174 #define RDP_SCANCODE_NULL          mk_rdp_scancode(0x54, true)  /* <00> */
175 #define RDP_SCANCODE_HELP2         mk_rdp_scancode(0x56, true)  /* Help - documented, different from VK_HELP */
176 #define RDP_SCANCODE_LWIN          mk_rdp_scancode(0x5B, true)  /* VK_LWIN */
177 #define RDP_SCANCODE_RWIN          mk_rdp_scancode(0x5C, true)  /* VK_RWIN */
178 #define RDP_SCANCODE_APPS          mk_rdp_scancode(0x5D, true)  /* VK_APPS Application */
179 #define RDP_SCANCODE_POWER_JP      mk_rdp_scancode(0x5E, true)  /* JP POWER */
180 #define RDP_SCANCODE_SLEEP_JP      mk_rdp_scancode(0x5F, true)  /* JP SLEEP */
181
182 /* _not_ valid scancode, but this is what a windows PKBDLLHOOKSTRUCT for NumLock contains */
183 #define RDP_SCANCODE_NUMLOCK_EXTENDED  mk_rdp_scancode(0x45, true)  /* should be RDP_SCANCODE_NUMLOCK */
184 #define RDP_SCANCODE_RSHIFT_EXTENDED   mk_rdp_scancode(0x36, true)  /* should be RDP_SCANCODE_RSHIFT */
185
186 #endif /* __FREERDP_LOCALE_KEYBOARD_RDP_SCANCODE_H */