]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | Copyright 2011,2012 Jun Wako <wakojun@gmail.com> | |
3 | ||
4 | This program is free software: you can redistribute it and/or modify | |
5 | it under the terms of the GNU General Public License as published by | |
6 | the Free Software Foundation, either version 2 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | ||
18 | /* | |
19 | * Keycodes based on HID Usage Keyboard/Keypad Page(0x07) plus special codes | |
20 | * http://www.usb.org/developers/devclass_docs/Hut1_12.pdf | |
21 | */ | |
22 | #ifndef KEYCODE_H | |
23 | #define KEYCODE_H | |
24 | ||
25 | ||
26 | #define IS_ERROR(code) (KC_ROLL_OVER <= (code) && (code) <= KC_UNDEFINED) | |
27 | #define IS_ANY(code) (KC_A <= (code) && (code) <= 0xFF) | |
28 | ||
29 | #ifndef ACTIONMAP_ENABLE | |
30 | #define IS_KEY(code) (KC_A <= (code) && (code) <= KC_EXSEL) | |
31 | #else | |
32 | #define IS_KEY(code) ((KC_A <= (code) && (code) <= KC_EXSEL) || \ | |
33 | (KC_KP_00 <= (code) && (code) <= KC_KP_HEXADECIMAL)) | |
34 | #endif | |
35 | ||
36 | #define IS_MOD(code) (KC_LCTRL <= (code) && (code) <= KC_RGUI) | |
37 | ||
38 | ||
39 | #define IS_SPECIAL(code) ((0xA5 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) | |
40 | #define IS_SYSTEM(code) (KC_PWR <= (code) && (code) <= KC_WAKE) | |
41 | #define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_WFAV) | |
42 | #define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN31) | |
43 | #define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) | |
44 | #define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) | |
45 | #define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN5) | |
46 | #define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT) | |
47 | #define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2) | |
48 | ||
49 | #define MOD_BIT(code) (1<<MOD_INDEX(code)) | |
50 | #define MOD_INDEX(code) ((code) & 0x07) | |
51 | #define FN_BIT(code) (1<<FN_INDEX(code)) | |
52 | #define FN_INDEX(code) ((code) - KC_FN0) | |
53 | #define FN_MIN KC_FN0 | |
54 | #define FN_MAX KC_FN31 | |
55 | ||
56 | ||
57 | /* | |
58 | * Short names for ease of definition of keymap | |
59 | */ | |
60 | #define KC_LCTL KC_LCTRL | |
61 | #define KC_RCTL KC_RCTRL | |
62 | #define KC_LSFT KC_LSHIFT | |
63 | #define KC_RSFT KC_RSHIFT | |
64 | #define KC_ESC KC_ESCAPE | |
65 | #define KC_BSPC KC_BSPACE | |
66 | #define KC_ENT KC_ENTER | |
67 | #define KC_DEL KC_DELETE | |
68 | #define KC_INS KC_INSERT | |
69 | #define KC_CAPS KC_CAPSLOCK | |
70 | #define KC_CLCK KC_CAPSLOCK | |
71 | #define KC_RGHT KC_RIGHT | |
72 | #define KC_PGDN KC_PGDOWN | |
73 | #define KC_PSCR KC_PSCREEN | |
74 | #define KC_SLCK KC_SCROLLLOCK | |
75 | #define KC_PAUS KC_PAUSE | |
76 | #define KC_BRK KC_PAUSE | |
77 | #define KC_NLCK KC_NUMLOCK | |
78 | #define KC_SPC KC_SPACE | |
79 | #define KC_MINS KC_MINUS | |
80 | #define KC_EQL KC_EQUAL | |
81 | #define KC_GRV KC_GRAVE | |
82 | #define KC_RBRC KC_RBRACKET | |
83 | #define KC_LBRC KC_LBRACKET | |
84 | #define KC_COMM KC_COMMA | |
85 | #define KC_BSLS KC_BSLASH | |
86 | #define KC_SLSH KC_SLASH | |
87 | #define KC_SCLN KC_SCOLON | |
88 | #define KC_QUOT KC_QUOTE | |
89 | #define KC_APP KC_APPLICATION | |
90 | #define KC_NUHS KC_NONUS_HASH | |
91 | #define KC_NUBS KC_NONUS_BSLASH | |
92 | #define KC_LCAP KC_LOCKING_CAPS | |
93 | #define KC_LNUM KC_LOCKING_NUM | |
94 | #define KC_LSCR KC_LOCKING_SCROLL | |
95 | #define KC_ERAS KC_ALT_ERASE | |
96 | #define KC_CLR KC_CLEAR | |
97 | /* Japanese specific */ | |
98 | #define KC_ZKHK KC_GRAVE | |
99 | #define KC_RO KC_INT1 | |
100 | #define KC_KANA KC_INT2 | |
101 | #define KC_JYEN KC_INT3 | |
102 | #define KC_JPY KC_INT3 | |
103 | #define KC_HENK KC_INT4 | |
104 | #define KC_MHEN KC_INT5 | |
105 | /* Korean specific */ | |
106 | #define KC_HAEN KC_LANG1 | |
107 | #define KC_HANJ KC_LANG2 | |
108 | /* Keypad */ | |
109 | #define KC_P1 KC_KP_1 | |
110 | #define KC_P2 KC_KP_2 | |
111 | #define KC_P3 KC_KP_3 | |
112 | #define KC_P4 KC_KP_4 | |
113 | #define KC_P5 KC_KP_5 | |
114 | #define KC_P6 KC_KP_6 | |
115 | #define KC_P7 KC_KP_7 | |
116 | #define KC_P8 KC_KP_8 | |
117 | #define KC_P9 KC_KP_9 | |
118 | #define KC_P0 KC_KP_0 | |
119 | #define KC_PDOT KC_KP_DOT | |
120 | #define KC_PCMM KC_KP_COMMA | |
121 | #define KC_PSLS KC_KP_SLASH | |
122 | #define KC_PAST KC_KP_ASTERISK | |
123 | #define KC_PMNS KC_KP_MINUS | |
124 | #define KC_PPLS KC_KP_PLUS | |
125 | #define KC_PEQL KC_KP_EQUAL | |
126 | #define KC_PENT KC_KP_ENTER | |
127 | /* Unix function key */ | |
128 | #define KC_EXEC KC_EXECUTE | |
129 | #define KC_SLCT KC_SELECT | |
130 | #define KC_AGIN KC_AGAIN | |
131 | #define KC_PSTE KC_PASTE | |
132 | /* Mousekey */ | |
133 | #define KC_MS_U KC_MS_UP | |
134 | #define KC_MS_D KC_MS_DOWN | |
135 | #define KC_MS_L KC_MS_LEFT | |
136 | #define KC_MS_R KC_MS_RIGHT | |
137 | #define KC_BTN1 KC_MS_BTN1 | |
138 | #define KC_BTN2 KC_MS_BTN2 | |
139 | #define KC_BTN3 KC_MS_BTN3 | |
140 | #define KC_BTN4 KC_MS_BTN4 | |
141 | #define KC_BTN5 KC_MS_BTN5 | |
142 | #define KC_WH_U KC_MS_WH_UP | |
143 | #define KC_WH_D KC_MS_WH_DOWN | |
144 | #define KC_WH_L KC_MS_WH_LEFT | |
145 | #define KC_WH_R KC_MS_WH_RIGHT | |
146 | #define KC_ACL0 KC_MS_ACCEL0 | |
147 | #define KC_ACL1 KC_MS_ACCEL1 | |
148 | #define KC_ACL2 KC_MS_ACCEL2 | |
149 | /* Sytem Control */ | |
150 | #define KC_PWR KC_SYSTEM_POWER | |
151 | #define KC_SLEP KC_SYSTEM_SLEEP | |
152 | #define KC_WAKE KC_SYSTEM_WAKE | |
153 | /* Consumer Page */ | |
154 | #define KC_MUTE KC_AUDIO_MUTE | |
155 | #define KC_VOLU KC_AUDIO_VOL_UP | |
156 | #define KC_VOLD KC_AUDIO_VOL_DOWN | |
157 | #define KC_MNXT KC_MEDIA_NEXT_TRACK | |
158 | #define KC_MPRV KC_MEDIA_PREV_TRACK | |
159 | #define KC_MFFD KC_MEDIA_FAST_FORWARD | |
160 | #define KC_MRWD KC_MEDIA_REWIND | |
161 | #define KC_MSTP KC_MEDIA_STOP | |
162 | #define KC_MPLY KC_MEDIA_PLAY_PAUSE | |
163 | #define KC_EJCT KC_MEDIA_EJECT | |
164 | #define KC_MSEL KC_MEDIA_SELECT | |
165 | #define KC_MAIL KC_MAIL | |
166 | #define KC_CALC KC_CALCULATOR | |
167 | #define KC_MYCM KC_MY_COMPUTER | |
168 | #define KC_WSCH KC_WWW_SEARCH | |
169 | #define KC_WHOM KC_WWW_HOME | |
170 | #define KC_WBAK KC_WWW_BACK | |
171 | #define KC_WFWD KC_WWW_FORWARD | |
172 | #define KC_WSTP KC_WWW_STOP | |
173 | #define KC_WREF KC_WWW_REFRESH | |
174 | #define KC_WFAV KC_WWW_FAVORITES | |
175 | /* Jump to bootloader */ | |
176 | #define KC_BTLD KC_BOOTLOADER | |
177 | /* Transparent */ | |
178 | #define KC_TRANSPARENT 1 | |
179 | #define KC_TRNS KC_TRANSPARENT | |
180 | ||
181 | ||
182 | ||
183 | /* USB HID Keyboard/Keypad Usage(0x07) */ | |
184 | enum hid_keyboard_keypad_usage { | |
185 | KC_NO = 0x00, | |
186 | KC_ROLL_OVER, | |
187 | KC_POST_FAIL, | |
188 | KC_UNDEFINED, | |
189 | KC_A, /* 0x04 */ | |
190 | KC_B, | |
191 | KC_C, | |
192 | KC_D, | |
193 | KC_E, | |
194 | KC_F, | |
195 | KC_G, | |
196 | KC_H, | |
197 | KC_I, | |
198 | KC_J, | |
199 | KC_K, | |
200 | KC_L, | |
201 | KC_M, /* 0x10 */ | |
202 | KC_N, | |
203 | KC_O, | |
204 | KC_P, | |
205 | KC_Q, | |
206 | KC_R, | |
207 | KC_S, | |
208 | KC_T, | |
209 | KC_U, | |
210 | KC_V, | |
211 | KC_W, | |
212 | KC_X, | |
213 | KC_Y, | |
214 | KC_Z, | |
215 | KC_1, | |
216 | KC_2, | |
217 | KC_3, /* 0x20 */ | |
218 | KC_4, | |
219 | KC_5, | |
220 | KC_6, | |
221 | KC_7, | |
222 | KC_8, | |
223 | KC_9, | |
224 | KC_0, | |
225 | KC_ENTER, | |
226 | KC_ESCAPE, | |
227 | KC_BSPACE, | |
228 | KC_TAB, | |
229 | KC_SPACE, | |
230 | KC_MINUS, | |
231 | KC_EQUAL, | |
232 | KC_LBRACKET, | |
233 | KC_RBRACKET, /* 0x30 */ | |
234 | KC_BSLASH, /* \ (and |) */ | |
235 | KC_NONUS_HASH, /* Non-US # and ~ (Typically near the Enter key) */ | |
236 | KC_SCOLON, /* ; (and :) */ | |
237 | KC_QUOTE, /* ' and " */ | |
238 | KC_GRAVE, /* Grave accent and tilde */ | |
239 | KC_COMMA, /* , and < */ | |
240 | KC_DOT, /* . and > */ | |
241 | KC_SLASH, /* / and ? */ | |
242 | KC_CAPSLOCK, | |
243 | KC_F1, | |
244 | KC_F2, | |
245 | KC_F3, | |
246 | KC_F4, | |
247 | KC_F5, | |
248 | KC_F6, | |
249 | KC_F7, /* 0x40 */ | |
250 | KC_F8, | |
251 | KC_F9, | |
252 | KC_F10, | |
253 | KC_F11, | |
254 | KC_F12, | |
255 | KC_PSCREEN, | |
256 | KC_SCROLLLOCK, | |
257 | KC_PAUSE, | |
258 | KC_INSERT, | |
259 | KC_HOME, | |
260 | KC_PGUP, | |
261 | KC_DELETE, | |
262 | KC_END, | |
263 | KC_PGDOWN, | |
264 | KC_RIGHT, | |
265 | KC_LEFT, /* 0x50 */ | |
266 | KC_DOWN, | |
267 | KC_UP, | |
268 | KC_NUMLOCK, | |
269 | KC_KP_SLASH, | |
270 | KC_KP_ASTERISK, | |
271 | KC_KP_MINUS, | |
272 | KC_KP_PLUS, | |
273 | KC_KP_ENTER, | |
274 | KC_KP_1, | |
275 | KC_KP_2, | |
276 | KC_KP_3, | |
277 | KC_KP_4, | |
278 | KC_KP_5, | |
279 | KC_KP_6, | |
280 | KC_KP_7, | |
281 | KC_KP_8, /* 0x60 */ | |
282 | KC_KP_9, | |
283 | KC_KP_0, | |
284 | KC_KP_DOT, | |
285 | KC_NONUS_BSLASH, /* Non-US \ and | (Typically near the Left-Shift key) */ | |
286 | KC_APPLICATION, | |
287 | KC_POWER, | |
288 | KC_KP_EQUAL, | |
289 | KC_F13, | |
290 | KC_F14, | |
291 | KC_F15, | |
292 | KC_F16, | |
293 | KC_F17, | |
294 | KC_F18, | |
295 | KC_F19, | |
296 | KC_F20, | |
297 | KC_F21, /* 0x70 */ | |
298 | KC_F22, | |
299 | KC_F23, | |
300 | KC_F24, | |
301 | KC_EXECUTE, | |
302 | KC_HELP, | |
303 | KC_MENU, | |
304 | KC_SELECT, | |
305 | KC_STOP, | |
306 | KC_AGAIN, | |
307 | KC_UNDO, | |
308 | KC_CUT, | |
309 | KC_COPY, | |
310 | KC_PASTE, | |
311 | KC_FIND, | |
312 | KC__MUTE, | |
313 | KC__VOLUP, /* 0x80 */ | |
314 | KC__VOLDOWN, | |
315 | KC_LOCKING_CAPS, /* locking Caps Lock */ | |
316 | KC_LOCKING_NUM, /* locking Num Lock */ | |
317 | KC_LOCKING_SCROLL, /* locking Scroll Lock */ | |
318 | KC_KP_COMMA, | |
319 | KC_KP_EQUAL_AS400, /* equal sign on AS/400 */ | |
320 | KC_INT1, | |
321 | KC_INT2, | |
322 | KC_INT3, | |
323 | KC_INT4, | |
324 | KC_INT5, | |
325 | KC_INT6, | |
326 | KC_INT7, | |
327 | KC_INT8, | |
328 | KC_INT9, | |
329 | KC_LANG1, /* 0x90 */ | |
330 | KC_LANG2, | |
331 | KC_LANG3, | |
332 | KC_LANG4, | |
333 | KC_LANG5, | |
334 | KC_LANG6, | |
335 | KC_LANG7, | |
336 | KC_LANG8, | |
337 | KC_LANG9, | |
338 | KC_ALT_ERASE, | |
339 | KC_SYSREQ, | |
340 | KC_CANCEL, | |
341 | KC_CLEAR, | |
342 | KC_PRIOR, | |
343 | KC_RETURN, | |
344 | KC_SEPARATOR, | |
345 | KC_OUT, /* 0xA0 */ | |
346 | KC_OPER, | |
347 | KC_CLEAR_AGAIN, | |
348 | KC_CRSEL, | |
349 | KC_EXSEL, /* 0xA4 */ | |
350 | ||
351 | /* NOTE: Following code range(0xB0-DD) are shared with special codes of 8-bit keymap */ | |
352 | KC_KP_00 = 0xB0, | |
353 | KC_KP_000, | |
354 | KC_THOUSANDS_SEPARATOR, | |
355 | KC_DECIMAL_SEPARATOR, | |
356 | KC_CURRENCY_UNIT, | |
357 | KC_CURRENCY_SUB_UNIT, | |
358 | KC_KP_LPAREN, | |
359 | KC_KP_RPAREN, | |
360 | KC_KP_LCBRACKET, /* { */ | |
361 | KC_KP_RCBRACKET, /* } */ | |
362 | KC_KP_TAB, | |
363 | KC_KP_BSPACE, | |
364 | KC_KP_A, | |
365 | KC_KP_B, | |
366 | KC_KP_C, | |
367 | KC_KP_D, | |
368 | KC_KP_E, /* 0xC0 */ | |
369 | KC_KP_F, | |
370 | KC_KP_XOR, | |
371 | KC_KP_HAT, | |
372 | KC_KP_PERC, | |
373 | KC_KP_LT, | |
374 | KC_KP_GT, | |
375 | KC_KP_AND, | |
376 | KC_KP_LAZYAND, | |
377 | KC_KP_OR, | |
378 | KC_KP_LAZYOR, | |
379 | KC_KP_COLON, | |
380 | KC_KP_HASH, | |
381 | KC_KP_SPACE, | |
382 | KC_KP_ATMARK, | |
383 | KC_KP_EXCLAMATION, | |
384 | KC_KP_MEM_STORE, /* 0xD0 */ | |
385 | KC_KP_MEM_RECALL, | |
386 | KC_KP_MEM_CLEAR, | |
387 | KC_KP_MEM_ADD, | |
388 | KC_KP_MEM_SUB, | |
389 | KC_KP_MEM_MUL, | |
390 | KC_KP_MEM_DIV, | |
391 | KC_KP_PLUS_MINUS, | |
392 | KC_KP_CLEAR, | |
393 | KC_KP_CLEAR_ENTRY, | |
394 | KC_KP_BINARY, | |
395 | KC_KP_OCTAL, | |
396 | KC_KP_DECIMAL, | |
397 | KC_KP_HEXADECIMAL, /* 0xDD */ | |
398 | ||
399 | /* Modifiers */ | |
400 | KC_LCTRL = 0xE0, | |
401 | KC_LSHIFT, | |
402 | KC_LALT, | |
403 | KC_LGUI, | |
404 | KC_RCTRL, | |
405 | KC_RSHIFT, | |
406 | KC_RALT, | |
407 | KC_RGUI, /* 0xE7 */ | |
408 | }; | |
409 | ||
410 | /* Special keycodes for 8-bit keymap | |
411 | NOTE: 0xA5-DF and 0xE8-FF are used for internal special purpose */ | |
412 | enum internal_special_keycodes { | |
413 | /* System Control */ | |
414 | KC_SYSTEM_POWER = 0xA5, | |
415 | KC_SYSTEM_SLEEP, | |
416 | KC_SYSTEM_WAKE, | |
417 | ||
418 | /* Media Control */ | |
419 | KC_AUDIO_MUTE, | |
420 | KC_AUDIO_VOL_UP, | |
421 | KC_AUDIO_VOL_DOWN, | |
422 | KC_MEDIA_NEXT_TRACK, | |
423 | KC_MEDIA_PREV_TRACK, | |
424 | KC_MEDIA_FAST_FORWARD, | |
425 | KC_MEDIA_REWIND, | |
426 | KC_MEDIA_STOP, | |
427 | KC_MEDIA_PLAY_PAUSE, | |
428 | KC_MEDIA_EJECT, | |
429 | KC_MEDIA_SELECT, | |
430 | KC_MAIL, | |
431 | KC_CALCULATOR, | |
432 | KC_MY_COMPUTER, | |
433 | KC_WWW_SEARCH, | |
434 | KC_WWW_HOME, | |
435 | KC_WWW_BACK, | |
436 | KC_WWW_FORWARD, | |
437 | KC_WWW_STOP, | |
438 | KC_WWW_REFRESH, | |
439 | KC_WWW_FAVORITES, /* 0xBC */ | |
440 | ||
441 | /* Jump to bootloader */ | |
442 | KC_BOOTLOADER = 0xBF, | |
443 | ||
444 | /* Fn key */ | |
445 | KC_FN0 = 0xC0, | |
446 | KC_FN1, | |
447 | KC_FN2, | |
448 | KC_FN3, | |
449 | KC_FN4, | |
450 | KC_FN5, | |
451 | KC_FN6, | |
452 | KC_FN7, | |
453 | KC_FN8, | |
454 | KC_FN9, | |
455 | KC_FN10, | |
456 | KC_FN11, | |
457 | KC_FN12, | |
458 | KC_FN13, | |
459 | KC_FN14, | |
460 | KC_FN15, | |
461 | ||
462 | KC_FN16 = 0xD0, | |
463 | KC_FN17, | |
464 | KC_FN18, | |
465 | KC_FN19, | |
466 | KC_FN20, | |
467 | KC_FN21, | |
468 | KC_FN22, | |
469 | KC_FN23, | |
470 | KC_FN24, | |
471 | KC_FN25, | |
472 | KC_FN26, | |
473 | KC_FN27, | |
474 | KC_FN28, | |
475 | KC_FN29, | |
476 | KC_FN30, | |
477 | KC_FN31, /* 0xDF */ | |
478 | ||
479 | /**************************************/ | |
480 | /* 0xE0-E7 for Modifiers. DO NOT USE. */ | |
481 | /**************************************/ | |
482 | ||
483 | /* Mousekey */ | |
484 | KC_MS_UP = 0xF0, | |
485 | KC_MS_DOWN, | |
486 | KC_MS_LEFT, | |
487 | KC_MS_RIGHT, | |
488 | KC_MS_BTN1, | |
489 | KC_MS_BTN2, | |
490 | KC_MS_BTN3, | |
491 | KC_MS_BTN4, | |
492 | KC_MS_BTN5, /* 0xF8 */ | |
493 | /* Mousekey wheel */ | |
494 | KC_MS_WH_UP, | |
495 | KC_MS_WH_DOWN, | |
496 | KC_MS_WH_LEFT, | |
497 | KC_MS_WH_RIGHT, /* 0xFC */ | |
498 | /* Mousekey accel */ | |
499 | KC_MS_ACCEL0, | |
500 | KC_MS_ACCEL1, | |
501 | KC_MS_ACCEL2 /* 0xFF */ | |
502 | }; | |
503 | ||
504 | #endif /* KEYCODE_H */ |