Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keycode.h 11KB

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