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.

usb_keycodes.h 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. /*
  2. Copyright 2011 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. * Key codes: HID Keyboard/Keypad Page(0x07)
  16. * http://www.usb.org/developers/devclass_docs/Hut1_12.pdf
  17. */
  18. #ifndef USB_KEYCODES_H
  19. #define USB_KEYCODES_H
  20. #define IS_ERROR(code) (KB_ROLL_OVER <= (code) && (code) <= KB_UNDEFINED)
  21. #define IS_KEY(code) (KB_A <= (code) && (code) <= KB_EXSEL)
  22. #define IS_MOD(code) (KB_LCTRL <= (code) && (code) <= KB_RGUI)
  23. #define IS_FN(code) (KB_FN0 <= (code) && (code) <= KB_FN7)
  24. #define IS_MOUSEKEY(code) (KB_MS_UP <= (code) && (code) <= KB_MS_WH_RIGHT)
  25. #define IS_MOUSEKEY_MOVE(code) (KB_MS_UP <= (code) && (code) <= KB_MS_RIGHT)
  26. #define IS_MOUSEKEY_BUTTON(code) (KB_MS_BTN1 <= (code) && (code) <= KB_MS_BTN5)
  27. #define IS_MOUSEKEY_WHEEL(code) (KB_MS_WH_UP <= (code) && (code) <= KB_MS_WH_RIGHT)
  28. #define MOD_BIT(code) (1<<((code) & 0x07))
  29. #define FN_BIT(code) (1<<((code) - KB_FN0))
  30. /* Short names */
  31. #define KB_LCTL KB_LCTRL
  32. #define KB_RCTL KB_RCTRL
  33. #define KB_LSFT KB_LSHIFT
  34. #define KB_RSFT KB_RSHIFT
  35. #define KB_ESC KB_ESCAPE
  36. #define KB_BSPC KB_BSPACE
  37. #define KB_ENT KB_ENTER
  38. #define KB_DEL KB_DELETE
  39. #define KB_INS KB_INSERT
  40. #define KB_CAPS KB_CAPSLOCK
  41. #define KB_RGHT KB_RIGHT
  42. #define KB_PGDN KB_PGDOWN
  43. #define KB_PSCR KB_PSCREEN
  44. #define KB_SLCK KB_SCKLOCK
  45. #define KB_BRK KB_BREAK
  46. #define KB_NLCK KB_NUMLOCK
  47. #define KB_SPC KB_SPACE
  48. #define KB_MINS KB_MINUS
  49. #define KB_EQL KB_EQUAL
  50. #define KB_GRV KB_GRAVE
  51. #define KB_RBRC KB_RBRACKET
  52. #define KB_LBRC KB_LBRACKET
  53. #define KB_COMM KB_COMMA
  54. #define KB_BSLS KB_BSLASH
  55. #define KB_SLSH KB_SLASH
  56. #define KB_SCLN KB_SCOLON
  57. #define KB_QUOT KB_QUOTE
  58. #define KB_APP KB_APPLICATION
  59. #define KB_NUHS KB_NONUS_HASH
  60. #define KB_NUBS KB_NONUS_BSLASH
  61. #define KB_ERAS KB_ALT_ERASE,
  62. #define KB_CLR KB_CLEAR
  63. /* for Japanese */
  64. #define KB_ZKHK KB_GRAVE
  65. #define KB_RO KB_INT1
  66. #define KB_KANA KB_INT2
  67. #define KB_JYEN KB_INT3
  68. #define KB_HENK KB_INT4
  69. #define KB_MHEN KB_INT5
  70. /* Keypad */
  71. #define KB_P1 KB_KP_1
  72. #define KB_P2 KB_KP_2
  73. #define KB_P3 KB_KP_3
  74. #define KB_P4 KB_KP_4
  75. #define KB_P5 KB_KP_5
  76. #define KB_P6 KB_KP_6
  77. #define KB_P7 KB_KP_7
  78. #define KB_P8 KB_KP_8
  79. #define KB_P9 KB_KP_9
  80. #define KB_P0 KB_KP_0
  81. #define KB_PDOT KB_KP_DOT
  82. #define KB_PCMM KB_KP_COMMA
  83. #define KB_PSLS KB_KP_SLASH
  84. #define KB_PAST KB_KP_ASTERISK
  85. #define KB_PMNS KB_KP_MINUS
  86. #define KB_PPLS KB_KP_PLUS
  87. #define KB_PEQL KB_KP_EQUAL
  88. #define KB_PENT KB_KP_ENTER
  89. /* Mousekey */
  90. #define KB_MS_U KB_MS_UP
  91. #define KB_MS_D KB_MS_DOWN
  92. #define KB_MS_L KB_MS_LEFT
  93. #define KB_MS_R KB_MS_RIGHT
  94. #define KB_BTN1 KB_MS_BTN1
  95. #define KB_BTN2 KB_MS_BTN2
  96. #define KB_BTN3 KB_MS_BTN3
  97. #define KB_BTN4 KB_MS_BTN4
  98. #define KB_BTN5 KB_MS_BTN5
  99. #define KB_WH_U KB_MS_WH_UP
  100. #define KB_WH_D KB_MS_WH_DOWN
  101. #define KB_WH_L KB_MS_WH_LEFT
  102. #define KB_WH_R KB_MS_WH_RIGHT
  103. /* Sytem Control & Consumer usage */
  104. #define KB_PWR KB_SYSTEM_POWER
  105. #define KB_SLEP KB_SYSTEM_SLEEP
  106. #define KB_WAKE KB_SYSTEM_WAKE
  107. #define KB_MUTE KB_AUDIO_MUTE
  108. #define KB_VOLU KB_AUDIO_VOL_UP
  109. #define KB_VOLD KB_AUDIO_VOL_DOWN
  110. #define KB_MNXT KB_MEDIA_NEXT_TRACK
  111. #define KB_MPRV KB_MEDIA_PREV_TRACK
  112. #define KB_MSTP KB_MEDIA_STOP
  113. #define KB_MPLY KB_MEDIA_PLAY_PAUSE
  114. #define KB_MSEL KB_MEDIA_SELECT
  115. #define KB_MAIL KB_MAIL
  116. #define KB_CALC KB_CALCULATOR
  117. #define KB_MYCM KB_MY_COMPUTER
  118. #define KB_WSCH KB_WWW_SEARCH
  119. #define KB_WHOM KB_WWW_HOME
  120. #define KB_WBAK KB_WWW_BACK
  121. #define KB_WFWD KB_WWW_FORWARD
  122. #define KB_WSTP KB_WWW_STOP
  123. #define KB_WREF KB_WWW_REFRESH
  124. #define KB_WFAV KB_WWW_FAVORITES
  125. /* Special keycode */
  126. enum special_keycodes {
  127. /* System Control */
  128. KB_SYSTEM_POWER = 0xB0,
  129. KB_SYSTEM_SLEEP,
  130. KB_SYSTEM_WAKE,
  131. /* Consumer Page */
  132. KB_AUDIO_MUTE,
  133. KB_AUDIO_VOL_UP,
  134. KB_AUDIO_VOL_DOWN,
  135. KB_MEDIA_NEXT_TRACK,
  136. KB_MEDIA_PREV_TRACK,
  137. KB_MEDIA_STOP,
  138. KB_MEDIA_PLAY_PAUSE,
  139. KB_MEDIA_SELECT,
  140. KB_MAIL,
  141. KB_CALCULATOR,
  142. KB_MY_COMPUTER,
  143. KB_WWW_SEARCH,
  144. KB_WWW_HOME,
  145. KB_WWW_BACK, /* 0xC0 */
  146. KB_WWW_FORWARD,
  147. KB_WWW_STOP,
  148. KB_WWW_REFRESH,
  149. KB_WWW_FAVORITES,
  150. /* reserve 0xE0-E7 for Modifiers */
  151. /* Layer Switching */
  152. KB_FN0 = 0xE8,
  153. KB_FN1,
  154. KB_FN2,
  155. KB_FN3,
  156. KB_FN4,
  157. KB_FN5,
  158. KB_FN6,
  159. KB_FN7,
  160. /* Mousekey */
  161. KB_MS_UP = 0xF0,
  162. KB_MS_DOWN,
  163. KB_MS_LEFT,
  164. KB_MS_RIGHT,
  165. KB_MS_BTN1,
  166. KB_MS_BTN2,
  167. KB_MS_BTN3,
  168. KB_MS_BTN4,
  169. KB_MS_BTN5,
  170. /* Mousekey wheel */
  171. KB_MS_WH_UP,
  172. KB_MS_WH_DOWN,
  173. KB_MS_WH_LEFT,
  174. KB_MS_WH_RIGHT,
  175. };
  176. enum keycodes {
  177. KB_NO = 0,
  178. KB_ROLL_OVER,
  179. KB_POST_FAIL,
  180. KB_UNDEFINED,
  181. KB_A,
  182. KB_B,
  183. KB_C,
  184. KB_D,
  185. KB_E,
  186. KB_F,
  187. KB_G,
  188. KB_H,
  189. KB_I,
  190. KB_J,
  191. KB_K,
  192. KB_L,
  193. KB_M, /* 0x10 */
  194. KB_N,
  195. KB_O,
  196. KB_P,
  197. KB_Q,
  198. KB_R,
  199. KB_S,
  200. KB_T,
  201. KB_U,
  202. KB_V,
  203. KB_W,
  204. KB_X,
  205. KB_Y,
  206. KB_Z,
  207. KB_1,
  208. KB_2,
  209. KB_3, /* 0x20 */
  210. KB_4,
  211. KB_5,
  212. KB_6,
  213. KB_7,
  214. KB_8,
  215. KB_9,
  216. KB_0,
  217. KB_ENTER,
  218. KB_ESCAPE,
  219. KB_BSPACE,
  220. KB_TAB,
  221. KB_SPACE,
  222. KB_MINUS,
  223. KB_EQUAL,
  224. KB_LBRACKET,
  225. KB_RBRACKET, /* 0x30 */
  226. KB_BSLASH, /* \ (and |) */
  227. KB_NONUS_HASH, /* Non-US # and ~ */
  228. KB_SCOLON, /* ; (and :) */
  229. KB_QUOTE, /* ' and " */
  230. KB_GRAVE, /* Grave accent and tilde */
  231. KB_COMMA, /* , and < */
  232. KB_DOT, /* . and > */
  233. KB_SLASH, /* / and ? */
  234. KB_CAPSLOCK,
  235. KB_F1,
  236. KB_F2,
  237. KB_F3,
  238. KB_F4,
  239. KB_F5,
  240. KB_F6,
  241. KB_F7, /* 0x40 */
  242. KB_F8,
  243. KB_F9,
  244. KB_F10,
  245. KB_F11,
  246. KB_F12,
  247. KB_PSCREEN,
  248. KB_SCKLOCK,
  249. KB_BREAK,
  250. KB_INSERT,
  251. KB_HOME,
  252. KB_PGUP,
  253. KB_DELETE,
  254. KB_END,
  255. KB_PGDOWN,
  256. KB_RIGHT,
  257. KB_LEFT, /* 0x50 */
  258. KB_DOWN,
  259. KB_UP,
  260. KB_NUMLOCK,
  261. KB_KP_SLASH,
  262. KB_KP_ASTERISK,
  263. KB_KP_MINUS,
  264. KB_KP_PLUS,
  265. KB_KP_ENTER,
  266. KB_KP_1,
  267. KB_KP_2,
  268. KB_KP_3,
  269. KB_KP_4,
  270. KB_KP_5,
  271. KB_KP_6,
  272. KB_KP_7,
  273. KB_KP_8, /* 0x60 */
  274. KB_KP_9,
  275. KB_KP_0,
  276. KB_KP_DOT,
  277. KB_NONUS_BSLASH, /* Non-US \ and | */
  278. KB_APPLICATION,
  279. KB_POWER,
  280. KB_KP_EQUAL,
  281. KB_F13,
  282. KB_F14,
  283. KB_F15,
  284. KB_F16,
  285. KB_F17,
  286. KB_F18,
  287. KB_F19,
  288. KB_F20,
  289. KB_F21, /* 0x70 */
  290. KB_F22,
  291. KB_F23,
  292. KB_F24,
  293. KB_EXECUTE,
  294. KB_HELP,
  295. KB_MENU,
  296. KB_SELECT,
  297. KB_STOP,
  298. KB_AGAIN,
  299. KB_UNDO,
  300. KB_CUT,
  301. KB_COPY,
  302. KB_PASTE,
  303. KB_FIND,
  304. KB__MUTE,
  305. KB__VOLUP, /* 0x80 */
  306. KB__VOLDOWN,
  307. KB_LOCKING_CAPS, /* locking Caps Lock */
  308. KB_LOCKING_NUM, /* locking Num Lock */
  309. KB_LOCKING_SCROLL, /* locking Scroll Lock */
  310. KB_KP_COMMA,
  311. KB_KP_EQUAL_AS400, /* equal sign on AS/400 */
  312. KB_INT1,
  313. KB_INT2,
  314. KB_INT3,
  315. KB_INT4,
  316. KB_INT5,
  317. KB_INT6,
  318. KB_INT7,
  319. KB_INT8,
  320. KB_INT9,
  321. KB_LANG1, /* 0x90 */
  322. KB_LANG2,
  323. KB_LANG3,
  324. KB_LANG4,
  325. KB_LANG5,
  326. KB_LANG6,
  327. KB_LANG7,
  328. KB_LANG8,
  329. KB_LANG9,
  330. KB_ALT_ERASE,
  331. KB_SYSREQ,
  332. KB_CANCEL,
  333. KB_CLEAR,
  334. KB_PRIOR,
  335. KB_RETURN,
  336. KB_SEPARATOR,
  337. KB_OUT, /* 0xA0 */
  338. KB_OPER,
  339. KB_CLEAR_AGAIN,
  340. KB_CRSEL,
  341. KB_EXSEL,
  342. /* NOTE: 0xB0-DF are used as special_keycodes */
  343. #if 0
  344. KB_KP_00 = 0xB0,
  345. KB_KP_000,
  346. KB_THOUSANDS_SEPARATOR,
  347. KB_DECIMAL_SEPARATOR,
  348. KB_CURRENCY_UNIT,
  349. KB_CURRENCY_SUB_UNIT,
  350. KB_KP_LPAREN,
  351. KB_KP_RPAREN,
  352. KB_KP_LCBRACKET, /* { */
  353. KB_KP_RCBRACKET, /* } */
  354. KB_KP_TAB,
  355. KB_KP_BSPACE,
  356. KB_KP_A,
  357. KB_KP_B,
  358. KB_KP_C,
  359. KB_KP_D,
  360. KB_KP_E, /* 0xC0 */
  361. KB_KP_F,
  362. KB_KP_XOR,
  363. KB_KP_HAT,
  364. KB_KP_PERC,
  365. KB_KP_LT,
  366. KB_KP_GT,
  367. KB_KP_AND,
  368. KB_KP_LAZYAND,
  369. KB_KP_OR,
  370. KB_KP_LAZYOR,
  371. KB_KP_COLON,
  372. KB_KP_HASH,
  373. KB_KP_SPACE,
  374. KB_KP_ATMARK,
  375. KB_KP_EXCLAMATION,
  376. KB_KP_MEM_STORE, /* 0xD0 */
  377. KB_KP_MEM_RECALL,
  378. KB_KP_MEM_CLEAR,
  379. KB_KP_MEM_ADD,
  380. KB_KP_MEM_SUB,
  381. KB_KP_MEM_MUL,
  382. KB_KP_MEM_DIV,
  383. KB_KP_PLUS_MINUS,
  384. KB_KP_CLEAR,
  385. KB_KP_CLEAR_ENTRY,
  386. KB_KP_BINARY,
  387. KB_KP_OCTAL,
  388. KB_KP_DECIMAL,
  389. KB_KP_HEXADECIMAL,
  390. #endif
  391. /* Modifiers */
  392. KB_LCTRL = 0xE0,
  393. KB_LSHIFT,
  394. KB_LALT,
  395. KB_LGUI,
  396. KB_RCTRL,
  397. KB_RSHIFT,
  398. KB_RALT,
  399. KB_RGUI,
  400. /* NOTE: 0xE8-FF are used as special_keycodes */
  401. };
  402. #endif /* USB_KEYCODES_H */