IBNOS
keyboard.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Michael Müller
3  * Copyright (c) 2014, Sebastian Lackner
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright notice, this
10  * list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  */
27 
28 #ifndef _H_KEYBOARD_
29 #define _H_KEYBOARD_
30 
31 #include <stdbool.h>
32 #include <stdint.h>
33 
34 #define KEY_CODE(type, value) (((type)<<8)|(value))
35 #define KEY_TYPE(x) (((x) >> 8))
36 #define KEY_VALUE(x) ((x) & 0xff)
37 
38 #define KEY_MODIFIER_SHIFT 0
39 #define KEY_MODIFIER_ALTGR 1
40 #define KEY_MODIFIER_CTRL 2
41 #define KEY_MODIFIER_ALT 3
42 #define KEY_MODIFIER_SHIFTL 4
43 #define KEY_MODIFIER_KANASHIFT 4
44 #define KEY_MODIFIER_SHIFTR 5
45 #define KEY_MODIFIER_CTRLL 6
46 #define KEY_MODIFIER_CTRLR 7
47 #define KEY_MODIFIER_CAPSSHIFT 8
48 
49 #define KEY_TYPE_LATIN 0x0
50 #define KEY_TYPE_FN 0x1
51 #define KEY_TYPE_SPEC 0x2
52 #define KEY_TYPE_PAD 0x3
53 #define KEY_TYPE_DEAD 0x4
54 #define KEY_TYPE_CONS 0x5
55 #define KEY_TYPE_CUR 0x6
56 #define KEY_TYPE_SHIFT 0x7
57 #define KEY_TYPE_META 0x8
58 #define KEY_TYPE_ASCII 0x9
59 #define KEY_TYPE_LOCK 0xA
60 #define KEY_TYPE_LETTER 0xB
61 #define KEY_TYPE_SLOCK 0xC
62 #define KEY_TYPE_DEAD2 0xD
63 #define KEY_TYPE_BRL 0xE
64 
65 #define KEY_CODE_F1 KEY_CODE(KEY_TYPE_FN, 0)
66 #define KEY_CODE_F2 KEY_CODE(KEY_TYPE_FN, 1)
67 #define KEY_CODE_F3 KEY_CODE(KEY_TYPE_FN, 2)
68 #define KEY_CODE_F4 KEY_CODE(KEY_TYPE_FN, 3)
69 #define KEY_CODE_F5 KEY_CODE(KEY_TYPE_FN, 4)
70 #define KEY_CODE_F6 KEY_CODE(KEY_TYPE_FN, 5)
71 #define KEY_CODE_F7 KEY_CODE(KEY_TYPE_FN, 6)
72 #define KEY_CODE_F8 KEY_CODE(KEY_TYPE_FN, 7)
73 #define KEY_CODE_F9 KEY_CODE(KEY_TYPE_FN, 8)
74 #define KEY_CODE_F10 KEY_CODE(KEY_TYPE_FN, 9)
75 #define KEY_CODE_F11 KEY_CODE(KEY_TYPE_FN, 10)
76 #define KEY_CODE_F12 KEY_CODE(KEY_TYPE_FN, 11)
77 #define KEY_CODE_F13 KEY_CODE(KEY_TYPE_FN, 12)
78 #define KEY_CODE_F14 KEY_CODE(KEY_TYPE_FN, 13)
79 #define KEY_CODE_F15 KEY_CODE(KEY_TYPE_FN, 14)
80 #define KEY_CODE_F16 KEY_CODE(KEY_TYPE_FN, 15)
81 #define KEY_CODE_F17 KEY_CODE(KEY_TYPE_FN, 16)
82 #define KEY_CODE_F18 KEY_CODE(KEY_TYPE_FN, 17)
83 #define KEY_CODE_F19 KEY_CODE(KEY_TYPE_FN, 18)
84 #define KEY_CODE_F20 KEY_CODE(KEY_TYPE_FN, 19)
85 #define KEY_CODE_FIND KEY_CODE(KEY_TYPE_FN, 20)
86 #define KEY_CODE_INSERT KEY_CODE(KEY_TYPE_FN, 21)
87 #define KEY_CODE_REMOVE KEY_CODE(KEY_TYPE_FN, 22)
88 #define KEY_CODE_SELECT KEY_CODE(KEY_TYPE_FN, 23)
89 #define KEY_CODE_PGUP KEY_CODE(KEY_TYPE_FN, 24)
90 #define KEY_CODE_PGDN KEY_CODE(KEY_TYPE_FN, 25)
91 #define KEY_CODE_MACRO KEY_CODE(KEY_TYPE_FN, 26)
92 #define KEY_CODE_HELP KEY_CODE(KEY_TYPE_FN, 27)
93 #define KEY_CODE_DO KEY_CODE(KEY_TYPE_FN, 28)
94 #define KEY_CODE_PAUSE KEY_CODE(KEY_TYPE_FN, 29)
95 #define KEY_CODE_F21 KEY_CODE(KEY_TYPE_FN, 30)
96 #define KEY_CODE_F22 KEY_CODE(KEY_TYPE_FN, 31)
97 #define KEY_CODE_F23 KEY_CODE(KEY_TYPE_FN, 32)
98 #define KEY_CODE_F24 KEY_CODE(KEY_TYPE_FN, 33)
99 #define KEY_CODE_F25 KEY_CODE(KEY_TYPE_FN, 34)
100 #define KEY_CODE_F26 KEY_CODE(KEY_TYPE_FN, 35)
101 #define KEY_CODE_F27 KEY_CODE(KEY_TYPE_FN, 36)
102 #define KEY_CODE_F28 KEY_CODE(KEY_TYPE_FN, 37)
103 #define KEY_CODE_F29 KEY_CODE(KEY_TYPE_FN, 38)
104 #define KEY_CODE_F30 KEY_CODE(KEY_TYPE_FN, 39)
105 #define KEY_CODE_F31 KEY_CODE(KEY_TYPE_FN, 40)
106 #define KEY_CODE_F32 KEY_CODE(KEY_TYPE_FN, 41)
107 #define KEY_CODE_F33 KEY_CODE(KEY_TYPE_FN, 42)
108 #define KEY_CODE_F34 KEY_CODE(KEY_TYPE_FN, 43)
109 #define KEY_CODE_F35 KEY_CODE(KEY_TYPE_FN, 44)
110 #define KEY_CODE_F36 KEY_CODE(KEY_TYPE_FN, 45)
111 #define KEY_CODE_F37 KEY_CODE(KEY_TYPE_FN, 46)
112 #define KEY_CODE_F38 KEY_CODE(KEY_TYPE_FN, 47)
113 #define KEY_CODE_F39 KEY_CODE(KEY_TYPE_FN, 48)
114 #define KEY_CODE_F40 KEY_CODE(KEY_TYPE_FN, 49)
115 #define KEY_CODE_F41 KEY_CODE(KEY_TYPE_FN, 50)
116 #define KEY_CODE_F42 KEY_CODE(KEY_TYPE_FN, 51)
117 #define KEY_CODE_F43 KEY_CODE(KEY_TYPE_FN, 52)
118 #define KEY_CODE_F44 KEY_CODE(KEY_TYPE_FN, 53)
119 #define KEY_CODE_F45 KEY_CODE(KEY_TYPE_FN, 54)
120 #define KEY_CODE_F46 KEY_CODE(KEY_TYPE_FN, 55)
121 #define KEY_CODE_F47 KEY_CODE(KEY_TYPE_FN, 56)
122 #define KEY_CODE_F48 KEY_CODE(KEY_TYPE_FN, 57)
123 #define KEY_CODE_F49 KEY_CODE(KEY_TYPE_FN, 58)
124 #define KEY_CODE_F50 KEY_CODE(KEY_TYPE_FN, 59)
125 #define KEY_CODE_F51 KEY_CODE(KEY_TYPE_FN, 60)
126 #define KEY_CODE_F52 KEY_CODE(KEY_TYPE_FN, 61)
127 #define KEY_CODE_F53 KEY_CODE(KEY_TYPE_FN, 62)
128 #define KEY_CODE_F54 KEY_CODE(KEY_TYPE_FN, 63)
129 #define KEY_CODE_F55 KEY_CODE(KEY_TYPE_FN, 64)
130 #define KEY_CODE_F56 KEY_CODE(KEY_TYPE_FN, 65)
131 #define KEY_CODE_F57 KEY_CODE(KEY_TYPE_FN, 66)
132 #define KEY_CODE_F58 KEY_CODE(KEY_TYPE_FN, 67)
133 #define KEY_CODE_F59 KEY_CODE(KEY_TYPE_FN, 68)
134 #define KEY_CODE_F60 KEY_CODE(KEY_TYPE_FN, 69)
135 #define KEY_CODE_F61 KEY_CODE(KEY_TYPE_FN, 70)
136 #define KEY_CODE_F62 KEY_CODE(KEY_TYPE_FN, 71)
137 #define KEY_CODE_F63 KEY_CODE(KEY_TYPE_FN, 72)
138 #define KEY_CODE_F64 KEY_CODE(KEY_TYPE_FN, 73)
139 #define KEY_CODE_F65 KEY_CODE(KEY_TYPE_FN, 74)
140 #define KEY_CODE_F66 KEY_CODE(KEY_TYPE_FN, 75)
141 #define KEY_CODE_F67 KEY_CODE(KEY_TYPE_FN, 76)
142 #define KEY_CODE_F68 KEY_CODE(KEY_TYPE_FN, 77)
143 #define KEY_CODE_F69 KEY_CODE(KEY_TYPE_FN, 78)
144 #define KEY_CODE_F70 KEY_CODE(KEY_TYPE_FN, 79)
145 #define KEY_CODE_F71 KEY_CODE(KEY_TYPE_FN, 80)
146 #define KEY_CODE_F72 KEY_CODE(KEY_TYPE_FN, 81)
147 #define KEY_CODE_F73 KEY_CODE(KEY_TYPE_FN, 82)
148 #define KEY_CODE_F74 KEY_CODE(KEY_TYPE_FN, 83)
149 #define KEY_CODE_F75 KEY_CODE(KEY_TYPE_FN, 84)
150 #define KEY_CODE_F76 KEY_CODE(KEY_TYPE_FN, 85)
151 #define KEY_CODE_F77 KEY_CODE(KEY_TYPE_FN, 86)
152 #define KEY_CODE_F78 KEY_CODE(KEY_TYPE_FN, 87)
153 #define KEY_CODE_F79 KEY_CODE(KEY_TYPE_FN, 88)
154 #define KEY_CODE_F80 KEY_CODE(KEY_TYPE_FN, 89)
155 #define KEY_CODE_F81 KEY_CODE(KEY_TYPE_FN, 90)
156 #define KEY_CODE_F82 KEY_CODE(KEY_TYPE_FN, 91)
157 #define KEY_CODE_F83 KEY_CODE(KEY_TYPE_FN, 92)
158 #define KEY_CODE_F84 KEY_CODE(KEY_TYPE_FN, 93)
159 #define KEY_CODE_F85 KEY_CODE(KEY_TYPE_FN, 94)
160 #define KEY_CODE_F86 KEY_CODE(KEY_TYPE_FN, 95)
161 #define KEY_CODE_F87 KEY_CODE(KEY_TYPE_FN, 96)
162 #define KEY_CODE_F88 KEY_CODE(KEY_TYPE_FN, 97)
163 #define KEY_CODE_F89 KEY_CODE(KEY_TYPE_FN, 98)
164 #define KEY_CODE_F90 KEY_CODE(KEY_TYPE_FN, 99)
165 #define KEY_CODE_F91 KEY_CODE(KEY_TYPE_FN, 100)
166 #define KEY_CODE_F92 KEY_CODE(KEY_TYPE_FN, 101)
167 #define KEY_CODE_F93 KEY_CODE(KEY_TYPE_FN, 102)
168 #define KEY_CODE_F94 KEY_CODE(KEY_TYPE_FN, 103)
169 #define KEY_CODE_F95 KEY_CODE(KEY_TYPE_FN, 104)
170 #define KEY_CODE_F96 KEY_CODE(KEY_TYPE_FN, 105)
171 #define KEY_CODE_F97 KEY_CODE(KEY_TYPE_FN, 106)
172 #define KEY_CODE_F98 KEY_CODE(KEY_TYPE_FN, 107)
173 #define KEY_CODE_F99 KEY_CODE(KEY_TYPE_FN, 108)
174 #define KEY_CODE_F100 KEY_CODE(KEY_TYPE_FN, 109)
175 #define KEY_CODE_F101 KEY_CODE(KEY_TYPE_FN, 110)
176 #define KEY_CODE_F102 KEY_CODE(KEY_TYPE_FN, 111)
177 #define KEY_CODE_F103 KEY_CODE(KEY_TYPE_FN, 112)
178 #define KEY_CODE_F104 KEY_CODE(KEY_TYPE_FN, 113)
179 #define KEY_CODE_F105 KEY_CODE(KEY_TYPE_FN, 114)
180 #define KEY_CODE_F106 KEY_CODE(KEY_TYPE_FN, 115)
181 #define KEY_CODE_F107 KEY_CODE(KEY_TYPE_FN, 116)
182 #define KEY_CODE_F108 KEY_CODE(KEY_TYPE_FN, 117)
183 #define KEY_CODE_F109 KEY_CODE(KEY_TYPE_FN, 118)
184 #define KEY_CODE_F110 KEY_CODE(KEY_TYPE_FN, 119)
185 #define KEY_CODE_F111 KEY_CODE(KEY_TYPE_FN, 120)
186 #define KEY_CODE_F112 KEY_CODE(KEY_TYPE_FN, 121)
187 #define KEY_CODE_F113 KEY_CODE(KEY_TYPE_FN, 122)
188 #define KEY_CODE_F114 KEY_CODE(KEY_TYPE_FN, 123)
189 #define KEY_CODE_F115 KEY_CODE(KEY_TYPE_FN, 124)
190 #define KEY_CODE_F116 KEY_CODE(KEY_TYPE_FN, 125)
191 #define KEY_CODE_F117 KEY_CODE(KEY_TYPE_FN, 126)
192 #define KEY_CODE_F118 KEY_CODE(KEY_TYPE_FN, 127)
193 #define KEY_CODE_F119 KEY_CODE(KEY_TYPE_FN, 128)
194 #define KEY_CODE_F120 KEY_CODE(KEY_TYPE_FN, 129)
195 #define KEY_CODE_F121 KEY_CODE(KEY_TYPE_FN, 130)
196 #define KEY_CODE_F122 KEY_CODE(KEY_TYPE_FN, 131)
197 #define KEY_CODE_F123 KEY_CODE(KEY_TYPE_FN, 132)
198 #define KEY_CODE_F124 KEY_CODE(KEY_TYPE_FN, 133)
199 #define KEY_CODE_F125 KEY_CODE(KEY_TYPE_FN, 134)
200 #define KEY_CODE_F126 KEY_CODE(KEY_TYPE_FN, 135)
201 #define KEY_CODE_F127 KEY_CODE(KEY_TYPE_FN, 136)
202 #define KEY_CODE_F128 KEY_CODE(KEY_TYPE_FN, 137)
203 #define KEY_CODE_F129 KEY_CODE(KEY_TYPE_FN, 138)
204 #define KEY_CODE_F130 KEY_CODE(KEY_TYPE_FN, 139)
205 #define KEY_CODE_F131 KEY_CODE(KEY_TYPE_FN, 140)
206 #define KEY_CODE_F132 KEY_CODE(KEY_TYPE_FN, 141)
207 #define KEY_CODE_F133 KEY_CODE(KEY_TYPE_FN, 142)
208 #define KEY_CODE_F134 KEY_CODE(KEY_TYPE_FN, 143)
209 #define KEY_CODE_F135 KEY_CODE(KEY_TYPE_FN, 144)
210 #define KEY_CODE_F136 KEY_CODE(KEY_TYPE_FN, 145)
211 #define KEY_CODE_F137 KEY_CODE(KEY_TYPE_FN, 146)
212 #define KEY_CODE_F138 KEY_CODE(KEY_TYPE_FN, 147)
213 #define KEY_CODE_F139 KEY_CODE(KEY_TYPE_FN, 148)
214 #define KEY_CODE_F140 KEY_CODE(KEY_TYPE_FN, 149)
215 #define KEY_CODE_F141 KEY_CODE(KEY_TYPE_FN, 150)
216 #define KEY_CODE_F142 KEY_CODE(KEY_TYPE_FN, 151)
217 #define KEY_CODE_F143 KEY_CODE(KEY_TYPE_FN, 152)
218 #define KEY_CODE_F144 KEY_CODE(KEY_TYPE_FN, 153)
219 #define KEY_CODE_F145 KEY_CODE(KEY_TYPE_FN, 154)
220 #define KEY_CODE_F146 KEY_CODE(KEY_TYPE_FN, 155)
221 #define KEY_CODE_F147 KEY_CODE(KEY_TYPE_FN, 156)
222 #define KEY_CODE_F148 KEY_CODE(KEY_TYPE_FN, 157)
223 #define KEY_CODE_F149 KEY_CODE(KEY_TYPE_FN, 158)
224 #define KEY_CODE_F150 KEY_CODE(KEY_TYPE_FN, 159)
225 #define KEY_CODE_F151 KEY_CODE(KEY_TYPE_FN, 160)
226 #define KEY_CODE_F152 KEY_CODE(KEY_TYPE_FN, 161)
227 #define KEY_CODE_F153 KEY_CODE(KEY_TYPE_FN, 162)
228 #define KEY_CODE_F154 KEY_CODE(KEY_TYPE_FN, 163)
229 #define KEY_CODE_F155 KEY_CODE(KEY_TYPE_FN, 164)
230 #define KEY_CODE_F156 KEY_CODE(KEY_TYPE_FN, 165)
231 #define KEY_CODE_F157 KEY_CODE(KEY_TYPE_FN, 166)
232 #define KEY_CODE_F158 KEY_CODE(KEY_TYPE_FN, 167)
233 #define KEY_CODE_F159 KEY_CODE(KEY_TYPE_FN, 168)
234 #define KEY_CODE_F160 KEY_CODE(KEY_TYPE_FN, 169)
235 #define KEY_CODE_F161 KEY_CODE(KEY_TYPE_FN, 170)
236 #define KEY_CODE_F162 KEY_CODE(KEY_TYPE_FN, 171)
237 #define KEY_CODE_F163 KEY_CODE(KEY_TYPE_FN, 172)
238 #define KEY_CODE_F164 KEY_CODE(KEY_TYPE_FN, 173)
239 #define KEY_CODE_F165 KEY_CODE(KEY_TYPE_FN, 174)
240 #define KEY_CODE_F166 KEY_CODE(KEY_TYPE_FN, 175)
241 #define KEY_CODE_F167 KEY_CODE(KEY_TYPE_FN, 176)
242 #define KEY_CODE_F168 KEY_CODE(KEY_TYPE_FN, 177)
243 #define KEY_CODE_F169 KEY_CODE(KEY_TYPE_FN, 178)
244 #define KEY_CODE_F170 KEY_CODE(KEY_TYPE_FN, 179)
245 #define KEY_CODE_F171 KEY_CODE(KEY_TYPE_FN, 180)
246 #define KEY_CODE_F172 KEY_CODE(KEY_TYPE_FN, 181)
247 #define KEY_CODE_F173 KEY_CODE(KEY_TYPE_FN, 182)
248 #define KEY_CODE_F174 KEY_CODE(KEY_TYPE_FN, 183)
249 #define KEY_CODE_F175 KEY_CODE(KEY_TYPE_FN, 184)
250 #define KEY_CODE_F176 KEY_CODE(KEY_TYPE_FN, 185)
251 #define KEY_CODE_F177 KEY_CODE(KEY_TYPE_FN, 186)
252 #define KEY_CODE_F178 KEY_CODE(KEY_TYPE_FN, 187)
253 #define KEY_CODE_F179 KEY_CODE(KEY_TYPE_FN, 188)
254 #define KEY_CODE_F180 KEY_CODE(KEY_TYPE_FN, 189)
255 #define KEY_CODE_F181 KEY_CODE(KEY_TYPE_FN, 190)
256 #define KEY_CODE_F182 KEY_CODE(KEY_TYPE_FN, 191)
257 #define KEY_CODE_F183 KEY_CODE(KEY_TYPE_FN, 192)
258 #define KEY_CODE_F184 KEY_CODE(KEY_TYPE_FN, 193)
259 #define KEY_CODE_F185 KEY_CODE(KEY_TYPE_FN, 194)
260 #define KEY_CODE_F186 KEY_CODE(KEY_TYPE_FN, 195)
261 #define KEY_CODE_F187 KEY_CODE(KEY_TYPE_FN, 196)
262 #define KEY_CODE_F188 KEY_CODE(KEY_TYPE_FN, 197)
263 #define KEY_CODE_F189 KEY_CODE(KEY_TYPE_FN, 198)
264 #define KEY_CODE_F190 KEY_CODE(KEY_TYPE_FN, 199)
265 #define KEY_CODE_F191 KEY_CODE(KEY_TYPE_FN, 200)
266 #define KEY_CODE_F192 KEY_CODE(KEY_TYPE_FN, 201)
267 #define KEY_CODE_F193 KEY_CODE(KEY_TYPE_FN, 202)
268 #define KEY_CODE_F194 KEY_CODE(KEY_TYPE_FN, 203)
269 #define KEY_CODE_F195 KEY_CODE(KEY_TYPE_FN, 204)
270 #define KEY_CODE_F196 KEY_CODE(KEY_TYPE_FN, 205)
271 #define KEY_CODE_F197 KEY_CODE(KEY_TYPE_FN, 206)
272 #define KEY_CODE_F198 KEY_CODE(KEY_TYPE_FN, 207)
273 #define KEY_CODE_F199 KEY_CODE(KEY_TYPE_FN, 208)
274 #define KEY_CODE_F200 KEY_CODE(KEY_TYPE_FN, 209)
275 #define KEY_CODE_F201 KEY_CODE(KEY_TYPE_FN, 210)
276 #define KEY_CODE_F202 KEY_CODE(KEY_TYPE_FN, 211)
277 #define KEY_CODE_F203 KEY_CODE(KEY_TYPE_FN, 212)
278 #define KEY_CODE_F204 KEY_CODE(KEY_TYPE_FN, 213)
279 #define KEY_CODE_F205 KEY_CODE(KEY_TYPE_FN, 214)
280 #define KEY_CODE_F206 KEY_CODE(KEY_TYPE_FN, 215)
281 #define KEY_CODE_F207 KEY_CODE(KEY_TYPE_FN, 216)
282 #define KEY_CODE_F208 KEY_CODE(KEY_TYPE_FN, 217)
283 #define KEY_CODE_F209 KEY_CODE(KEY_TYPE_FN, 218)
284 #define KEY_CODE_F210 KEY_CODE(KEY_TYPE_FN, 219)
285 #define KEY_CODE_F211 KEY_CODE(KEY_TYPE_FN, 220)
286 #define KEY_CODE_F212 KEY_CODE(KEY_TYPE_FN, 221)
287 #define KEY_CODE_F213 KEY_CODE(KEY_TYPE_FN, 222)
288 #define KEY_CODE_F214 KEY_CODE(KEY_TYPE_FN, 223)
289 #define KEY_CODE_F215 KEY_CODE(KEY_TYPE_FN, 224)
290 #define KEY_CODE_F216 KEY_CODE(KEY_TYPE_FN, 225)
291 #define KEY_CODE_F217 KEY_CODE(KEY_TYPE_FN, 226)
292 #define KEY_CODE_F218 KEY_CODE(KEY_TYPE_FN, 227)
293 #define KEY_CODE_F219 KEY_CODE(KEY_TYPE_FN, 228)
294 #define KEY_CODE_F220 KEY_CODE(KEY_TYPE_FN, 229)
295 #define KEY_CODE_F221 KEY_CODE(KEY_TYPE_FN, 230)
296 #define KEY_CODE_F222 KEY_CODE(KEY_TYPE_FN, 231)
297 #define KEY_CODE_F223 KEY_CODE(KEY_TYPE_FN, 232)
298 #define KEY_CODE_F224 KEY_CODE(KEY_TYPE_FN, 233)
299 #define KEY_CODE_F225 KEY_CODE(KEY_TYPE_FN, 234)
300 #define KEY_CODE_F226 KEY_CODE(KEY_TYPE_FN, 235)
301 #define KEY_CODE_F227 KEY_CODE(KEY_TYPE_FN, 236)
302 #define KEY_CODE_F228 KEY_CODE(KEY_TYPE_FN, 237)
303 #define KEY_CODE_F229 KEY_CODE(KEY_TYPE_FN, 238)
304 #define KEY_CODE_F230 KEY_CODE(KEY_TYPE_FN, 239)
305 #define KEY_CODE_F231 KEY_CODE(KEY_TYPE_FN, 240)
306 #define KEY_CODE_F232 KEY_CODE(KEY_TYPE_FN, 241)
307 #define KEY_CODE_F233 KEY_CODE(KEY_TYPE_FN, 242)
308 #define KEY_CODE_F234 KEY_CODE(KEY_TYPE_FN, 243)
309 #define KEY_CODE_F235 KEY_CODE(KEY_TYPE_FN, 244)
310 #define KEY_CODE_F236 KEY_CODE(KEY_TYPE_FN, 245)
311 #define KEY_CODE_F237 KEY_CODE(KEY_TYPE_FN, 246)
312 #define KEY_CODE_F238 KEY_CODE(KEY_TYPE_FN, 247)
313 #define KEY_CODE_F239 KEY_CODE(KEY_TYPE_FN, 248)
314 #define KEY_CODE_F240 KEY_CODE(KEY_TYPE_FN, 249)
315 #define KEY_CODE_F241 KEY_CODE(KEY_TYPE_FN, 250)
316 #define KEY_CODE_F242 KEY_CODE(KEY_TYPE_FN, 251)
317 #define KEY_CODE_F243 KEY_CODE(KEY_TYPE_FN, 252)
318 #define KEY_CODE_F244 KEY_CODE(KEY_TYPE_FN, 253)
319 #define KEY_CODE_F245 KEY_CODE(KEY_TYPE_FN, 254)
320 #define KEY_CODE_UNDO KEY_CODE(KEY_TYPE_FN, 255)
321 
322 #define KEY_CODE_HOLE KEY_CODE(KEY_TYPE_SPEC, 0)
323 #define KEY_CODE_ENTER KEY_CODE(KEY_TYPE_SPEC, 1)
324 #define KEY_CODE_SH_REGS KEY_CODE(KEY_TYPE_SPEC, 2)
325 #define KEY_CODE_SH_MEM KEY_CODE(KEY_TYPE_SPEC, 3)
326 #define KEY_CODE_SH_STAT KEY_CODE(KEY_TYPE_SPEC, 4)
327 #define KEY_CODE_BREAK KEY_CODE(KEY_TYPE_SPEC, 5)
328 #define KEY_CODE_CONS KEY_CODE(KEY_TYPE_SPEC, 6)
329 #define KEY_CODE_CAPS KEY_CODE(KEY_TYPE_SPEC, 7)
330 #define KEY_CODE_NUM KEY_CODE(KEY_TYPE_SPEC, 8)
331 #define KEY_CODE_HOLD KEY_CODE(KEY_TYPE_SPEC, 9)
332 #define KEY_CODE_SCROLLFORW KEY_CODE(KEY_TYPE_SPEC, 10)
333 #define KEY_CODE_SCROLLBACK KEY_CODE(KEY_TYPE_SPEC, 11)
334 #define KEY_CODE_BOOT KEY_CODE(KEY_TYPE_SPEC, 12)
335 #define KEY_CODE_CAPSON KEY_CODE(KEY_TYPE_SPEC, 13)
336 #define KEY_CODE_COMPOSE KEY_CODE(KEY_TYPE_SPEC, 14)
337 #define KEY_CODE_SAK KEY_CODE(KEY_TYPE_SPEC, 15)
338 #define KEY_CODE_DECRCONSOLE KEY_CODE(KEY_TYPE_SPEC, 16)
339 #define KEY_CODE_INCRCONSOLE KEY_CODE(KEY_TYPE_SPEC, 17)
340 #define KEY_CODE_SPAWNCONSOLE KEY_CODE(KEY_TYPE_SPEC, 18)
341 #define KEY_CODE_BARENUMLOCK KEY_CODE(KEY_TYPE_SPEC, 19)
342 
343 #define KEY_CODE_ALLOCATED KEY_CODE(KEY_TYPE_SPEC, 126)
344 #define KEY_CODE_NOSUCHMAP KEY_CODE(KEY_TYPE_SPEC, 127)
345 
346 #define KEY_CODE_P0 KEY_CODE(KEY_TYPE_PAD, 0)
347 #define KEY_CODE_P1 KEY_CODE(KEY_TYPE_PAD, 1)
348 #define KEY_CODE_P2 KEY_CODE(KEY_TYPE_PAD, 2)
349 #define KEY_CODE_P3 KEY_CODE(KEY_TYPE_PAD, 3)
350 #define KEY_CODE_P4 KEY_CODE(KEY_TYPE_PAD, 4)
351 #define KEY_CODE_P5 KEY_CODE(KEY_TYPE_PAD, 5)
352 #define KEY_CODE_P6 KEY_CODE(KEY_TYPE_PAD, 6)
353 #define KEY_CODE_P7 KEY_CODE(KEY_TYPE_PAD, 7)
354 #define KEY_CODE_P8 KEY_CODE(KEY_TYPE_PAD, 8)
355 #define KEY_CODE_P9 KEY_CODE(KEY_TYPE_PAD, 9)
356 #define KEY_CODE_PPLUS KEY_CODE(KEY_TYPE_PAD, 10)
357 #define KEY_CODE_PMINUS KEY_CODE(KEY_TYPE_PAD, 11)
358 #define KEY_CODE_PSTAR KEY_CODE(KEY_TYPE_PAD, 12)
359 #define KEY_CODE_PSLASH KEY_CODE(KEY_TYPE_PAD, 13)
360 #define KEY_CODE_PENTER KEY_CODE(KEY_TYPE_PAD, 14)
361 #define KEY_CODE_PCOMMA KEY_CODE(KEY_TYPE_PAD, 15)
362 #define KEY_CODE_PDOT KEY_CODE(KEY_TYPE_PAD, 16)
363 #define KEY_CODE_PPLUSMINUS KEY_CODE(KEY_TYPE_PAD, 17)
364 #define KEY_CODE_PPARENL KEY_CODE(KEY_TYPE_PAD, 18)
365 #define KEY_CODE_PPARENR KEY_CODE(KEY_TYPE_PAD, 19)
366 
367 #define KEY_CODE_DGRAVE KEY_CODE(KEY_TYPE_DEAD, 0)
368 #define KEY_CODE_DACUTE KEY_CODE(KEY_TYPE_DEAD, 1)
369 #define KEY_CODE_DCIRCM KEY_CODE(KEY_TYPE_DEAD, 2)
370 #define KEY_CODE_DTILDE KEY_CODE(KEY_TYPE_DEAD, 3)
371 #define KEY_CODE_DDIERE KEY_CODE(KEY_TYPE_DEAD, 4)
372 #define KEY_CODE_DCEDIL KEY_CODE(KEY_TYPE_DEAD, 5)
373 
374 #define KEY_CODE_DOWN KEY_CODE(KEY_TYPE_CUR, 0)
375 #define KEY_CODE_LEFT KEY_CODE(KEY_TYPE_CUR, 1)
376 #define KEY_CODE_RIGHT KEY_CODE(KEY_TYPE_CUR, 2)
377 #define KEY_CODE_UP KEY_CODE(KEY_TYPE_CUR, 3)
378 
379 #define KEY_CODE_SHIFT KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_SHIFT)
380 #define KEY_CODE_CTRL KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_CTRL)
381 #define KEY_CODE_ALT KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_ALT)
382 #define KEY_CODE_ALTGR KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_ALTGR)
383 #define KEY_CODE_SHIFTL KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_SHIFTL)
384 #define KEY_CODE_SHIFTR KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_SHIFTR)
385 #define KEY_CODE_CTRLL KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_CTRLL)
386 #define KEY_CODE_CTRLR KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_CTRLR)
387 #define KEY_CODE_CAPSSHIFT KEY_CODE(KEY_TYPE_SHIFT, KEY_MODIFIER_CAPSSHIFT)
388 
389 #define KEY_CODE_ASC0 KEY_CODE(KEY_TYPE_ASCII, 0)
390 #define KEY_CODE_ASC1 KEY_CODE(KEY_TYPE_ASCII, 1)
391 #define KEY_CODE_ASC2 KEY_CODE(KEY_TYPE_ASCII, 2)
392 #define KEY_CODE_ASC3 KEY_CODE(KEY_TYPE_ASCII, 3)
393 #define KEY_CODE_ASC4 KEY_CODE(KEY_TYPE_ASCII, 4)
394 #define KEY_CODE_ASC5 KEY_CODE(KEY_TYPE_ASCII, 5)
395 #define KEY_CODE_ASC6 KEY_CODE(KEY_TYPE_ASCII, 6)
396 #define KEY_CODE_ASC7 KEY_CODE(KEY_TYPE_ASCII, 7)
397 #define KEY_CODE_ASC8 KEY_CODE(KEY_TYPE_ASCII, 8)
398 #define KEY_CODE_ASC9 KEY_CODE(KEY_TYPE_ASCII, 9)
399 #define KEY_CODE_HEX0 KEY_CODE(KEY_TYPE_ASCII, 10)
400 #define KEY_CODE_HEX1 KEY_CODE(KEY_TYPE_ASCII, 11)
401 #define KEY_CODE_HEX2 KEY_CODE(KEY_TYPE_ASCII, 12)
402 #define KEY_CODE_HEX3 KEY_CODE(KEY_TYPE_ASCII, 13)
403 #define KEY_CODE_HEX4 KEY_CODE(KEY_TYPE_ASCII, 14)
404 #define KEY_CODE_HEX5 KEY_CODE(KEY_TYPE_ASCII, 15)
405 #define KEY_CODE_HEX6 KEY_CODE(KEY_TYPE_ASCII, 16)
406 #define KEY_CODE_HEX7 KEY_CODE(KEY_TYPE_ASCII, 17)
407 #define KEY_CODE_HEX8 KEY_CODE(KEY_TYPE_ASCII, 18)
408 #define KEY_CODE_HEX9 KEY_CODE(KEY_TYPE_ASCII, 19)
409 #define KEY_CODE_HEXa KEY_CODE(KEY_TYPE_ASCII, 20)
410 #define KEY_CODE_HEXb KEY_CODE(KEY_TYPE_ASCII, 21)
411 #define KEY_CODE_HEXc KEY_CODE(KEY_TYPE_ASCII, 22)
412 #define KEY_CODE_HEXd KEY_CODE(KEY_TYPE_ASCII, 23)
413 #define KEY_CODE_HEXe KEY_CODE(KEY_TYPE_ASCII, 24)
414 #define KEY_CODE_HEXf KEY_CODE(KEY_TYPE_ASCII, 25)
415 
416 #define KEY_CODE_SHIFTLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_SHIFT)
417 #define KEY_CODE_CTRLLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_CTRL)
418 #define KEY_CODE_ALTLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_ALT)
419 #define KEY_CODE_ALTGRLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_ALTGR)
420 #define KEY_CODE_SHIFTLLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_SHIFTL)
421 #define KEY_CODE_SHIFTRLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_SHIFTR)
422 #define KEY_CODE_CTRLLLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_CTRLL)
423 #define KEY_CODE_CTRLRLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_CTRLR)
424 #define KEY_CODE_CAPSSHIFTLOCK KEY_CODE(KEY_TYPE_LOCK, KEY_MODIFIER_CAPSSHIFT)
425 
426 #define KEY_CODE_SHIFT_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_SHIFT)
427 #define KEY_CODE_CTRL_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_CTRL)
428 #define KEY_CODE_ALT_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_ALT)
429 #define KEY_CODE_ALTGR_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_ALTGR)
430 #define KEY_CODE_SHIFTL_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_SHIFTL)
431 #define KEY_CODE_SHIFTR_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_SHIFTR)
432 #define KEY_CODE_CTRLL_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_CTRLL)
433 #define KEY_CODE_CTRLR_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_CTRLR)
434 #define KEY_CODE_CAPSSHIFT_SLOCK KEY_CODE(KEY_TYPE_SLOCK, KEY_MODIFIER_CAPSSHIFT)
435 
436 #define KEY_CODE_BRL_BLANK KEY_CODE(KEY_TYPE_BRL, 0)
437 #define KEY_CODE_BRL_DOT1 KEY_CODE(KEY_TYPE_BRL, 1)
438 #define KEY_CODE_BRL_DOT2 KEY_CODE(KEY_TYPE_BRL, 2)
439 #define KEY_CODE_BRL_DOT3 KEY_CODE(KEY_TYPE_BRL, 3)
440 #define KEY_CODE_BRL_DOT4 KEY_CODE(KEY_TYPE_BRL, 4)
441 #define KEY_CODE_BRL_DOT5 KEY_CODE(KEY_TYPE_BRL, 5)
442 #define KEY_CODE_BRL_DOT6 KEY_CODE(KEY_TYPE_BRL, 6)
443 #define KEY_CODE_BRL_DOT7 KEY_CODE(KEY_TYPE_BRL, 7)
444 #define KEY_CODE_BRL_DOT8 KEY_CODE(KEY_TYPE_BRL, 8)
445 #define KEY_CODE_BRL_DOT9 KEY_CODE(KEY_TYPE_BRL, 9)
446 #define KEY_CODE_BRL_DOT10 KEY_CODE(KEY_TYPE_BRL, 10)
447 
454 {
455  uint8_t shift : 1;
456  uint8_t shiftLocked : 1;
457  uint8_t ctrl : 1;
458  uint8_t alt : 1;
459  uint8_t altgr : 1;
460 };
461 
462 struct keyEvent
463 {
464  bool pressed;
466  uint16_t keyCode;
467 };
468 
474 #define KEYBOARD_LED_SCROLLOCK 1
475 #define KEYBOARD_LED_NUMLOCK 2
476 #define KEYBOARD_LED_CAPSLOCK 4
477 
481 #ifdef __KERNEL__
482 
483  #include <process/object.h>
484 
485  #define KEYBOARD_BUFFER_PORT 0x60
486  #define KEYBOARD_STATUS_PORT 0x64
487 
488  /* see http://www.lowlevel.eu/wiki/Keyboard_Controller#KBC-Befehle */
493  #define KEYBOARD_KDC_TEST_KEYBOARD 0xAA
494  #define KEYBOARD_KDC_TEST_CONNECTION 0xAB
495  #define KEYBOARD_KDC_DISABLE 0xAD
496  #define KEYBOARD_KDC_ENABLE 0xAE
497  #define KEYBOARD_KDC_READ_INPUT 0xC0
498  #define KEYBOARD_KDC_READ_OUTPUT 0xD0
499  #define KEYBOARD_KDC_WRITE_OUTPUT 0xD1
500 
506  #define KEYBOARD_CMD_LED 0xED
507  #define KEYBOARD_CMD_TEST 0xEE
508  #define KEYBOARD_CMD_SCANCODES 0xF0
509  #define KEYBOARD_CMD_IDENTIFY 0xF2
510  #define KEYBOARD_CMD_REPEAT 0xF3
511  #define KEYBOARD_CMD_ENABLE 0xF4
512  #define KEYBOARD_CMD_DISABLE 0xF5
513  #define KEYBOARD_CMD_DEFAULT 0xF6
514  #define KEYBOARD_CMD_RESET_TEST 0xFF
515 
519  struct keyMapInfo
520  {
521  uint16_t *plain_map;
522  uint16_t *shift_map;
523  uint16_t *altgr_map;
524  uint16_t *alt_map;
525  uint16_t *ctrl_map;
526  uint16_t *shift_ctrl_map;
527  uint16_t *altgr_ctrl_map;
528  uint16_t *shift_alt_map;
529  uint16_t *altgr_alt_map;
530  uint16_t *ctrl_alt_map;
531  };
532 
533  struct keyMap
534  {
535  char code[2];
537  };
538 
539  void keyboardInit(struct object *obj);
540  void keyboardSend(uint8_t cmd);
541  void keyboardSetLEDFlags(uint32_t flags);
542  uint32_t keyboardGetLEDFlags();
543 
544 #endif
545 
549 #endif /* _H_KEYBOARD_ */
const struct keyMap * keyMaps
Supported keymaps.
Definition: keyboard.c:82
uint16_t * shift_alt_map
Definition: keyboard.h:528
uint16_t * altgr_alt_map
Definition: keyboard.h:529
uint32_t keyboardGetLEDFlags()
Return the current active LED flags.
Definition: keyboard.c:333
uint8_t shiftLocked
Definition: keyboard.h:456
uint16_t * altgr_ctrl_map
Definition: keyboard.h:527
void keyboardSetLEDFlags(uint32_t flags)
Set LED Flags.
Definition: keyboard.c:322
uint16_t * alt_map
Definition: keyboard.h:524
struct keyModifier modifiers
Definition: keyboard.c:87
uint16_t * shift_ctrl_map
Definition: keyboard.h:526
void keyboardInit(struct object *obj)
Initializes the keyboard.
Definition: keyboard.c:282
uint16_t * altgr_map
Definition: keyboard.h:523
uint16_t * ctrl_alt_map
Definition: keyboard.h:530
uint8_t altgr
Definition: keyboard.h:459
void keyboardSend(uint8_t cmd)
Send a command to the keyboard controller.
Definition: keyboard.c:307
uint8_t alt
Definition: keyboard.h:458
uint8_t shift
Definition: keyboard.h:455
uint8_t ctrl
Definition: keyboard.h:457
bool pressed
Definition: keyboard.h:464
uint16_t * shift_map
Definition: keyboard.h:522
uint16_t * ctrl_map
Definition: keyboard.h:525
uint16_t keyCode
Definition: keyboard.h:466
uint16_t * plain_map
Definition: keyboard.h:521