usb_hid.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. /**
  2. * @file
  3. * @brief Human Interface Device (HID) Class public header
  4. *
  5. * Header follows Device Class Definition for Human Interface Devices (HID)
  6. * Version 1.11 document (HID1_11-1.pdf).
  7. */
  8. #ifndef __HID_H_
  9. #define __HID_H_
  10. /* Subclass codes (HID 4.2) */
  11. #define HID_SUBCLASS_NONE 0 /* No subclass */
  12. #define HID_SUBCLASS_BOOTIF 1 /* Boot Interface Subclass */
  13. /* HID Protocol Codes (HID 4.3) */
  14. #define HID_PROTOCOL_NONE 0x00
  15. #define HID_PROTOCOL_BOOT 0x00
  16. #define HID_PROTOCOL_KEYBOARD 0x01
  17. #define HID_PROTOCOL_REPORT 0x01
  18. #define HID_PROTOCOL_MOUSE 0x02
  19. /* HID Class Descriptor Types (HID 7.1) */
  20. #define HID_DESCRIPTOR_TYPE_HID 0x21
  21. #define HID_DESCRIPTOR_TYPE_HID_REPORT 0x22
  22. #define HID_DESCRIPTOR_TYPE_HID_PHYSICAL 0x23
  23. /* HID Class Specific Requests (HID 7.2) */
  24. #define HID_REQUEST_GET_REPORT 0x01
  25. #define HID_REQUEST_GET_IDLE 0x02
  26. #define HID_REQUEST_GET_PROTOCOL 0x03
  27. #define HID_REQUEST_SET_REPORT 0x09
  28. #define HID_REQUEST_SET_IDLE 0x0A
  29. #define HID_REQUEST_SET_PROTOCOL 0x0B
  30. /* Report Type (MS byte of wValue for GET_REPORT) (HID 7.2.1) */
  31. #define HID_REPORT_INPUT 0x01
  32. #define HID_REPORT_OUTPUT 0x02
  33. #define HID_REPORT_FEATURE 0x03
  34. /* HID Descriptor ***********************************************************/
  35. #define HID_COUNTRY_NONE 0x00 /* Not Supported */
  36. #define HID_COUNTRY_ARABIC 0x01 /* Arabic */
  37. #define HID_COUNTRY_BELGIAN 0x02 /* Belgian */
  38. #define HID_COUNTRY_CANADA 0x03 /* Canadian-Bilingual */
  39. #define HID_COUNTRY_CANADRFR 0x04 /* Canadian-French */
  40. #define HID_COUNTRY_CZECH 0x05 /* Czech Republic */
  41. #define HID_COUNTRY_DANISH 0x06 /* Danish */
  42. #define HID_COUNTRY_FINNISH 0x07 /* Finnish */
  43. #define HID_COUNTRY_FRENCH 0x08 /* French */
  44. #define HID_COUNTRY_GERMAN 0x09 /* German */
  45. #define HID_COUNTRY_GREEK 0x10 /* Greek */
  46. #define HID_COUNTRY_HEBREW 0x11 /* Hebrew */
  47. #define HID_COUNTRY_HUNGARY 0x12 /* Hungary */
  48. #define HID_COUNTRY_ISO 0x13 /* International (ISO) */
  49. #define HID_COUNTRY_ITALIAN 0x14 /* Italian */
  50. #define HID_COUNTRY_JAPAN 0x15 /* Japan (Katakana) */
  51. #define HID_COUNTRY_KOREAN 0x16 /* Korean */
  52. #define HID_COUNTRY_LATINAM 0x17 /* Latin American */
  53. #define HID_COUNTRY_DUTCH 0x18 /* Netherlands/Dutch */
  54. #define HID_COUNTRY_NORWEGIAN 0x19 /* Norwegian */
  55. #define HID_COUNTRY_PERSIAN 0x20 /* Persian (Farsi) */
  56. #define HID_COUNTRY_POLAND 0x21 /* Poland */
  57. #define HID_COUNTRY_PORTUGUESE 0x22 /* Portuguese */
  58. #define HID_COUNTRY_RUSSIA 0x23 /* Russia */
  59. #define HID_COUNTRY_SLOVAKIA 0x24 /* Slovakia */
  60. #define HID_COUNTRY_SPANISH 0x25 /* Spanish */
  61. #define HID_COUNTRY_SWEDISH 0x26 /* Swedish */
  62. #define HID_COUNTRY_SWISSFR 0x27 /* Swiss/French */
  63. #define HID_COUNTRY_SWISSGR 0x28 /* Swiss/German */
  64. #define HID_COUNTRY_SWITZERLAND 0x29 /* Switzerland */
  65. #define HID_COUNTRY_TAIWAN 0x30 /* Taiwan */
  66. #define HID_COUNTRY_TURKISHQ 0x31 /* Turkish-Q */
  67. #define HID_COUNTRY_UK 0x32 /* UK */
  68. #define HID_COUNTRY_US 0x33 /* US */
  69. #define HID_COUNTRY_YUGOSLAVIA 0x34 /* Yugoslavia */
  70. #define HID_COUNTRY_TURKISHF 0x35 /* Turkish-F */
  71. /* HID report items */
  72. #define HID_REPORT_ITEM_SIZE_MASK 0x03
  73. #define HID_REPORT_ITEM_SIZE_0 0x00 /* No data follows */
  74. #define HID_REPORT_ITEM_SIZE_1 0x01 /* 1 byte of data follows */
  75. #define HID_REPORT_ITEM_SIZE_2 0x02 /* 2 bytes of data follow */
  76. #define HID_REPORT_ITEM_SIZE_4 0x03 /* 4 bytes of data follow */
  77. #define HID_REPORT_ITEM_TYPE_MASK 0x0c
  78. #define HID_REPORT_ITEM_TYPE_MAIN 0x00
  79. #define HID_REPORT_ITEM_TYPE_GLOBAL 0x04
  80. #define HID_REPORT_ITEM_TYPE_LOCAL 0x08
  81. #define HID_REPORT_ITEM_TAG_MASK 0xf0
  82. /* Main Items (HID 6.2.2.4) */
  83. #define HID_MAIN_ITEM_CONSTANT (1 << 0) /* Constant(1) vs Data(0) */
  84. #define HID_MAIN_ITEM_VARIABLE (1 << 1) /* Variable(1) vs Array(0) */
  85. #define HID_MAIN_ITEM_RELATIVE (1 << 2) /* Relative(1) vs Absolute(0) */
  86. #define HID_MAIN_ITEM_WRAP (1 << 3) /* Wrap(1) vs No Wrap(0) */
  87. #define HID_MAIN_ITEM_NONLINEAR (1 << 4) /* Non Linear(1) vs Linear(0) */
  88. #define HID_MAIN_ITEM_NOPREFERRED (1 << 5) /* No Preferred (1) vs Preferred State(0) */
  89. #define HID_MAIN_ITEM_NULLSTATE (1 << 6) /* Null state(1) vs No Null position(0) */
  90. #define HID_MAIN_ITEM_VOLATILE (1 << 7) /* Volatile(1) vs Non volatile(0) */
  91. #define HID_MAIN_ITEM_BUFFEREDBYTES (1 << 8) /* Buffered Bytes(1) vs Bit Field(0) */
  92. #define HID_MAIN_ITEM_SIZE(pfx) ((pfx)&HID_REPORT_ITEM_SIZE_MASK)
  93. #define HID_MAIN_ITEM_INPUT_PREFIX 0x80
  94. #define HID_MAIN_ITEM_INPUT_CONSTANT HID_MAIN_ITEM_CONSTANT
  95. #define HID_MAIN_ITEM_INPUT_VARIABLE HID_MAIN_ITEM_VARIABLE
  96. #define HID_MAIN_ITEM_INPUT_RELATIVE HID_MAIN_ITEM_RELATIVE
  97. #define HID_MAIN_ITEM_INPUT_WRAP HID_MAIN_ITEM_WRAP
  98. #define HID_MAIN_ITEM_INPUT_NONLINEAR HID_MAIN_ITEM_NONLINEAR
  99. #define HID_MAIN_ITEM_INPUT_NOPREFERRED HID_MAIN_ITEM_NOPREFERRED
  100. #define HID_MAIN_ITEM_INPUT_NULLSTATE HID_MAIN_ITEM_NULLSTATE
  101. #define HID_MAIN_ITEM_INPUT_BUFFEREDBYTES HID_MAIN_ITEM_BUFFEREDBYTES
  102. #define HID_MAIN_ITEM_OUTPUT_PREFIX 0x90
  103. #define HID_MAIN_ITEM_OUTPUT_CONSTANT HID_MAIN_ITEM_CONSTANT
  104. #define HID_MAIN_ITEM_OUTPUT_VARIABLE HID_MAIN_ITEM_VARIABLE
  105. #define HID_MAIN_ITEM_OUTPUT_RELATIVE HID_MAIN_ITEM_RELATIVE
  106. #define HID_MAIN_ITEM_OUTPUT_WRAP HID_MAIN_ITEM_WRAP
  107. #define HID_MAIN_ITEM_OUTPUT_NONLINEAR HID_MAIN_ITEM_NONLINEAR
  108. #define HID_MAIN_ITEM_OUTPUT_NOPREFERRED HID_MAIN_ITEM_NOPREFERRED
  109. #define HID_MAIN_ITEM_OUTPUT_NULLSTATE HID_MAIN_ITEM_NULLSTATE
  110. #define HID_MAIN_ITEM_OUTPUT_VOLATILE HID_MAIN_ITEM_VOLATILE
  111. #define HID_MAIN_ITEM_OUTPUT_BUFFEREDBYTES HID_MAIN_ITEM_BUFFEREDBYTES
  112. #define HID_MAIN_ITEM_FEATURE_PREFIX 0xb0
  113. #define HID_MAIN_ITEM_FEATURE_CONSTANT HID_MAIN_ITEM_CONSTANT
  114. #define HID_MAIN_ITEM_FEATURE_VARIABLE HID_MAIN_ITEM_VARIABLE
  115. #define HID_MAIN_ITEM_FEATURE_RELATIVE HID_MAIN_ITEM_RELATIVE
  116. #define HID_MAIN_ITEM_FEATURE_WRAP HID_MAIN_ITEM_WRAP
  117. #define HID_MAIN_ITEM_FEATURE_NONLINEAR HID_MAIN_ITEM_NONLINEAR
  118. #define HID_MAIN_ITEM_FEATURE_NOPREFERRED HID_MAIN_ITEM_NOPREFERRED
  119. #define HID_MAIN_ITEM_FEATURE_NULLSTATE HID_MAIN_ITEM_NULLSTATE
  120. #define HID_MAIN_ITEM_FEATURE_VOLATILE HID_MAIN_ITEM_VOLATILE
  121. #define HID_MAIN_ITEM_FEATURE_BUFFEREDBYTES HID_MAIN_ITEM_BUFFEREDBYTES
  122. #define HID_MAIN_ITEM_COLLECTION_PREFIX 0xa0
  123. #define HID_MAIN_ITEM_COLLECTION_PHYSICAL 0x00 /* Physical (group of axes) */
  124. #define HID_MAIN_ITEM_COLLECTION_APPL 0x01 /* Application (mouse, keyboard) */
  125. #define HID_MAIN_ITEM_COLLECTION_LOGICAL 0x02 /* Logical (interrelated data) */
  126. #define HID_MAIN_ITEM_COLLECTION_REPORT 0x03 /* Report */
  127. #define HID_MAIN_ITEM_COLLECTION_ARRAY 0x04 /* Named Array */
  128. #define HID_MAIN_ITEM_COLLECTION_SWITCH 0x05 /* Usage Switch */
  129. #define HID_MAIN_ITEM_COLLECTION_MODIFIER 0x06 /* Usage Modifier */
  130. #define HID_MAIN_ITEM_ENDCOLLECTION_PREFIX 0xc0
  131. /* Global Items (HID 6.2.2.7) */
  132. #define HID_GLOBAL_ITEM_SIZE(pfx) ((pfx)&HID_REPORT_ITEM_SIZE_MASK)
  133. #define HID_GLOBAL_ITEM_USAGEPAGE_PREFIX 0x04 /* Usage Page */
  134. #define HID_GLOBAL_ITEM_LOGICALMIN_PREFIX 0x14 /* Logical Minimum */
  135. #define HID_GLOBAL_ITEM_LOGICALMAX_PREFIX 0x24 /* Logical Maximum */
  136. #define HID_GLOBAL_ITEM_PHYSICALMIN_PREFIX 0x34 /* Physical Minimum */
  137. #define HID_GLOBAL_ITEM_PHYSMICALAX_PREFIX 0x44 /* Physical Maximum */
  138. #define HID_GLOBAL_ITEM_UNITEXP_PREFIX 0x54 /* Unit Exponent */
  139. #define HID_GLOBAL_ITEM_UNIT_PREFIX 0x64 /* Unit */
  140. #define HID_GLOBAL_ITEM_REPORTSIZE_PREFIX 0x74 /* Report Size */
  141. #define HID_GLOBAL_ITEM_REPORTID_PREFIX 0x84 /* Report ID */
  142. #define HID_GLOBAL_ITEM_REPORTCOUNT_PREFIX 0x94 /* Report Count */
  143. #define HID_GLOBAL_ITEM_PUSH_PREFIX 0xa4 /* Push */
  144. #define HID_GLOBAL_ITEM_POP_PREFIX 0xb4 /* Pop */
  145. /* Local Items (HID 6.2.2.8) */
  146. #define HID_LOCAL_ITEM_SIZE(pfx) ((pfx)&HID_REPORT_ITEM_SIZE_MASK)
  147. #define HID_LOCAL_ITEM_USAGE_PREFIX 0x08 /* Usage */
  148. #define HID_LOCAL_ITEM_USAGEMIN_PREFIX 0x18 /* Usage Minimum */
  149. #define HID_LOCAL_ITEM_USAGEMAX_PREFIX 0x28 /* Usage Maximum */
  150. #define HID_LOCAL_ITEM_DESIGNATORIDX_PREFIX 0x38 /* Designator Index */
  151. #define HID_LOCAL_ITEM_DESIGNATORMIN_PREFIX 0x48 /* Designator Minimum */
  152. #define HID_LOCAL_ITEM_DESIGNATORMAX_PREFIX 0x58 /* Designator Maximum */
  153. #define HID_LOCAL_ITEM_STRINGIDX_PREFIX 0x78 /* String Index */
  154. #define HID_LOCAL_ITEM_STRINGMIN_PREFIX 0x88 /* String Minimum */
  155. #define HID_LOCAL_ITEM_STRINGMAX_PREFIX 0x98 /* xx */
  156. #define HID_LOCAL_ITEM_DELIMITER_PREFIX 0xa8 /* Delimiter */
  157. /* Modifier Keys (HID 8.3) */
  158. #define HID_MODIFER_LCTRL (1 << 0) /* Left Ctrl */
  159. #define HID_MODIFER_LSHIFT (1 << 1) /* Left Shift */
  160. #define HID_MODIFER_LALT (1 << 2) /* Left Alt */
  161. #define HID_MODIFER_LGUI (1 << 3) /* Left GUI */
  162. #define HID_MODIFER_RCTRL (1 << 4) /* Right Ctrl */
  163. #define HID_MODIFER_RSHIFT (1 << 5) /* Right Shift */
  164. #define HID_MODIFER_RALT (1 << 6) /* Right Alt */
  165. #define HID_MODIFER_RGUI (1 << 7) /* Right GUI */
  166. /* Keyboard output report (1 byte) (HID B.1) */
  167. #define HID_KBD_OUTPUT_REPORT_NUMLOCK (1 << 0)
  168. #define HID_KBD_OUTPUT_REPORT_CAPSLOCK (1 << 1)
  169. #define HID_KBD_OUTPUT_REPORT_SCROLLLOCK (1 << 2)
  170. #define HID_KBD_OUTPUT_REPORT_COMPOSE (1 << 3)
  171. #define HID_KBD_OUTPUT_REPORT_KANA (1 << 4)
  172. /* Mouse input report (HID B.2) */
  173. #define HID_MOUSE_INPUT_REPORT_BUTTON1 (1 << 0)
  174. #define HID_MOUSE_INPUT_REPORT_BUTTON2 (1 << 1)
  175. #define HID_MOUSE_INPUT_REPORT_BUTTON3 (1 << 2)
  176. #define HID_MOUSE_INPUT_REPORT_BUTTON_MASK (7)
  177. /* Joystick input report (4 bytes) (HID D.1) */
  178. #define HID_JS_INPUT_REPORT_HATSWITCH_SHIFT (0)
  179. #define HID_JS_INPUT_REPORT_HATSWITCH_MASK (15 << HID_JSIN_HATSWITCH_SHIFT)
  180. #define HID_JS_INPUT_REPORT_BUTTON1 (1 << 4)
  181. #define HID_JS_INPUT_REPORT_BUTTON2 (1 << 5)
  182. #define HID_JS_INPUT_REPORT_BUTTON3 (1 << 6)
  183. #define HID_JS_INPUT_REPORT_BUTTON4 (1 << 7)
  184. /* Usage pages (HuT 3) */
  185. #define HID_USAGE_PAGE_UNDEFINED 0x00 /* Undefined */
  186. #define HID_USAGE_PAGE_GENERIC_DCTRL 0x01 /* Generic Desktop Controls */
  187. #define HID_USAGE_PAGE_SIMCTRL 0x02 /* Simulation Controls */
  188. #define HID_USAGE_PAGE_VRCTRL 0x03 /* VR Controls */
  189. #define HID_USAGE_PAGE_SPORTCTRL 0x04 /* Sport Controls */
  190. #define HID_USAGE_PAGE_GAMECTRL 0x05 /* Game Controls */
  191. #define HID_USAGE_PAGE_GENERIC_DEVCTRL 0x06 /* Generic Device Controls */
  192. #define HID_USAGE_PAGE_KBD 0x07 /* Keyboard/Keypad */
  193. #define HID_USAGE_PAGE_LEDS 0x08 /* LEDs */
  194. #define HID_USAGE_PAGE_BUTTON 0x09 /* Button */
  195. #define HID_USAGE_PAGE_ORDINAL 0x0a /* Ordinal */
  196. #define HID_USAGE_PAGE_TELEPHONY 0x0b /* Telephony */
  197. #define HID_USAGE_PAGE_CONSUMER 0x0c /* Consumer */
  198. #define HID_USAGE_PAGE_DIGITIZER 0x0d /* Digitizer */
  199. /* 0x0e Reserved */
  200. #define HID_USAGE_PAGE_PIDPAGE 0x0f /* PID Page Physical Interface Device */
  201. #define HID_USAGE_PAGE_UNICODE 0x10 /* Unicode */
  202. /* 0x11-13 Reserved */
  203. #define HID_USAGE_PAGE_ALPHA_DISPLAY 0x14 /* Alphanumeric Display */
  204. /* 0x15-3f Reserved */
  205. #define HID_USAGE_PAGE_MEDICAL 0x40 /* Medical Instruments */
  206. /* 0x41-7f Reserved */
  207. /* 0x80-83 Monitor Devices */
  208. /* 0x84-87 Power Devices */
  209. /* 0x88-8b Reserved */
  210. #define HID_USAGE_PAGE_BARCODE_SCANNER 0x8c /* Bar Code Scanner page */
  211. #define HID_USAGE_PAGE_SCALE 0x8d /* Scale page */
  212. #define HID_USAGE_PAGE_MSR 0x8e /* Magnetic Stripe Reading (MSR) Devices */
  213. #define HID_USAGE_PAGE_POS 0x8f /* Point of Sale devices */
  214. #define HID_USAGE_PAGE_CAMERA_CTRL 0x90 /* Camera Control Page */
  215. /* Generic Desktop Page Usage IDs (HuT 4) */
  216. #define HID_DESKTOP_USAGE_UNDEFINED 0x00 /* Undefined */
  217. #define HID_DESKTOP_USAGE_POINTER 0x01 /* Pointer */
  218. #define HID_DESKTOP_USAGE_MOUSE 0x02 /* Mouse */
  219. /* 0x03 Reserved */
  220. #define HID_DESKTOP_USAGE_JOYSTICK 0x04 /* Joystick */
  221. #define HID_DESKTOP_USAGE_GAMEPAD 0x05 /* Game Pad */
  222. #define HID_DESKTOP_USAGE_KEYBOARD 0x06 /* Keyboard */
  223. #define HID_DESKTOP_USAGE_KEYPAD 0x07 /* Keypad */
  224. #define HID_DESKTOP_USAGE_MULTIAXIS 0x08 /* Multi-axis Controller */
  225. #define HID_DESKTOP_USAGE_TABLET 0x09 /* Tablet PC System Controls */
  226. /* 0x0a-2f Reserved */
  227. #define HID_DESKTOP_USAGE_X 0x30 /* X */
  228. #define HID_DESKTOP_USAGE_Y 0x31 /* Y */
  229. #define HID_DESKTOP_USAGE_Z 0x32 /* Z */
  230. #define HID_DESKTOP_USAGE_RX 0x33 /* Rx */
  231. #define HID_DESKTOP_USAGE_RY 0x34 /* Ry */
  232. #define HID_DESKTOP_USAGE_RZ 0x35 /* Rz */
  233. #define HID_DESKTOP_USAGE_SLIDER 0x36 /* Slider */
  234. #define HID_DESKTOP_USAGE_DIAL 0x37 /* Dial */
  235. #define HID_DESKTOP_USAGE_WHEEL 0x38 /* Wheel */
  236. #define HID_DESKTOP_USAGE_HATSWITCH 0x39 /* Hat switch */
  237. #define HID_DESKTOP_USAGE_COUNTED 0x3a /* Counted Buffer */
  238. #define HID_DESKTOP_USAGE_BYTECOUNT 0x3b /* Byte Count */
  239. #define HID_DESKTOP_USAGE_MOTION 0x3c /* Motion Wakeup */
  240. #define HID_DESKTOP_USAGE_START 0x3d /* Start */
  241. #define HID_DESKTOP_USAGE_SELECT 0x3e /* Select */
  242. /* 0x3f Reserved */
  243. #define HID_DESKTOP_USAGE_VX 0x40 /* Vx */
  244. #define HID_DESKTOP_USAGE_VY 0x41 /* Vy */
  245. #define HID_DESKTOP_USAGE_VZ 0x42 /* Vz */
  246. #define HID_DESKTOP_USAGE_VBRX 0x43 /* Vbrx */
  247. #define HID_DESKTOP_USAGE_VBRY 0x44 /* Vbry */
  248. #define HID_DESKTOP_USAGE_VBRZ 0x45 /* Vbrz */
  249. #define HID_DESKTOP_USAGE_VNO 0x46 /* Vno */
  250. #define HID_DESKTOP_USAGE_FEATURE 0x47 /* Feature Notification */
  251. #define HID_DESKTOP_USAGE_RESOLUTION 0x48 /* Resolution Multiplier */
  252. /* 0x49-7f Reserved */
  253. #define HID_DESKTOP_USAGE_CONTROL 0x80 /* System Control */
  254. #define HID_DESKTOP_USAGE_POWERDOWN 0x81 /* System Power Down */
  255. #define HID_DESKTOP_USAGE_SLEEP 0x82 /* System Sleep */
  256. #define HID_DESKTOP_USAGE_WAKEUP 0x83 /* System Wake Up */
  257. #define HID_DESKTOP_USAGE_CONTEXT_MENU 0x84 /* System Context Menu */
  258. #define HID_DESKTOP_USAGE_MAIN_MENU 0x85 /* System Main Menu */
  259. #define HID_DESKTOP_USAGE_APP_MENU 0x86 /* System App Menu */
  260. #define HID_DESKTOP_USAGE_MENU_HELP 0x87 /* System Menu Help */
  261. #define HID_DESKTOP_USAGE_MENU_EXIT 0x88 /* System Menu Exit */
  262. #define HID_DESKTOP_USAGE_MENU_SELECT 0x89 /* System Menu Select */
  263. #define HID_DESKTOP_USAGE_MENU_RIGHT 0x8a /* System Menu Right */
  264. #define HID_DESKTOP_USAGE_MENU_LEFT 0x8b /* System Menu Left */
  265. #define HID_DESKTOP_USAGE_MENU_UP 0x8c /* System Menu Up */
  266. #define HID_DESKTOP_USAGE_MENU_DOWN 0x8d /* System Menu Down */
  267. #define HID_DESKTOP_USAGE_COLD_RESTART 0x8e /* System Cold Restart */
  268. #define HID_DESKTOP_USAGE_WARM_RESTART 0x8f /* System Warm Restart */
  269. #define HID_DESKTOP_USAGE_DPAD_UP 0x90 /* D-pad Up */
  270. #define HID_DESKTOP_USAGE_DPAD_DOWN 0x91 /* D-pad Down */
  271. #define HID_DESKTOP_USAGE_DPAD_RIGHT 0x92 /* D-pad Right */
  272. #define HID_DESKTOP_USAGE_DPAD_LEFT 0x93 /* D-pad Left */
  273. /* 0x94-9f Reserved */
  274. #define HID_DESKTOP_USAGE_DOCK 0xa0 /* System Dock */
  275. #define HID_DESKTOP_USAGE_UNDOCK 0xa1 /* System Undock */
  276. #define HID_DESKTOP_USAGE_SETUP 0xa2 /* System Setup */
  277. #define HID_DESKTOP_USAGE_BREAK 0xa3 /* System Break */
  278. #define HID_DESKTOP_USAGE_DEBUG_BREAK 0xa4 /* System Debugger Break */
  279. #define HID_DESKTOP_USAGE_APP_BREAK 0xa5 /* Application Break */
  280. #define HID_DESKTOP_USAGE_APP_DEBUG_BREAK 0xa6 /* Application Debugger Break */
  281. #define HID_DESKTOP_USAGE_MUTE 0xa7 /* System Speaker Mute */
  282. #define HID_DESKTOP_USAGE_HIBERNATE 0xa8 /* System Hibernate */
  283. /* 0xa9-af Reserved */
  284. #define HID_DESKTOP_USAGE_DISPLAY_INVERT 0xb0 /* System Display Invert */
  285. #define HID_DESKTOP_USAGE_DISPALY_INTERNAL 0xb1 /* System Display Internal */
  286. #define HID_DESKTOP_USAGE_DISPLAY_EXTERNAL 0xb2 /* System Display External */
  287. #define HID_DESKTOP_USAGE_DISPLAY_BOTH 0xb3 /* System Display Both */
  288. #define HID_DESKTOP_USAGE_DISPLAY_DUAL 0xb4 /* System Display Dual */
  289. #define HID_DESKTOP_USAGE_DISPLAY_TOGGLE 0xb5 /* System Display Toggle Int/Ext */
  290. #define HID_DESKTOP_USAGE_DISPLAY_SWAP 0xb6 /* System Display Swap */
  291. #define HID_DESKTOP_USAGE_ 0xb7 /* System Display LCD Autoscale */
  292. /* 0xb8-ffff Reserved */
  293. /* Keyboard usage IDs (HuT 10) */
  294. #define HID_KBD_USAGE_NONE 0x00 /* Reserved (no event indicated) */
  295. #define HID_KBD_USAGE_ERRORROLLOVER 0x01 /* Keyboard ErrorRollOver */
  296. #define HID_KBD_USAGE_POSTFAIL 0x02 /* Keyboard POSTFail */
  297. #define HID_KBD_USAGE_ERRUNDEF 0x03 /* Keyboard ErrorUndefined */
  298. #define HID_KBD_USAGE_A 0x04 /* Keyboard a or A (B-Z follow) */
  299. #define HID_KBD_USAGE_1 0x1e /* Keyboard 1 (2-9 follow) */
  300. #define HID_KBD_USAGE_EXCLAM 0x1e /* Keyboard 1 and ! */
  301. #define HID_KBD_USAGE_AT 0x1f /* Keyboard 2 and @ */
  302. #define HID_KBD_USAGE_POUND 0x20 /* Keyboard 3 and # */
  303. #define HID_KBD_USAGE_DOLLAR 0x21 /* Keyboard 4 and $ */
  304. #define HID_KBD_USAGE_PERCENT 0x22 /* Keyboard 5 and % */
  305. #define HID_KBD_USAGE_CARAT 0x23 /* Keyboard 6 and ^ */
  306. #define HID_KBD_USAGE_AMPERSAND 0x24 /* Keyboard 7 and & */
  307. #define HID_KBD_USAGE_ASTERISK 0x25 /* Keyboard 8 and * */
  308. #define HID_KBD_USAGE_LPAREN 0x26 /* Keyboard 9 and ( */
  309. #define HID_KBD_USAGE_0 0x27 /* Keyboard 0 and ) */
  310. #define HID_KBD_USAGE_RPAREN 0x27 /* Keyboard 0 and ) */
  311. #define HID_KBD_USAGE_ENTER 0x28 /* Keyboard Return (ENTER) */
  312. #define HID_KBD_USAGE_ESCAPE 0x29 /* Keyboard ESCAPE */
  313. #define HID_KBD_USAGE_DELETE 0x2a /* Keyboard DELETE (Backspace) */
  314. #define HID_KBD_USAGE_TAB 0x2b /* Keyboard Tab */
  315. #define HID_KBD_USAGE_SPACE 0x2c /* Keyboard Spacebar */
  316. #define HID_KBD_USAGE_HYPHEN 0x2d /* Keyboard - and (underscore) */
  317. #define HID_KBD_USAGE_UNDERSCORE 0x2d /* Keyboard - and (underscore) */
  318. #define HID_KBD_USAGE_EQUAL 0x2e /* Keyboard = and + */
  319. #define HID_KBD_USAGE_PLUS 0x2e /* Keyboard = and + */
  320. #define HID_KBD_USAGE_LBRACKET 0x2f /* Keyboard [ and { */
  321. #define HID_KBD_USAGE_LBRACE 0x2f /* Keyboard [ and { */
  322. #define HID_KBD_USAGE_RBRACKET 0x30 /* Keyboard ] and } */
  323. #define HID_KBD_USAGE_RBRACE 0x30 /* Keyboard ] and } */
  324. #define HID_KBD_USAGE_BSLASH 0x31 /* Keyboard \ and | */
  325. #define HID_KBD_USAGE_VERTBAR 0x31 /* Keyboard \ and | */
  326. #define HID_KBD_USAGE_NONUSPOUND 0x32 /* Keyboard Non-US # and ~ */
  327. #define HID_KBD_USAGE_TILDE 0x32 /* Keyboard Non-US # and ~ */
  328. #define HID_KBD_USAGE_SEMICOLON 0x33 /* Keyboard ; and : */
  329. #define HID_KBD_USAGE_COLON 0x33 /* Keyboard ; and : */
  330. #define HID_KBD_USAGE_SQUOTE 0x34 /* Keyboard ' and " */
  331. #define HID_KBD_USAGE_DQUOUTE 0x34 /* Keyboard ' and " */
  332. #define HID_KBD_USAGE_GACCENT 0x35 /* Keyboard Grave Accent and Tilde */
  333. #define HID_KBD_USAGE_GTILDE 0x35 /* Keyboard Grave Accent and Tilde */
  334. #define HID_KBD_USAGE_COMMON 0x36 /* Keyboard , and < */
  335. #define HID_KBD_USAGE_LT 0x36 /* Keyboard , and < */
  336. #define HID_KBD_USAGE_PERIOD 0x37 /* Keyboard . and > */
  337. #define HID_KBD_USAGE_GT 0x37 /* Keyboard . and > */
  338. #define HID_KBD_USAGE_DIV 0x38 /* Keyboard / and ? */
  339. #define HID_KBD_USAGE_QUESTION 0x38 /* Keyboard / and ? */
  340. #define HID_KBD_USAGE_CAPSLOCK 0x39 /* Keyboard Caps Lock */
  341. #define HID_KBD_USAGE_F1 0x3a /* Keyboard F1 */
  342. #define HID_KBD_USAGE_F2 0x3b /* Keyboard F2 */
  343. #define HID_KBD_USAGE_F3 0x3c /* Keyboard F3 */
  344. #define HID_KBD_USAGE_F4 0x3d /* Keyboard F4 */
  345. #define HID_KBD_USAGE_F5 0x3e /* Keyboard F5 */
  346. #define HID_KBD_USAGE_F6 0x3f /* Keyboard F6 */
  347. #define HID_KBD_USAGE_F7 0x40 /* Keyboard F7 */
  348. #define HID_KBD_USAGE_F8 0x41 /* Keyboard F8 */
  349. #define HID_KBD_USAGE_F9 0x42 /* Keyboard F9 */
  350. #define HID_KBD_USAGE_F10 0x43 /* Keyboard F10 */
  351. #define HID_KBD_USAGE_F11 0x44 /* Keyboard F11 */
  352. #define HID_KBD_USAGE_F12 0x45 /* Keyboard F12 */
  353. #define HID_KBD_USAGE_PRINTSCN 0x46 /* Keyboard PrintScreen */
  354. #define HID_KBD_USAGE_SCROLLLOCK 0x47 /* Keyboard Scroll Lock */
  355. #define HID_KBD_USAGE_PAUSE 0x48 /* Keyboard Pause */
  356. #define HID_KBD_USAGE_INSERT 0x49 /* Keyboard Insert */
  357. #define HID_KBD_USAGE_HOME 0x4a /* Keyboard Home */
  358. #define HID_KBD_USAGE_PAGEUP 0x4b /* Keyboard PageUp */
  359. #define HID_KBD_USAGE_DELFWD 0x4c /* Keyboard Delete Forward */
  360. #define HID_KBD_USAGE_END 0x4d /* Keyboard End */
  361. #define HID_KBD_USAGE_PAGEDOWN 0x4e /* Keyboard PageDown */
  362. #define HID_KBD_USAGE_RIGHT 0x4f /* eyboard RightArrow */
  363. #define HID_KBD_USAGE_LEFT 0x50 /* Keyboard LeftArrow */
  364. #define HID_KBD_USAGE_DOWN 0x5a /* Keyboard DownArrow */
  365. #define HID_KBD_USAGE_UP 0x52 /* Keyboard UpArrow */
  366. #define HID_KBD_USAGE_KPDNUMLOCK 0x53 /* Keypad Num Lock and Clear */
  367. #define HID_KBD_USAGE_KPDNUMLOCKCLEAR 0x53 /* Keypad Num Lock and Clear */
  368. #define HID_KBD_USAGE_KPDDIV 0x54 /* Keypad / */
  369. #define HID_KBD_USAGE_KPDMUL 0x55 /* Keypad * */
  370. #define HID_KBD_USAGE_KPDHMINUS 0x56 /* Keypad - */
  371. #define HID_KBD_USAGE_KPDPLUS 0x57 /* Keypad + */
  372. #define HID_KBD_USAGE_KPDEMTER 0x58 /* Keypad ENTER */
  373. #define HID_KBD_USAGE_KPD1 0x59 /* Keypad 1 (2-9 follow) */
  374. #define HID_KBD_USAGE_KPDEND 0x59 /* Keypad 1 and End */
  375. #define HID_KBD_USAGE_KPDDOWN 0x5a /* Keypad 2 and Down Arrow */
  376. #define HID_KBD_USAGE_KPDPAGEDN 0x5b /* Keypad 3 and PageDn */
  377. #define HID_KBD_USAGE_KPDLEFT 0x5c /* Keypad 4 and Left Arrow */
  378. #define HID_KBD_USAGE_KPDRIGHT 0x5e /* Keypad 6 and Right Arrow */
  379. #define HID_KBD_USAGE_KPDHOME 0x5f /* Keypad 7 and Home */
  380. #define HID_KBD_USAGE_KPDUP 0x60 /* Keypad 8 and Up Arrow */
  381. #define HID_KBD_USAGE_KPDPAGEUP 0x61 /* Keypad 9 and PageUp */
  382. #define HID_KBD_USAGE_KPD0 0x62 /* Keypad 0 and Insert */
  383. #define HID_KBD_USAGE_KPDINSERT 0x62 /* Keypad 0 and Insert */
  384. #define HID_KBD_USAGE_KPDDECIMALPT 0x63 /* Keypad . and Delete */
  385. #define HID_KBD_USAGE_KPDDELETE 0x63 /* Keypad . and Delete */
  386. #define HID_KBD_USAGE_NONSLASH 0x64 /* Keyboard Non-US \ and | */
  387. #define HID_KBD_USAGE_NONUSVERT 0x64 /* Keyboard Non-US \ and | */
  388. #define HID_KBD_USAGE_APPLICATION 0x65 /* Keyboard Application */
  389. #define HID_KBD_USAGE_POWER 0x66 /* Keyboard Power */
  390. #define HID_KBD_USAGE_KPDEQUAL 0x67 /* Keypad = */
  391. #define HID_KBD_USAGE_F13 0x68 /* Keyboard F13 */
  392. #define HID_KBD_USAGE_F14 0x69 /* Keyboard F14 */
  393. #define HID_KBD_USAGE_F15 0x6a /* Keyboard F15 */
  394. #define HID_KBD_USAGE_F16 0x6b /* Keyboard F16 */
  395. #define HID_KBD_USAGE_F17 0x6c /* Keyboard F17 */
  396. #define HID_KBD_USAGE_F18 0x6d /* Keyboard F18 */
  397. #define HID_KBD_USAGE_F19 0x6e /* Keyboard F19 */
  398. #define HID_KBD_USAGE_F20 0x6f /* Keyboard F20 */
  399. #define HID_KBD_USAGE_F21 0x70 /* Keyboard F21 */
  400. #define HID_KBD_USAGE_F22 0x71 /* Keyboard F22 */
  401. #define HID_KBD_USAGE_F23 0x72 /* Keyboard F23 */
  402. #define HID_KBD_USAGE_F24 0x73 /* Keyboard F24 */
  403. #define HID_KBD_USAGE_EXECUTE 0x74 /* Keyboard Execute */
  404. #define HID_KBD_USAGE_HELP 0x75 /* Keyboard Help */
  405. #define HID_KBD_USAGE_MENU 0x76 /* Keyboard Menu */
  406. #define HID_KBD_USAGE_SELECT 0x77 /* Keyboard Select */
  407. #define HID_KBD_USAGE_STOP 0x78 /* Keyboard Stop */
  408. #define HID_KBD_USAGE_AGAIN 0x79 /* Keyboard Again */
  409. #define HID_KBD_USAGE_UNDO 0x7a /* Keyboard Undo */
  410. #define HID_KBD_USAGE_CUT 0x7b /* Keyboard Cut */
  411. #define HID_KBD_USAGE_COPY 0x7c /* Keyboard Copy */
  412. #define HID_KBD_USAGE_PASTE 0x7d /* Keyboard Paste */
  413. #define HID_KBD_USAGE_FIND 0x7e /* Keyboard Find */
  414. #define HID_KBD_USAGE_MUTE 0x7f /* Keyboard Mute */
  415. #define HID_KBD_USAGE_VOLUP 0x80 /* Keyboard Volume Up */
  416. #define HID_KBD_USAGE_VOLDOWN 0x81 /* Keyboard Volume Down */
  417. #define HID_KBD_USAGE_LCAPSLOCK 0x82 /* Keyboard Locking Caps Lock */
  418. #define HID_KBD_USAGE_LNUMLOCK 0x83 /* Keyboard Locking Num Lock */
  419. #define HID_KBD_USAGE_LSCROLLLOCK 0x84 /* Keyboard Locking Scroll Lock */
  420. #define HID_KBD_USAGE_KPDCOMMA 0x85 /* Keypad Comma */
  421. #define HID_KBD_USAGE_KPDEQUALSIGN 0x86 /* Keypad Equal Sign */
  422. #define HID_KBD_USAGE_INTERNATIONAL1 0x87 /* Keyboard International 1 */
  423. #define HID_KBD_USAGE_INTERNATIONAL2 0x88 /* Keyboard International 2 */
  424. #define HID_KBD_USAGE_INTERNATIONAL3 0x89 /* Keyboard International 3 */
  425. #define HID_KBD_USAGE_INTERNATIONAL4 0x8a /* Keyboard International 4 */
  426. #define HID_KBD_USAGE_INTERNATIONAL5 0x8b /* Keyboard International 5 */
  427. #define HID_KBD_USAGE_INTERNATIONAL6 0x8c /* Keyboard International 6 */
  428. #define HID_KBD_USAGE_INTERNATIONAL7 0x8d /* Keyboard International 7 */
  429. #define HID_KBD_USAGE_INTERNATIONAL8 0x8e /* Keyboard International 8 */
  430. #define HID_KBD_USAGE_INTERNATIONAL9 0x8f /* Keyboard International 9 */
  431. #define HID_KBD_USAGE_LANG1 0x90 /* Keyboard LANG1 */
  432. #define HID_KBD_USAGE_LANG2 0x91 /* Keyboard LANG2 */
  433. #define HID_KBD_USAGE_LANG3 0x92 /* Keyboard LANG3 */
  434. #define HID_KBD_USAGE_LANG4 0x93 /* Keyboard LANG4 */
  435. #define HID_KBD_USAGE_LANG5 0x94 /* Keyboard LANG5 */
  436. #define HID_KBD_USAGE_LANG6 0x95 /* Keyboard LANG6 */
  437. #define HID_KBD_USAGE_LANG7 0x96 /* Keyboard LANG7 */
  438. #define HID_KBD_USAGE_LANG8 0x97 /* Keyboard LANG8 */
  439. #define HID_KBD_USAGE_LANG9 0x98 /* Keyboard LANG9 */
  440. #define HID_KBD_USAGE_ALTERASE 0x99 /* Keyboard Alternate Erase */
  441. #define HID_KBD_USAGE_SYSREQ 0x9a /* Keyboard SysReq/Attention */
  442. #define HID_KBD_USAGE_CANCEL 0x9b /* Keyboard Cancel */
  443. #define HID_KBD_USAGE_CLEAR 0x9c /* Keyboard Clear */
  444. #define HID_KBD_USAGE_PRIOR 0x9d /* Keyboard Prior */
  445. #define HID_KBD_USAGE_RETURN 0x9e /* Keyboard Return */
  446. #define HID_KBD_USAGE_SEPARATOR 0x9f /* Keyboard Separator */
  447. #define HID_KBD_USAGE_OUT 0xa0 /* Keyboard Out */
  448. #define HID_KBD_USAGE_OPER 0xa1 /* Keyboard Oper */
  449. #define HID_KBD_USAGE_CLEARAGAIN 0xa2 /* Keyboard Clear/Again */
  450. #define HID_KBD_USAGE_CLRSEL 0xa3 /* Keyboard CrSel/Props */
  451. #define HID_KBD_USAGE_EXSEL 0xa4 /* Keyboard ExSel */
  452. #define HID_KBD_USAGE_KPD00 0xb0 /* Keypad 00 */
  453. #define HID_KBD_USAGE_KPD000 0xb1 /* Keypad 000 */
  454. #define HID_KBD_USAGE_THOUSEPARATOR 0xb2 /* Thousands Separator */
  455. #define HID_KBD_USAGE_DECSEPARATOR 0xb3 /* Decimal Separator */
  456. #define HID_KBD_USAGE_CURRUNIT 0xb4 /* Currency Unit */
  457. #define HID_KBD_USAGE_CURRSUBUNIT 0xb5 /* Currency Sub-unit */
  458. #define HID_KBD_USAGE_KPDLPAREN 0xb6 /* Keypad ( */
  459. #define HID_KBD_USAGE_KPDRPAREN 0xb7 /* Keypad ) */
  460. #define HID_KBD_USAGE_KPDLBRACE 0xb8 /* Keypad { */
  461. #define HID_KBD_USAGE_KPDRBRACE 0xb9 /* Keypad } */
  462. #define HID_KBD_USAGE_KPDTAB 0xba /* Keypad Tab */
  463. #define HID_KBD_USAGE_KPDBACKSPACE 0xbb /* Keypad Backspace */
  464. #define HID_KBD_USAGE_KPDA 0xbc /* Keypad A (B-F follow) */
  465. #define HID_KBD_USAGE_KPDXOR 0xc2 /* Keypad XOR */
  466. #define HID_KBD_USAGE_KPDEXP 0xc3 /* Keypad ^ */
  467. #define HID_KBD_USAGE_KPDPERCENT 0xc4 /* Keypad % */
  468. #define HID_KBD_USAGE_KPDLT 0xc5 /* Keypad < */
  469. #define HID_KBD_USAGE_KPDGT 0xc6 /* Keypad > */
  470. #define HID_KBD_USAGE_KPDAMPERSAND 0xc7 /* Keypad & */
  471. #define HID_KBD_USAGE_KPDAND 0xc8 /* Keypad && */
  472. #define HID_KBD_USAGE_KPDVERT 0xc9 /* Keypad | */
  473. #define HID_KBD_USAGE_KPDOR 0xca /* Keypad || */
  474. #define HID_KBD_USAGE_KPDCOLON 0xcb /* Keypad : */
  475. #define HID_KBD_USAGE_KPDPOUND 0xcc /* Keypad # */
  476. #define HID_KBD_USAGE_KPDSPACE 0xcd /* Keypad Space */
  477. #define HID_KBD_USAGE_KPDAT 0xce /* Keypad @ */
  478. #define HID_KBD_USAGE_KPDEXCLAM 0xcf /* Keypad ! */
  479. #define HID_KBD_USAGE_KPDMEMSTORE 0xd0 /* Keypad Memory Store */
  480. #define HID_KBD_USAGE_KPDMEMRECALL 0xd1 /* Keypad Memory Recall */
  481. #define HID_KBD_USAGE_KPDMEMCLEAR 0xd2 /* Keypad Memory Clear */
  482. #define HID_KBD_USAGE_KPDMEMADD 0xd3 /* Keypad Memory Add */
  483. #define HID_KBD_USAGE_KPDMEMSUB 0xd4 /* Keypad Memory Subtract */
  484. #define HID_KBD_USAGE_KPDMEMMULT 0xd5 /* Keypad Memory Multiply */
  485. #define HID_KBD_USAGE_KPDMEMDIV 0xd6 /* Keypad Memory Divide */
  486. #define HID_KBD_USAGE_KPDPLUSMINUS 0xd7 /* Keypad +/- */
  487. #define HID_KBD_USAGE_KPDCLEAR 0xd8 /* Keypad Clear */
  488. #define HID_KBD_USAGE_KPDCLEARENTRY 0xd9 /* Keypad Clear Entry */
  489. #define HID_KBD_USAGE_KPDBINARY 0xda /* Keypad Binary */
  490. #define HID_KBD_USAGE_KPDOCTAL 0xdb /* Keypad Octal */
  491. #define HID_KBD_USAGE_KPDDECIMAL 0xdc /* Keypad Decimal */
  492. #define HID_KBD_USAGE_KPDHEXADECIMAL 0xdd /* Keypad Hexadecimal */
  493. #define HID_KBD_USAGE_LCTRL 0xe0 /* Keyboard LeftControl */
  494. #define HID_KBD_USAGE_LSHIFT 0xe1 /* Keyboard LeftShift */
  495. #define HID_KBD_USAGE_LALT 0xe2 /* Keyboard LeftAlt */
  496. #define HID_KBD_USAGE_LGUI 0xe3 /* Keyboard Left GUI */
  497. #define HID_KBD_USAGE_RCTRL 0xe4 /* Keyboard RightControl */
  498. #define HID_KBD_USAGE_RSHIFT 0xe5 /* Keyboard RightShift */
  499. #define HID_KBD_USAGE_RALT 0xe6 /* Keyboard RightAlt */
  500. #define HID_KBD_USAGE_RGUI 0xe7 /* Keyboard Right GUI */
  501. #define HID_KBD_USAGE_MAX 0xe7
  502. /* HID Report Definitions */
  503. struct usb_hid_class_subdescriptor {
  504. uint8_t bDescriptorType;/* Class descriptor type (See 7.1) */
  505. uint16_t wDescriptorLength;/* Size of the report descriptor */
  506. } __PACKED;
  507. struct usb_hid_descriptor {
  508. uint8_t bLength; /* Size of the HID descriptor */
  509. uint8_t bDescriptorType;/* HID descriptor type */
  510. uint16_t bcdHID;/* HID class specification release */
  511. uint8_t bCountryCode;/* Country code */
  512. uint8_t bNumDescriptors;/* Number of descriptors (>=1) */
  513. /*
  514. * Specification says at least one Class Descriptor needs to
  515. * be present (Report Descriptor).
  516. */
  517. struct usb_hid_class_subdescriptor subdesc[1];
  518. } __PACKED;
  519. /* Standard Reports *********************************************************/
  520. /* Keyboard input report (8 bytes) (HID B.1) */
  521. struct usb_hid_kbd_report
  522. {
  523. uint8_t modifier; /* Modifier keys. See USBHID_MODIFIER_* definitions */
  524. uint8_t reserved;
  525. uint8_t key[6]; /* Keycode 1-6 */
  526. };
  527. /* Keyboard output report (1 byte) (HID B.1),
  528. * see USBHID_KBDOUT_* definitions
  529. */
  530. /* Mouse input report (HID B.2) */
  531. struct usb_hid_mouse_report
  532. {
  533. uint8_t buttons; /* See USBHID_MOUSEIN_* definitions */
  534. uint8_t xdisp; /* X displacement */
  535. uint8_t ydisp; /* y displacement */
  536. /* Device specific additional bytes may follow */
  537. #ifdef CONFIG_INPUT_MOUSE_WHEEL
  538. uint8_t wdisp; /* Wheel displacement */
  539. #endif
  540. };
  541. /* Joystick input report (1 bytes) (HID D.1) */
  542. struct usb_hid_js_report
  543. {
  544. uint8_t xpos; /* X position */
  545. uint8_t ypos; /* X position */
  546. uint8_t buttons; /* See USBHID_JSIN_* definitions */
  547. uint8_t throttle; /* Throttle */
  548. };
  549. /**
  550. * @brief HID keyboard button codes.
  551. */
  552. enum hid_kbd_code {
  553. HID_KEY_A = 4,
  554. HID_KEY_B = 5,
  555. HID_KEY_C = 6,
  556. HID_KEY_D = 7,
  557. HID_KEY_E = 8,
  558. HID_KEY_F = 9,
  559. HID_KEY_G = 10,
  560. HID_KEY_H = 11,
  561. HID_KEY_I = 12,
  562. HID_KEY_J = 13,
  563. HID_KEY_K = 14,
  564. HID_KEY_L = 15,
  565. HID_KEY_M = 16,
  566. HID_KEY_N = 17,
  567. HID_KEY_O = 18,
  568. HID_KEY_P = 19,
  569. HID_KEY_Q = 20,
  570. HID_KEY_R = 21,
  571. HID_KEY_S = 22,
  572. HID_KEY_T = 23,
  573. HID_KEY_U = 24,
  574. HID_KEY_V = 25,
  575. HID_KEY_W = 26,
  576. HID_KEY_X = 27,
  577. HID_KEY_Y = 28,
  578. HID_KEY_Z = 29,
  579. HID_KEY_1 = 30,
  580. HID_KEY_2 = 31,
  581. HID_KEY_3 = 32,
  582. HID_KEY_4 = 33,
  583. HID_KEY_5 = 34,
  584. HID_KEY_6 = 35,
  585. HID_KEY_7 = 36,
  586. HID_KEY_8 = 37,
  587. HID_KEY_9 = 38,
  588. HID_KEY_0 = 39,
  589. HID_KEY_ENTER = 40,
  590. HID_KEY_ESC = 41,
  591. HID_KEY_BACKSPACE = 42,
  592. HID_KEY_TAB = 43,
  593. HID_KEY_SPACE = 44,
  594. HID_KEY_MINUS = 45,
  595. HID_KEY_EQUAL = 46,
  596. HID_KEY_LEFTBRACE = 47,
  597. HID_KEY_RIGHTBRACE = 48,
  598. HID_KEY_BACKSLASH = 49,
  599. HID_KEY_HASH = 50, /* Non-US # and ~ */
  600. HID_KEY_SEMICOLON = 51,
  601. HID_KEY_APOSTROPHE = 52,
  602. HID_KEY_GRAVE = 53,
  603. HID_KEY_COMMA = 54,
  604. HID_KEY_DOT = 55,
  605. HID_KEY_SLASH = 56,
  606. HID_KEY_CAPSLOCK = 57,
  607. HID_KEY_F1 = 58,
  608. HID_KEY_F2 = 59,
  609. HID_KEY_F3 = 60,
  610. HID_KEY_F4 = 61,
  611. HID_KEY_F5 = 62,
  612. HID_KEY_F6 = 63,
  613. HID_KEY_F7 = 64,
  614. HID_KEY_F8 = 65,
  615. HID_KEY_F9 = 66,
  616. HID_KEY_F10 = 67,
  617. HID_KEY_F11 = 68,
  618. HID_KEY_F12 = 69,
  619. HID_KEY_SYSRQ = 70, /* PRINTSCREEN */
  620. HID_KEY_SCROLLLOCK = 71,
  621. HID_KEY_PAUSE = 72,
  622. HID_KEY_INSERT = 73,
  623. HID_KEY_HOME = 74,
  624. HID_KEY_PAGEUP = 75,
  625. HID_KEY_DELETE = 76,
  626. HID_KEY_END = 77,
  627. HID_KEY_PAGEDOWN = 78,
  628. HID_KEY_RIGHT = 79,
  629. HID_KEY_LEFT = 80,
  630. HID_KEY_DOWN = 81,
  631. HID_KEY_UP = 82,
  632. HID_KEY_NUMLOCK = 83,
  633. HID_KEY_KPSLASH = 84, /* NUMPAD DIVIDE */
  634. HID_KEY_KPASTERISK = 85, /* NUMPAD MULTIPLY */
  635. HID_KEY_KPMINUS = 86,
  636. HID_KEY_KPPLUS = 87,
  637. HID_KEY_KPENTER = 88,
  638. HID_KEY_KP_1 = 89,
  639. HID_KEY_KP_2 = 90,
  640. HID_KEY_KP_3 = 91,
  641. HID_KEY_KP_4 = 92,
  642. HID_KEY_KP_5 = 93,
  643. HID_KEY_KP_6 = 94,
  644. HID_KEY_KP_7 = 95,
  645. HID_KEY_KP_8 = 96,
  646. HID_KEY_KP_9 = 97,
  647. HID_KEY_KP_0 = 98,
  648. };
  649. /**
  650. * @brief HID keyboard modifiers.
  651. */
  652. enum hid_kbd_modifier {
  653. HID_KBD_MODIFIER_NONE = 0x00,
  654. HID_KBD_MODIFIER_LEFT_CTRL = 0x01,
  655. HID_KBD_MODIFIER_LEFT_SHIFT = 0x02,
  656. HID_KBD_MODIFIER_LEFT_ALT = 0x04,
  657. HID_KBD_MODIFIER_LEFT_UI = 0x08,
  658. HID_KBD_MODIFIER_RIGHT_CTRL = 0x10,
  659. HID_KBD_MODIFIER_RIGHT_SHIFT = 0x20,
  660. HID_KBD_MODIFIER_RIGHT_ALT = 0x40,
  661. HID_KBD_MODIFIER_RIGHT_UI = 0x80,
  662. };
  663. /**
  664. * @brief HID keyboard LEDs.
  665. */
  666. enum hid_kbd_led {
  667. HID_KBD_LED_NUM_LOCK = 0x01,
  668. HID_KBD_LED_CAPS_LOCK = 0x02,
  669. HID_KBD_LED_SCROLL_LOCK = 0x04,
  670. HID_KBD_LED_COMPOSE = 0x08,
  671. HID_KBD_LED_KANA = 0x10,
  672. };
  673. #endif /* __HID_H_ */