1
0

hid.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-03-13 Urey the first version
  9. * 2017-11-16 ZYH Update to common hid
  10. */
  11. #ifndef _USBDEVICE_CLASS_HID_H_
  12. #define _USBDEVICE_CLASS_HID_H_
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. #define HID_DESCRIPTOR_TYPE 0x21
  17. #define HID_DESCRIPTOR_SIZE 0x09
  18. #define HID_OFF_HID_DESC 0x12
  19. #define USB_HID_SUBCLASS_BOOT 0x01
  20. #define USB_HID_SUBCLASS_NOBOOT 0x00
  21. #define USB_HID_PROTOCOL_NONE 0x00
  22. #define USB_HID_PROTOCOL_KEYBOARD 0x01
  23. #define USB_HID_PROTOCOL_MOUSE 0x02
  24. #define USB_HID_REQ_GET_REPORT 0x01
  25. #define USB_HID_REQ_GET_IDLE 0x02
  26. #define USB_HID_REQ_GET_PROTOCOL 0x03
  27. #define USB_HID_REQ_SET_REPORT 0x09
  28. #define USB_HID_REQ_SET_IDLE 0x0a
  29. #define USB_HID_REQ_SET_PROTOCOL 0x0b
  30. #define MAX_REPORT_SIZE 64
  31. #define HID_RX_BUFSIZE 64
  32. /* HID Report Types */
  33. #define HID_REPORT_INPUT 0x01
  34. #define HID_REPORT_OUTPUT 0x02
  35. #define HID_REPORT_FEATURE 0x03
  36. /* Usage Pages */
  37. #define USAGEPAGE_UNDEFINED 0x00
  38. #define USAGEPAGE_GENERIC 0x01
  39. #define USAGEPAGE_SIMULATION 0x02
  40. #define USAGEPAGE_VR 0x03
  41. #define USAGEPAGE_SPORT 0x04
  42. #define USAGEPAGE_GAME 0x05
  43. #define USAGEPAGE_DEV_CONTROLS 0x06
  44. #define USAGEPAGE_KEYBOARD 0x07
  45. #define USAGEPAGE_LED 0x08
  46. #define USAGEPAGE_BUTTON 0x09
  47. #define USAGEPAGE_ORDINAL 0x0A
  48. #define USAGEPAGE_TELEPHONY 0x0B
  49. #define USAGEPAGE_CONSUMER 0x0C
  50. #define USAGEPAGE_DIGITIZER 0x0D
  51. #define USAGEPAGE_PIDPAGE 0x0F
  52. #define USAGEPAGE_UNICODE 0x10
  53. #define USAGEPAGE_ALPHANUMERIC 0x14
  54. #define USAGEPAGE_BARCODESCANNER 0x8C
  55. /* Generic Desktop Page (0x01) */
  56. #define USAGE_GENERIC_POINTER 0x01
  57. #define USAGE_GENERIC_MOUSE 0x02
  58. #define USAGE_GENERIC_JOYSTICK 0x04
  59. #define USAGE_GENERIC_GAMEPAD 0x05
  60. #define USAGE_GENERIC_KEYBOARD 0x06
  61. #define USAGE_GENERIC_KEYPAD 0x07
  62. #define USAGE_GENERIC_X 0x30
  63. #define USAGE_GENERIC_Y 0x31
  64. #define USAGE_GENERIC_Z 0x32
  65. #define USAGE_GENERIC_RX 0x33
  66. #define USAGE_GENERIC_RY 0x34
  67. #define USAGE_GENERIC_RZ 0x35
  68. #define USAGE_GENERIC_SLIDER 0x36
  69. #define USAGE_GENERIC_DIAL 0x37
  70. #define USAGE_GENERIC_WHEEL 0x38
  71. #define USAGE_GENERIC_HATSWITCH 0x39
  72. #define USAGE_GENERIC_COUNTED_BUFFER 0x3A
  73. #define USAGE_GENERIC_BYTE_COUNT 0x3B
  74. #define USAGE_GENERIC_MOTION_WAKEUP 0x3C
  75. #define USAGE_GENERIC_VX 0x40
  76. #define USAGE_GENERIC_VY 0x41
  77. #define USAGE_GENERIC_VZ 0x42
  78. #define USAGE_GENERIC_VBRX 0x43
  79. #define USAGE_GENERIC_VBRY 0x44
  80. #define USAGE_GENERIC_VBRZ 0x45
  81. #define USAGE_GENERIC_VNO 0x46
  82. #define USAGE_GENERIC_SYSTEM_CTL 0x80
  83. #define USAGE_GENERIC_SYSCTL_POWER 0x81
  84. #define USAGE_GENERIC_SYSCTL_SLEEP 0x82
  85. #define USAGE_GENERIC_SYSCTL_WAKE 0x83
  86. #define USAGE_GENERIC_SYSCTL_CONTEXT_MENU 0x84
  87. #define USAGE_GENERIC_SYSCTL_MAIN_MENU 0x85
  88. #define USAGE_GENERIC_SYSCTL_APP_MENU 0x86
  89. #define USAGE_GENERIC_SYSCTL_HELP_MENU 0x87
  90. #define USAGE_GENERIC_SYSCTL_MENU_EXIT 0x88
  91. #define USAGE_GENERIC_SYSCTL_MENU_SELECT 0x89
  92. #define USAGE_GENERIC_SYSCTL_MENU_RIGHT 0x8A
  93. #define USAGE_GENERIC_SYSCTL_MENU_LEFT 0x8B
  94. #define USAGE_GENERIC_SYSCTL_MENU_UP 0x8C
  95. #define USAGE_GENERIC_SYSCTL_MENU_DOWN 0x8D
  96. /* Simulation Controls Page(0x02) */
  97. #define USAGE_SIMCTRL_THROTTLE 0xBB
  98. /* HID Report Items */
  99. /* Main Items */
  100. #define HID_Input(x) 0x81,x
  101. #define HID_Output(x) 0x91,x
  102. #define HID_Feature(x) 0xB1,x
  103. #define HID_Collection(x) 0xA1,x
  104. #define HID_EndCollection() 0xC0
  105. /* Local Items */
  106. #define HID_Usage(x) 0x09,x
  107. #define HID_UsageMin(x) 0x19,x
  108. #define HID_UsageMax(x) 0x29,x
  109. /* Global Items */
  110. #define HID_UsagePage(x) 0x05,x
  111. #define HID_UsagePageVendor(x) 0x06,x,0xFF
  112. #define HID_LogicalMin(x) 0x15,x
  113. #define HID_LogicalMinS(x) 0x16,(x&0xFF),((x>>8)&0xFF)
  114. #define HID_LogicalMinL(x) 0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  115. #define HID_LogicalMax(x) 0x25,x
  116. #define HID_LogicalMaxS(x) 0x26,(x&0xFF),((x>>8)&0xFF)
  117. #define HID_LogicalMaxL(x) 0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  118. #define HID_PhysicalMin(x) 0x35,x
  119. #define HID_PhysicalMinS(x) 0x36,(x&0xFF),((x>>8)&0xFF)
  120. #define HID_PhysicalMinL(x) 0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  121. #define HID_PhysicalMax(x) 0x45,x
  122. #define HID_PhysicalMaxS(x) 0x46,(x&0xFF),((x>>8)&0xFF)
  123. #define HID_PhysicalMaxL(x) 0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  124. #define HID_UnitExponent(x) 0x55,x
  125. #define HID_Unit(x) 0x65,x
  126. #define HID_UnitS(x) 0x66,(x&0xFF),((x>>8)&0xFF)
  127. #define HID_UnitL(x) 0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  128. #define HID_ReportSize(x) 0x75,x
  129. #define HID_ReportSizeS(x) 0x76,(x&0xFF),((x>>8)&0xFF))
  130. #define HID_ReportSizeL(x) 0x77,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  131. #define HID_ReportID(x) 0x85,x
  132. #define HID_ReportCount(x) 0x95,x
  133. #define HID_ReportCountS(x) 0x96,(x&0xFF),((x>>8)&0xFF)
  134. #define HID_ReportCountL(x) 0x97,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
  135. #define HID_Push() 0xA4
  136. #define HID_Pop() 0xB4
  137. /* Input, Output, Feature Data */
  138. #define HID_DATA (0<<0)
  139. #define HID_CONST (1<<0)
  140. #define HID_ARRAY (0<<1)
  141. #define HID_VAR (1<<1)
  142. #define HID_ABS (0<<2)
  143. #define HID_REL (1<<2)
  144. #define HID_NOWRAP (0<<3)
  145. #define HID_WRAP (1<<3)
  146. #define HID_LINEAR (0<<4)
  147. #define HID_NONLINEAR (1<<4)
  148. #define HID_PREFERREDSTATE (0<<5)
  149. #define HID_NOPREFERRED (1<<5)
  150. #define HID_NONULLPOSITION (0<<6)
  151. #define HID_NULLSTATE (1<<6)
  152. #define HID_NONVOLATILE (0<<7)
  153. #define HID_VOLATILE (1<<7)
  154. /* Collection Data */
  155. #define HID_PHYSICAL 0x00
  156. #define HID_APPLICATION 0x01
  157. #define HID_LOGICAL 0x02
  158. #define HID_REPORT 0x03
  159. #define HID_NAMEDARRAY 0x04
  160. #define HID_USAGESWITCH 0x05
  161. #define HID_USAGEMODIFIER 0x06
  162. //HID_MBED_DEFINE
  163. #define HID_VERSION_1_11 (0x0111)
  164. /* HID Class */
  165. #define HID_CLASS (3)
  166. #define HID_SUBCLASS_NONE (0)
  167. #define HID_SUBCLASS_BOOT (1)
  168. #define HID_PROTOCOL_NONE (0)
  169. #define HID_PROTOCOL_KEYBOARD (1)
  170. #define HID_PROTOCOL_MOUSE (2)
  171. /* Descriptors */
  172. #define HID_DESCRIPTOR (33)
  173. #define HID_DESCRIPTOR_LENGTH (0x09)
  174. #define REPORT_DESCRIPTOR (34)
  175. /* Class requests */
  176. #define GET_REPORT (0x1)
  177. #define GET_IDLE (0x2)
  178. #define SET_REPORT (0x9)
  179. #define SET_IDLE (0xa)
  180. /* HID Class Report Descriptor */
  181. /* Short items: size is 0, 1, 2 or 3 specifying 0, 1, 2 or 4 (four) bytes */
  182. /* of data as per HID Class standard */
  183. /* Main items */
  184. #define INPUT(size) (0x80 | size)
  185. #define OUTPUT(size) (0x90 | size)
  186. #define FEATURE(size) (0xb0 | size)
  187. #define COLLECTION(size) (0xa0 | size)
  188. #define END_COLLECTION(size) (0xc0 | size)
  189. /* Global items */
  190. #define USAGE_PAGE(size) (0x04 | size)
  191. #define LOGICAL_MINIMUM(size) (0x14 | size)
  192. #define LOGICAL_MAXIMUM(size) (0x24 | size)
  193. #define PHYSICAL_MINIMUM(size) (0x34 | size)
  194. #define PHYSICAL_MAXIMUM(size) (0x44 | size)
  195. #define UNIT_EXPONENT(size) (0x54 | size)
  196. #define UNIT(size) (0x64 | size)
  197. #define REPORT_SIZE(size) (0x74 | size)
  198. #define REPORT_ID(size) (0x84 | size)
  199. #define REPORT_COUNT(size) (0x94 | size)
  200. #define PUSH(size) (0xa4 | size)
  201. #define POP(size) (0xb4 | size)
  202. /* Local items */
  203. #define USAGE(size) (0x08 | size)
  204. #define USAGE_MINIMUM(size) (0x18 | size)
  205. #define USAGE_MAXIMUM(size) (0x28 | size)
  206. #define DESIGNATOR_INDEX(size) (0x38 | size)
  207. #define DESIGNATOR_MINIMUM(size) (0x48 | size)
  208. #define DESIGNATOR_MAXIMUM(size) (0x58 | size)
  209. #define STRING_INDEX(size) (0x78 | size)
  210. #define STRING_MINIMUM(size) (0x88 | size)
  211. #define STRING_MAXIMUM(size) (0x98 | size)
  212. #define DELIMITER(size) (0xa8 | size)
  213. #define LSB(n) ((n)&0xff)
  214. #define MSB(n) (((n)&0xff00)>>8)
  215. struct uhid_comm_descriptor
  216. {
  217. #ifdef RT_USB_DEVICE_COMPOSITE
  218. struct uiad_descriptor iad_desc;
  219. #endif
  220. struct uinterface_descriptor intf_desc;
  221. struct uhid_descriptor hid_desc;
  222. struct uendpoint_descriptor ep_in_desc;
  223. struct uendpoint_descriptor ep_out_desc;
  224. };
  225. typedef struct uhid_comm_descriptor* uhid_comm_desc_t;
  226. #ifdef __cplusplus
  227. }
  228. #endif
  229. #endif /* _USBDEVICE_CLASS_HID_H_ */