Advertisement
lastofthemartians

madness

Mar 15th, 2018
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 96.31 KB | None | 0 0
  1.  
  2. //--------------------------------------------------------------------------------
  3. // Report descriptor data in hex (length 1365 bytes)
  4. //--------------------------------------------------------------------------------
  5.  
  6.  
  7. // 05010905 A1018501 05091901 29181500 25017501 95188102 A1000501 09300931
  8. // 09320933 09340935 09360937 150026FF 00350046 FF007508 95088102 C0050125
  9. // 07463B01 75049501 65140939 81426500 95018101 0600FF09 20092175 08950281
  10. // 020A2126 9508B102 0601FF09 49750195 01810275 07810305 0F0992A1 02850209
  11. // 9F09A009 A409A509 A6150025 01350045 01750195 05810295 03810309 94150025
  12. // 01350045 01750195 01810209 22150125 28350145 28750795 018102C0 0921A102
  13. // 85010922 15012528 35014528 75089501 91020925 A1020926 09270930 09310932
  14. // 09330934 09400941 09420943 09282503 15013501 45037508 95019100 C0095009
  15. // 54095115 0026FF7F 350046FF 7F660310 55FD7510 95039102 55006600 00095215
  16. // 0026FF00 35004610 27750895 01910209 53150125 08350145 08750895 01910209
  17. // 55A10205 01093009 31150025 01750195 029102C0 050F0956 95019102 95059103
  18. // 0957A102 0B01000A 000B0200 0A006614 0055FE15 0026FF00 350047A0 8C000066
  19. // 00007508 95029102 55006600 00C0050F 09A76603 1055FD15 0026FF7F 350046FF
  20. // 7F751095 01910266 00005500 C0050F09 5AA10285 02092215 01252835 01452875
  21. // 08950191 02095B09 5D150026 FF003500 46102795 02910209 5C095E66 031055FD
  22. // 26FF7F46 FF7F7510 91024500 66000055 00C0095F A1028503 09221501 25283501
  23. // 45287508 95019102 09231500 25013500 45017504 95019102 0958A102 0B01000A
  24. // 000B0200 0A007502 95029102 C0158025 7F36F0D8 46102709 60750895 01910236
  25. // F0D84610 27096109 62950291 02150026 FF003500 46102709 63096475 08950291
  26. // 02096546 10279501 9102C009 6EA10285 04092215 01252835 01452875 08950191
  27. // 02097015 0026FF00 35004610 27750895 01910209 6F158025 7F36F0D8 46102795
  28. // 01910209 71661400 55FE1500 26FF0035 0047A08C 00009102 097226FF 7F46FF7F
  29. // 66031055 FD751095 01910266 00005500 C00973A1 02850509 22150125 28350145
  30. // 28750895 01910209 701601FF 26FF0036 F0D84610 27751095 019102C0 0974A102
  31. // 85060922 15012528 35014528 75089501 91020975 09761580 257F36F0 D8461027
  32. // 75089502 9102C009 68A10285 07092215 01252835 01452875 08950191 02096C15
  33. // 00261027 35004610 27751095 01910209 69158125 7F350046 FF007508 950C9202
  34. // 01C00966 A1028508 05010930 09311581 257F3500 46FF0075 08950291 02C0050F
  35. // 0977A102 850A0922 15012528 35014528 75089501 91020978 A1020979 097A097B
  36. // 15012503 75089501 9100C009 7C150026 FF003500 46FF0091 02C00990 A102850B
  37. // 09222528 15013501 45287508 95019102 C00996A1 02850C09 97099809 99099A09
  38. // 9B099C15 01250675 08950191 00C0097D A102850D 097E1500 26FF0035 00461027
  39. // 75089501 9102C009 6BA10285 0E092215 01252835 01452875 08950191 02096D15
  40. // 0026FF00 350046FF 00750895 01910209 51660310 55FD1500 26FF7F35 0046FF7F
  41. // 75109501 91025500 660000C0 09ABA102 850F0925 A1020926 09270930 09310932
  42. // 09330934 09400941 09420943 09282503 15013501 45037508 9501B100 C0050109
  43. // 3B150026 FF013500 46FF0175 0A9501B1 027506B1 01C0050F 0989A102 85020922
  44. // 25281501 35014528 75089501 B102098B A102098C 098D098E 25031501 35014503
  45. // 75089501 B100C009 AC150027 FFFF0000 350047FF FF000075 109501B1 00C0097F
  46. // A1028503 09807510 95011500 350027FF FF000047 FFFF0000 B1020983 26FF0046
  47. // FF007508 9501B102 09A909AA 75019502 15002501 35004501 B1027506 9501B103
  48. // C0C00600 FF0901A1 01150026 FF007508 85119520 0900B202 01851295 440900B2
  49. // 02018513 95C00900 B2020185 1495C409 00B20201 C0  
  50.  
  51.  
  52. //--------------------------------------------------------------------------------
  53. // Decoded Application Collection
  54. //--------------------------------------------------------------------------------
  55.  
  56. /*
  57. 05 01        (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  58. 09 05        (LOCAL)  USAGE              0x00010005 Game Pad (CA=Application Collection)
  59. A1 01        (MAIN)   COLLECTION         0x00000001 Application (Usage=0x00010005: Page=Generic Desktop Page, Usage=Game Pad, Type=CA)
  60. 85 01          (GLOBAL) REPORT_ID          0x01 (1)
  61. 05 09          (GLOBAL) USAGE_PAGE         0x0009 Button Page
  62. 19 01          (LOCAL)  USAGE_MINIMUM      0x00090001 Button 1 Primary/trigger (MULTI=Selector, On/Off, Momentary, or One Shot)
  63. 29 18          (LOCAL)  USAGE_MAXIMUM      0x00090018 Button 24 (MULTI=Selector, On/Off, Momentary, or One Shot)
  64. 15 00          (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  65. 25 01          (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  66. 75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  67. 95 18          (GLOBAL) REPORT_COUNT       0x18 (24) Number of fields  
  68. 81 02          (MAIN)   INPUT              0x00000002 (24 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  69. A1 00          (MAIN)   COLLECTION         0x00000000 Physical (Usage=0x0: Page=, Usage=, Type=) <-- Warning: USAGE type should be CP (Physical)
  70. 05 01            (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  71. 09 30            (LOCAL)  USAGE              0x00010030 X (DV=Dynamic Value)
  72. 09 31            (LOCAL)  USAGE              0x00010031 Y (DV=Dynamic Value)
  73. 09 32            (LOCAL)  USAGE              0x00010032 Z (DV=Dynamic Value)
  74. 09 33            (LOCAL)  USAGE              0x00010033 Rx (DV=Dynamic Value)
  75. 09 34            (LOCAL)  USAGE              0x00010034 Ry (DV=Dynamic Value)
  76. 09 35            (LOCAL)  USAGE              0x00010035 Rz (DV=Dynamic Value)
  77. 09 36            (LOCAL)  USAGE              0x00010036 Slider (DV=Dynamic Value)
  78. 09 37            (LOCAL)  USAGE              0x00010037 Dial (DV=Dynamic Value)
  79. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  80. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  81. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  82. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  83. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  84. 95 08            (GLOBAL) REPORT_COUNT       0x08 (8) Number of fields  
  85. 81 02            (MAIN)   INPUT              0x00000002 (8 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  86. C0             (MAIN)   END_COLLECTION     Physical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x,EXP=0)
  87. 05 01          (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page <-- Redundant: USAGE_PAGE is already 0x0001
  88. 25 07          (GLOBAL) LOGICAL_MAXIMUM    0x07 (7)  
  89. 46 3B01        (GLOBAL) PHYSICAL_MAXIMUM   0x013B (315)  
  90. 75 04          (GLOBAL) REPORT_SIZE        0x04 (4) Number of bits per field  
  91. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  92. 65 14          (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  93. 09 39          (LOCAL)  USAGE              0x00010039 Hat switch (DV=Dynamic Value)
  94. 81 42          (MAIN)   INPUT              0x00000042 (1 field x 4 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
  95. 65 00          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  96. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  97. 81 01          (MAIN)   INPUT              0x00000001 (1 field x 4 bits) 1=Constant 0=Array 0=Absolute
  98. 06 00FF        (GLOBAL) USAGE_PAGE         0xFF00 Vendor-defined
  99. 09 20          (LOCAL)  USAGE              0xFF000020 <-- Warning: Undocumented usage
  100. 09 21          (LOCAL)  USAGE              0xFF000021 <-- Warning: Undocumented usage
  101. 75 08          (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  102. 95 02          (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  103. 81 02          (MAIN)   INPUT              0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  104. 0A 2126        (LOCAL)  USAGE              0xFF002621 <-- Warning: Undocumented usage
  105. 95 08          (GLOBAL) REPORT_COUNT       0x08 (8) Number of fields  
  106. B1 02          (MAIN)   FEATURE            0x00000002 (8 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  107. 06 01FF        (GLOBAL) USAGE_PAGE         0xFF01 Vendor-defined
  108. 09 49          (LOCAL)  USAGE              0xFF010049 <-- Warning: Undocumented usage
  109. 75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  110. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  111. 81 02          (MAIN)   INPUT              0x00000002 (1 field x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap  <-- Error: REPORT_SIZE (1) is too small for LOGICAL_MAXIMUM (7) which needs 3 bits.
  112. 75 07          (GLOBAL) REPORT_SIZE        0x07 (7) Number of bits per field  
  113. 81 03          (MAIN)   INPUT              0x00000003 (1 field x 7 bits) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  114. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  115. 09 92          (LOCAL)  USAGE              0x000F0092 PID State Report (CL=Logical Collection)
  116. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0092: Page=Physical Interface Device Page, Usage=PID State Report, Type=CL)
  117. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  118. 09 9F            (LOCAL)  USAGE              0x000F009F Device Paused (DF=Dynamic Flag)
  119. 09 A0            (LOCAL)  USAGE              0x000F00A0 Actuators Enabled (DF=Dynamic Flag)
  120. 09 A4            (LOCAL)  USAGE              0x000F00A4 Safety Switch (DF=Dynamic Flag)
  121. 09 A5            (LOCAL)  USAGE              0x000F00A5 Actuator Override Switch (DF=Dynamic Flag)
  122. 09 A6            (LOCAL)  USAGE              0x000F00A6 Actuator Power (DF=Dynamic Flag)
  123. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  124. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  125. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  126. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1)  
  127. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  128. 95 05            (GLOBAL) REPORT_COUNT       0x05 (5) Number of fields  
  129. 81 02            (MAIN)   INPUT              0x00000002 (5 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  130. 95 03            (GLOBAL) REPORT_COUNT       0x03 (3) Number of fields  
  131. 81 03            (MAIN)   INPUT              0x00000003 (3 fields x 1 bit) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  132. 09 94            (LOCAL)  USAGE              0x000F0094 Effect Playing (DF=Dynamic Flag)
  133. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  134. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1) <-- Redundant: LOGICAL_MAXIMUM is already 1
  135. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  136. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1) <-- Redundant: PHYSICAL_MAXIMUM is already 1
  137. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field <-- Redundant: REPORT_SIZE is already 1
  138. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  139. 81 02            (MAIN)   INPUT              0x00000002 (1 field x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  140. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  141. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  142. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  143. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  144. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  145. 75 07            (GLOBAL) REPORT_SIZE        0x07 (7) Number of bits per field  
  146. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  147. 81 02            (MAIN)   INPUT              0x00000002 (1 field x 7 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  148. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  149. 09 21          (LOCAL)  USAGE              0x000F0021 Set Effect Report (CL=Logical Collection)
  150. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0021: Page=Physical Interface Device Page, Usage=Set Effect Report, Type=CL)
  151. 85 01            (GLOBAL) REPORT_ID          0x01 (1)
  152. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  153. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  154. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40) <-- Redundant: LOGICAL_MAXIMUM is already 40
  155. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  156. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40) <-- Redundant: PHYSICAL_MAXIMUM is already 40
  157. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  158. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  159. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  160. 09 25            (LOCAL)  USAGE              0x000F0025 Effect Type (NAry=Named Array)
  161. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0025: Page=Physical Interface Device Page, Usage=Effect Type, Type=NAry) <-- Warning: USAGE type should be CL (Logical)
  162. 09 26              (LOCAL)  USAGE              0x000F0026 ET Constant Force (Sel=Selector)
  163. 09 27              (LOCAL)  USAGE              0x000F0027 ET Ramp (Sel=Selector)
  164. 09 30              (LOCAL)  USAGE              0x000F0030 ET Square (Sel=Selector)
  165. 09 31              (LOCAL)  USAGE              0x000F0031 ET Sine (Sel=Selector)
  166. 09 32              (LOCAL)  USAGE              0x000F0032 ET Triangle (Sel=Selector)
  167. 09 33              (LOCAL)  USAGE              0x000F0033 ET Sawtooth Up (Sel=Selector)
  168. 09 34              (LOCAL)  USAGE              0x000F0034 ET Sawtooth Down (Sel=Selector)
  169. 09 40              (LOCAL)  USAGE              0x000F0040 ET Spring (Sel=Selector)
  170. 09 41              (LOCAL)  USAGE              0x000F0041 ET Damper (Sel=Selector)
  171. 09 42              (LOCAL)  USAGE              0x000F0042 ET Inertia (Sel=Selector)
  172. 09 43              (LOCAL)  USAGE              0x000F0043 ET Friction (Sel=Selector)
  173. 09 28              (LOCAL)  USAGE              0x000F0028 ET Custom Force Data (Sel=Selector)
  174. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  175. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  176. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  177. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  178. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  179. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  180. 91 00              (MAIN)   OUTPUT             0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  181. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  182. 09 50            (LOCAL)  USAGE              0x000F0050 Duration (DV=Dynamic Value)
  183. 09 54            (LOCAL)  USAGE              0x000F0054 Trigger Repeat Interval (DV=Dynamic Value)
  184. 09 51            (LOCAL)  USAGE              0x000F0051 Sample Period (DV=Dynamic Value)
  185. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  186. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  187. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  188. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  189. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  190. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  191. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  192. 95 03            (GLOBAL) REPORT_COUNT       0x03 (3) Number of fields  
  193. 91 02            (MAIN)   OUTPUT             0x00000002 (3 fields x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  194. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  195. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  196. 09 52            (LOCAL)  USAGE              0x000F0052 Gain (DV=Dynamic Value)
  197. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  198. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  199. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  200. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  201. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  202. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  203. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  204. 09 53            (LOCAL)  USAGE              0x000F0053 Trigger Button (DV=Dynamic Value)
  205. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  206. 25 08            (GLOBAL) LOGICAL_MAXIMUM    0x08 (8)  
  207. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  208. 45 08            (GLOBAL) PHYSICAL_MAXIMUM   0x08 (8)  
  209. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  210. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  211. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  212. 09 55            (LOCAL)  USAGE              0x000F0055 Axes Enable (US=Usage Switch)
  213. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0055: Page=Physical Interface Device Page, Usage=Axes Enable, Type=US) <-- Warning: USAGE type should be CL (Logical)
  214. 05 01              (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  215. 09 30              (LOCAL)  USAGE              0x00010030 X (DV=Dynamic Value)
  216. 09 31              (LOCAL)  USAGE              0x00010031 Y (DV=Dynamic Value)
  217. 15 00              (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  218. 25 01              (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  219. 75 01              (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  220. 95 02              (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  221. 91 02              (MAIN)   OUTPUT             0x00000002 (2 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  222. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=8) UNIT(0x00000000,EXP=0)
  223. 05 0F            (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  224. 09 56            (LOCAL)  USAGE              0x000F0056 Direction Enable (DF=Dynamic Flag)
  225. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  226. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  227. 95 05            (GLOBAL) REPORT_COUNT       0x05 (5) Number of fields  
  228. 91 03            (MAIN)   OUTPUT             0x00000003 (5 fields x 1 bit) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  229. 09 57            (LOCAL)  USAGE              0x000F0057 Direction (CL=Logical Collection)
  230. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0057: Page=Physical Interface Device Page, Usage=Direction, Type=CL)
  231. 0B 01000A00        (LOCAL)  USAGE              0x000A0001 Ordinal Page: Instance 1 (UM=Usage Modifier)
  232. 0B 02000A00        (LOCAL)  USAGE              0x000A0002 Ordinal Page: Instance 2 (UM=Usage Modifier)
  233. 66 1400            (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  234. 55 FE              (GLOBAL) UNIT_EXPONENT      0xFE (Unit Value x 10⁻²)
  235. 15 00              (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  236. 26 FF00            (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  237. 35 00              (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  238. 47 A08C0000        (GLOBAL) PHYSICAL_MAXIMUM   0x00008CA0 (36000)  
  239. 66 0000            (GLOBAL) UNIT               0x00000000 No unit (0=None)
  240. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  241. 95 02              (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  242. 91 02              (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  243. 55 00              (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  244. 66 0000            (GLOBAL) UNIT               0x00000000 No unit (0=None) <-- Redundant: UNIT is already 0x00000000
  245. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=36000) UNIT(0x00000000,EXP=0)
  246. 05 0F            (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page <-- Redundant: USAGE_PAGE is already 0x000F
  247. 09 A7            (LOCAL)  USAGE              0x000F00A7 Start Delay (DV=Dynamic Value)
  248. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  249. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  250. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  251. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  252. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  253. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  254. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  255. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  256. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  257. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  258. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  259. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=32767) UNIT(0x00000000,EXP=0)
  260. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page <-- Redundant: USAGE_PAGE is already 0x000F
  261. 09 5A          (LOCAL)  USAGE              0x000F005A Set Envelope Report (CL=Logical Collection)
  262. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F005A: Page=Physical Interface Device Page, Usage=Set Envelope Report, Type=CL)
  263. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  264. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  265. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  266. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  267. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  268. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  269. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  270. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  271. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  272. 09 5B            (LOCAL)  USAGE              0x000F005B Attack Level (DV=Dynamic Value)
  273. 09 5D            (LOCAL)  USAGE              0x000F005D Fade Level (DV=Dynamic Value)
  274. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  275. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  276. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  277. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  278. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  279. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  280. 09 5C            (LOCAL)  USAGE              0x000F005C Attack Time (DV=Dynamic Value)
  281. 09 5E            (LOCAL)  USAGE              0x000F005E Fade Time (DV=Dynamic Value)
  282. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  283. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  284. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  285. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  286. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  287. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  288. 45 00            (GLOBAL) PHYSICAL_MAXIMUM   0x00 (0)  <-- Info: Consider replacing 45 00 with 44
  289. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  290. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  291. C0             (MAIN)   END_COLLECTION     Logical
  292. 09 5F          (LOCAL)  USAGE              0x000F005F Set Condition Report (CL=Logical Collection)
  293. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F005F: Page=Physical Interface Device Page, Usage=Set Condition Report, Type=CL)
  294. 85 03            (GLOBAL) REPORT_ID          0x03 (3)
  295. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  296. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  297. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  298. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  299. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  300. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  301. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  302. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  303. 09 23            (LOCAL)  USAGE              0x000F0023 Parameter Block Offset (DV=Dynamic Value)
  304. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  305. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  306. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  307. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1)  
  308. 75 04            (GLOBAL) REPORT_SIZE        0x04 (4) Number of bits per field  
  309. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  310. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 4 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  311. 09 58            (LOCAL)  USAGE              0x000F0058 Type Specific Block Offset (CL=Logical Collection)
  312. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0058: Page=Physical Interface Device Page, Usage=Type Specific Block Offset, Type=CL)
  313. 0B 01000A00        (LOCAL)  USAGE              0x000A0001 Ordinal Page: Instance 1 (UM=Usage Modifier)
  314. 0B 02000A00        (LOCAL)  USAGE              0x000A0002 Ordinal Page: Instance 2 (UM=Usage Modifier)
  315. 75 02              (GLOBAL) REPORT_SIZE        0x02 (2) Number of bits per field  
  316. 95 02              (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  317. 91 02              (MAIN)   OUTPUT             0x00000002 (2 fields x 2 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  318. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  319. 15 80            (GLOBAL) LOGICAL_MINIMUM    0x80 (-128)  
  320. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127)  
  321. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  322. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  323. 09 60            (LOCAL)  USAGE              0x000F0060 CP Offset (DV=Dynamic Value)
  324. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  325. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  326. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  327. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000) <-- Redundant: PHYSICAL_MINIMUM is already -10000
  328. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000) <-- Redundant: PHYSICAL_MAXIMUM is already 10000
  329. 09 61            (LOCAL)  USAGE              0x000F0061 Positive Coefficient (DV=Dynamic Value)
  330. 09 62            (LOCAL)  USAGE              0x000F0062 Negative Coefficient (DV=Dynamic Value)
  331. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  332. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  333. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  334. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  335. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  336. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000) <-- Redundant: PHYSICAL_MAXIMUM is already 10000
  337. 09 63            (LOCAL)  USAGE              0x000F0063 Positive Saturation (DV=Dynamic Value)
  338. 09 64            (LOCAL)  USAGE              0x000F0064 Negative Saturation (DV=Dynamic Value)
  339. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  340. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields <-- Redundant: REPORT_COUNT is already 2
  341. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  342. 09 65            (LOCAL)  USAGE              0x000F0065 Dead Band (DV=Dynamic Value)
  343. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000) <-- Redundant: PHYSICAL_MAXIMUM is already 10000
  344. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  345. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  346. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=10000) UNIT(0x00000000,EXP=0)
  347. 09 6E          (LOCAL)  USAGE              0x000F006E Set Periodic Report (CL=Logical Collection)
  348. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F006E: Page=Physical Interface Device Page, Usage=Set Periodic Report, Type=CL)
  349. 85 04            (GLOBAL) REPORT_ID          0x04 (4)
  350. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  351. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  352. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  353. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  354. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  355. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  356. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  357. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  358. 09 70            (LOCAL)  USAGE              0x000F0070 Magnitude (DV=Dynamic Value)
  359. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  360. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  361. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  362. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  363. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  364. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  365. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  366. 09 6F            (LOCAL)  USAGE              0x000F006F Offset (DV=Dynamic Value)
  367. 15 80            (GLOBAL) LOGICAL_MINIMUM    0x80 (-128)  
  368. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127)  
  369. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  370. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000) <-- Redundant: PHYSICAL_MAXIMUM is already 10000
  371. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  372. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  373. 09 71            (LOCAL)  USAGE              0x000F0071 Phase (DV=Dynamic Value)
  374. 66 1400          (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  375. 55 FE            (GLOBAL) UNIT_EXPONENT      0xFE (Unit Value x 10⁻²)
  376. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  377. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  378. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  379. 47 A08C0000      (GLOBAL) PHYSICAL_MAXIMUM   0x00008CA0 (36000)  
  380. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  381. 09 72            (LOCAL)  USAGE              0x000F0072 Period (DV=Dynamic Value)
  382. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  383. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  384. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  385. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  386. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  387. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  388. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  389. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  390. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  391. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=32767) UNIT(0x00000000,EXP=0)
  392. 09 73          (LOCAL)  USAGE              0x000F0073 Set Constant Force Report (CL=Logical Collection)
  393. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0073: Page=Physical Interface Device Page, Usage=Set Constant Force Report, Type=CL)
  394. 85 05            (GLOBAL) REPORT_ID          0x05 (5)
  395. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  396. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  397. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  398. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  399. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  400. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  401. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  402. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  403. 09 70            (LOCAL)  USAGE              0x000F0070 Magnitude (DV=Dynamic Value)
  404. 16 01FF          (GLOBAL) LOGICAL_MINIMUM    0xFF01 (-255)  
  405. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  406. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  407. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  408. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  409. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  410. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  411. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=-10000,MAX=10000) UNIT(0x00000000,EXP=0)
  412. 09 74          (LOCAL)  USAGE              0x000F0074 Set Ramp Force Report (CL=Logical Collection)
  413. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0074: Page=Physical Interface Device Page, Usage=Set Ramp Force Report, Type=CL)
  414. 85 06            (GLOBAL) REPORT_ID          0x06 (6)
  415. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  416. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  417. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  418. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  419. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  420. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  421. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  422. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  423. 09 75            (LOCAL)  USAGE              0x000F0075 Ramp Start (DV=Dynamic Value)
  424. 09 76            (LOCAL)  USAGE              0x000F0076 Ramp End (DV=Dynamic Value)
  425. 15 80            (GLOBAL) LOGICAL_MINIMUM    0x80 (-128)  
  426. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127)  
  427. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  428. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  429. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  430. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  431. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  432. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=-10000,MAX=10000) UNIT(0x00000000,EXP=0)
  433. 09 68          (LOCAL)  USAGE              0x000F0068 Custom Force Data Report (CL=Logical Collection)
  434. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0068: Page=Physical Interface Device Page, Usage=Custom Force Data Report, Type=CL)
  435. 85 07            (GLOBAL) REPORT_ID          0x07 (7)
  436. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  437. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  438. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  439. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  440. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  441. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  442. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  443. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  444. 09 6C            (LOCAL)  USAGE              0x000F006C Custom Force Data Offset (DV=Dynamic Value)
  445. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  446. 26 1027          (GLOBAL) LOGICAL_MAXIMUM    0x2710 (10000)  
  447. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  448. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  449. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  450. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  451. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  452. 09 69            (LOCAL)  USAGE              0x000F0069 Custom Force Data (DV=Dynamic Value)
  453. 15 81            (GLOBAL) LOGICAL_MINIMUM    0x81 (-127)  
  454. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127)  
  455. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  456. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  457. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  458. 95 0C            (GLOBAL) REPORT_COUNT       0x0C (12) Number of fields  
  459. 92 0201          (MAIN)   OUTPUT             0x00000102 (12 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  460. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x00000000,EXP=0)
  461. 09 66          (LOCAL)  USAGE              0x000F0066 Download Force Sample (CL=Logical Collection)
  462. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0066: Page=Physical Interface Device Page, Usage=Download Force Sample, Type=CL)
  463. 85 08            (GLOBAL) REPORT_ID          0x08 (8)
  464. 05 01            (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  465. 09 30            (LOCAL)  USAGE              0x00010030 X (DV=Dynamic Value)
  466. 09 31            (LOCAL)  USAGE              0x00010031 Y (DV=Dynamic Value)
  467. 15 81            (GLOBAL) LOGICAL_MINIMUM    0x81 (-127) <-- Redundant: LOGICAL_MINIMUM is already -127
  468. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127) <-- Redundant: LOGICAL_MAXIMUM is already 127
  469. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  470. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255) <-- Redundant: PHYSICAL_MAXIMUM is already 255
  471. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  472. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  473. 91 02            (MAIN)   OUTPUT             0x00000002 (2 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  474. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x00000000,EXP=0)
  475. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  476. 09 77          (LOCAL)  USAGE              0x000F0077 Effect Operation Report (CL=Logical Collection)
  477. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0077: Page=Physical Interface Device Page, Usage=Effect Operation Report, Type=CL)
  478. 85 0A            (GLOBAL) REPORT_ID          0x0A (10)
  479. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  480. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  481. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  482. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  483. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  484. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  485. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  486. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  487. 09 78            (LOCAL)  USAGE              0x000F0078 Effect Operation (NAry=Named Array)
  488. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0078: Page=Physical Interface Device Page, Usage=Effect Operation, Type=NAry) <-- Warning: USAGE type should be CL (Logical)
  489. 09 79              (LOCAL)  USAGE              0x000F0079 Op Effect Start (Sel=Selector)
  490. 09 7A              (LOCAL)  USAGE              0x000F007A Op Effect Start Solo (Sel=Selector)
  491. 09 7B              (LOCAL)  USAGE              0x000F007B Op Effect Stop (Sel=Selector)
  492. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  493. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  494. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  495. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  496. 91 00              (MAIN)   OUTPUT             0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  497. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  498. 09 7C            (LOCAL)  USAGE              0x000F007C Loop Count (DV=Dynamic Value)
  499. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  500. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  501. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  502. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  503. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  504. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x00000000,EXP=0)
  505. 09 90          (LOCAL)  USAGE              0x000F0090 PID Block Free Report (CL=Logical Collection)
  506. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0090: Page=Physical Interface Device Page, Usage=PID Block Free Report, Type=CL)
  507. 85 0B            (GLOBAL) REPORT_ID          0x0B (11)
  508. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  509. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  510. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  511. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  512. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  513. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  514. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  515. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  516. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  517. 09 96          (LOCAL)  USAGE              0x000F0096 PID Device Control (NAry=Named Array)
  518. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0096: Page=Physical Interface Device Page, Usage=PID Device Control, Type=NAry) <-- Warning: USAGE type should be CL (Logical)
  519. 85 0C            (GLOBAL) REPORT_ID          0x0C (12)
  520. 09 97            (LOCAL)  USAGE              0x000F0097 DC Enable Actuators (Sel=Selector)
  521. 09 98            (LOCAL)  USAGE              0x000F0098 DC Disable Actuators (Sel=Selector)
  522. 09 99            (LOCAL)  USAGE              0x000F0099 DC Stop All Effects (Sel=Selector)
  523. 09 9A            (LOCAL)  USAGE              0x000F009A DC Device Reset (Sel=Selector)
  524. 09 9B            (LOCAL)  USAGE              0x000F009B DC Device Pause (Sel=Selector)
  525. 09 9C            (LOCAL)  USAGE              0x000F009C DC Device Continue (Sel=Selector)
  526. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  527. 25 06            (GLOBAL) LOGICAL_MAXIMUM    0x06 (6)  
  528. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  529. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  530. 91 00            (MAIN)   OUTPUT             0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  531. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  532. 09 7D          (LOCAL)  USAGE              0x000F007D Device Gain Report (CL=Logical Collection)
  533. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F007D: Page=Physical Interface Device Page, Usage=Device Gain Report, Type=CL)
  534. 85 0D            (GLOBAL) REPORT_ID          0x0D (13)
  535. 09 7E            (LOCAL)  USAGE              0x000F007E Device Gain (DV=Dynamic Value)
  536. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  537. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  538. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  539. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  540. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  541. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  542. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  543. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=10000) UNIT(0x00000000,EXP=0)
  544. 09 6B          (LOCAL)  USAGE              0x000F006B Set Custom Force Report (CL=Logical Collection)
  545. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F006B: Page=Physical Interface Device Page, Usage=Set Custom Force Report, Type=CL)
  546. 85 0E            (GLOBAL) REPORT_ID          0x0E (14)
  547. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  548. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  549. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  550. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  551. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  552. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  553. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  554. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  555. 09 6D            (LOCAL)  USAGE              0x000F006D Sample Count (DV=Dynamic Value)
  556. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  557. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  558. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  559. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  560. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  561. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  562. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  563. 09 51            (LOCAL)  USAGE              0x000F0051 Sample Period (DV=Dynamic Value)
  564. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  565. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  566. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  567. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  568. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  569. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  570. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  571. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  572. 91 02            (MAIN)   OUTPUT             0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  573. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  574. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  575. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=32767) UNIT(0x00000000,EXP=0)
  576. 09 AB          (LOCAL)  USAGE              0x000F00AB Create New Effect Report (CL=Logical Collection)
  577. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F00AB: Page=Physical Interface Device Page, Usage=Create New Effect Report, Type=CL)
  578. 85 0F            (GLOBAL) REPORT_ID          0x0F (15)
  579. 09 25            (LOCAL)  USAGE              0x000F0025 Effect Type (NAry=Named Array)
  580. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0025: Page=Physical Interface Device Page, Usage=Effect Type, Type=NAry) <-- Warning: USAGE type should be CL (Logical)
  581. 09 26              (LOCAL)  USAGE              0x000F0026 ET Constant Force (Sel=Selector)
  582. 09 27              (LOCAL)  USAGE              0x000F0027 ET Ramp (Sel=Selector)
  583. 09 30              (LOCAL)  USAGE              0x000F0030 ET Square (Sel=Selector)
  584. 09 31              (LOCAL)  USAGE              0x000F0031 ET Sine (Sel=Selector)
  585. 09 32              (LOCAL)  USAGE              0x000F0032 ET Triangle (Sel=Selector)
  586. 09 33              (LOCAL)  USAGE              0x000F0033 ET Sawtooth Up (Sel=Selector)
  587. 09 34              (LOCAL)  USAGE              0x000F0034 ET Sawtooth Down (Sel=Selector)
  588. 09 40              (LOCAL)  USAGE              0x000F0040 ET Spring (Sel=Selector)
  589. 09 41              (LOCAL)  USAGE              0x000F0041 ET Damper (Sel=Selector)
  590. 09 42              (LOCAL)  USAGE              0x000F0042 ET Inertia (Sel=Selector)
  591. 09 43              (LOCAL)  USAGE              0x000F0043 ET Friction (Sel=Selector)
  592. 09 28              (LOCAL)  USAGE              0x000F0028 ET Custom Force Data (Sel=Selector)
  593. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  594. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  595. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  596. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  597. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  598. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  599. B1 00              (MAIN)   FEATURE            0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  600. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  601. 05 01            (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  602. 09 3B            (LOCAL)  USAGE              0x0001003B Byte Count (DV=Dynamic Value)
  603. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  604. 26 FF01          (GLOBAL) LOGICAL_MAXIMUM    0x01FF (511)  
  605. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  606. 46 FF01          (GLOBAL) PHYSICAL_MAXIMUM   0x01FF (511)  
  607. 75 0A            (GLOBAL) REPORT_SIZE        0x0A (10) Number of bits per field  
  608. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  609. B1 02            (MAIN)   FEATURE            0x00000002 (1 field x 10 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  610. 75 06            (GLOBAL) REPORT_SIZE        0x06 (6) Number of bits per field  
  611. B1 01            (MAIN)   FEATURE            0x00000001 (1 field x 6 bits) 1=Constant 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  612. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=511) UNIT(0x00000000,EXP=0)
  613. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  614. 09 89          (LOCAL)  USAGE              0x000F0089 PID Block Load Report (CL=Logical Collection)
  615. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0089: Page=Physical Interface Device Page, Usage=PID Block Load Report, Type=CL)
  616. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  617. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  618. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  619. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  620. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  621. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  622. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  623. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  624. B1 02            (MAIN)   FEATURE            0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  625. 09 8B            (LOCAL)  USAGE              0x000F008B Block Load Status (NAry=Named Array)
  626. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F008B: Page=Physical Interface Device Page, Usage=Block Load Status, Type=NAry) <-- Warning: USAGE type should be CL (Logical)
  627. 09 8C              (LOCAL)  USAGE              0x000F008C Block Load Success (Sel=Selector)
  628. 09 8D              (LOCAL)  USAGE              0x000F008D Block Load Full (Sel=Selector)
  629. 09 8E              (LOCAL)  USAGE              0x000F008E Block Load Error (Sel=Selector)
  630. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  631. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  632. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  633. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  634. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  635. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  636. B1 00              (MAIN)   FEATURE            0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  637. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  638. 09 AC            (LOCAL)  USAGE              0x000F00AC RAM Pool Available (DV=Dynamic Value)
  639. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  640. 27 FFFF0000      (GLOBAL) LOGICAL_MAXIMUM    0x0000FFFF (65535)  
  641. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  642. 47 FFFF0000      (GLOBAL) PHYSICAL_MAXIMUM   0x0000FFFF (65535)  
  643. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  644. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  645. B1 00            (MAIN)   FEATURE            0x00000000 (1 field x 16 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  646. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=65535) UNIT(0x00000000,EXP=0)
  647. 09 7F          (LOCAL)  USAGE              0x000F007F PID Pool Report (CL=Logical Collection)
  648. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F007F: Page=Physical Interface Device Page, Usage=PID Pool Report, Type=CL)
  649. 85 03            (GLOBAL) REPORT_ID          0x03 (3)
  650. 09 80            (LOCAL)  USAGE              0x000F0080 RAM Pool Size (DV=Dynamic Value)
  651. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field <-- Redundant: REPORT_SIZE is already 16
  652. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  653. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  654. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  655. 27 FFFF0000      (GLOBAL) LOGICAL_MAXIMUM    0x0000FFFF (65535) <-- Redundant: LOGICAL_MAXIMUM is already 65535
  656. 47 FFFF0000      (GLOBAL) PHYSICAL_MAXIMUM   0x0000FFFF (65535) <-- Redundant: PHYSICAL_MAXIMUM is already 65535
  657. B1 02            (MAIN)   FEATURE            0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  658. 09 83            (LOCAL)  USAGE              0x000F0083 Simultaneous Effects Max (SV=Static Value)
  659. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  660. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  661. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  662. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  663. B1 02            (MAIN)   FEATURE            0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  664. 09 A9            (LOCAL)  USAGE              0x000F00A9 Device Managed Pool (SF=Static Flag)
  665. 09 AA            (LOCAL)  USAGE              0x000F00AA Shared Parameter Blocks (SF=Static Flag)
  666. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  667. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  668. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  669. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  670. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  671. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1)  
  672. B1 02            (MAIN)   FEATURE            0x00000002 (2 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  673. 75 06            (GLOBAL) REPORT_SIZE        0x06 (6) Number of bits per field  
  674. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  675. B1 03            (MAIN)   FEATURE            0x00000003 (1 field x 6 bits) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
  676. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  677. C0           (MAIN)   END_COLLECTION     Application  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  678. */
  679.  
  680. //--------------------------------------------------------------------------------
  681. // Vendor-defined featureReport 01 (Device <-> Host)
  682. //--------------------------------------------------------------------------------
  683.  
  684. typedef struct
  685. {
  686.   uint8_t  reportId;                                 // Report ID = 0x01 (1)
  687.   uint8_t  VEN_VendorDefined2621[8];                 // Usage 0xFF002621: , Value = 0 to 7, Physical = Value x 45
  688. } featureReport01_t;
  689.  
  690.  
  691. //--------------------------------------------------------------------------------
  692. // Physical Interface Device Page featureReport 0F (Device <-> Host)
  693. //--------------------------------------------------------------------------------
  694.  
  695. typedef struct
  696. {
  697.   uint8_t  reportId;                                 // Report ID = 0x0F (15)
  698.                                                      // Collection: CreateNewEffectReport EffectType
  699.   uint8_t  PID_CreateNewEffectReportEffectType;      // Value = 1 to 3, Physical = ((Value - 1) + 1)
  700.                                                      // Value 1 = Usage 0x000F0026: ET Constant Force
  701.                                                      // Value 2 = Usage 0x000F0027: ET Ramp
  702.                                                      // Value 3 = Usage 0x000F0030: ET Square
  703.                                                      // Value 4 = Usage 0x000F0031: ET Sine <-- Error: Value (4) exceeds LOGICAL_MAXIMUM
  704.                                                      // Value 5 = Usage 0x000F0032: ET Triangle <-- Error: Value (5) exceeds LOGICAL_MAXIMUM
  705.                                                      // Value 6 = Usage 0x000F0033: ET Sawtooth Up <-- Error: Value (6) exceeds LOGICAL_MAXIMUM
  706.                                                      // Value 7 = Usage 0x000F0034: ET Sawtooth Down <-- Error: Value (7) exceeds LOGICAL_MAXIMUM
  707.                                                      // Value 8 = Usage 0x000F0040: ET Spring <-- Error: Value (8) exceeds LOGICAL_MAXIMUM
  708.                                                      // Value 9 = Usage 0x000F0041: ET Damper <-- Error: Value (9) exceeds LOGICAL_MAXIMUM
  709.                                                      // Value 10 = Usage 0x000F0042: ET Inertia <-- Error: Value (10) exceeds LOGICAL_MAXIMUM
  710.                                                      // Value 11 = Usage 0x000F0043: ET Friction <-- Error: Value (11) exceeds LOGICAL_MAXIMUM
  711.                                                      // Value 12 = Usage 0x000F0028: ET Custom Force Data <-- Error: Value (12) exceeds LOGICAL_MAXIMUM
  712.                                                      // Collection: CreateNewEffectReport
  713.   uint16_t GD_CreateNewEffectReportByteCount : 10;   // Usage 0x0001003B: Byte Count, Value = 0 to 511, Physical = Value
  714.   uint8_t  : 6;                                      // Pad
  715. } featureReport0F_t;
  716.  
  717.  
  718. //--------------------------------------------------------------------------------
  719. // Physical Interface Device Page featureReport 02 (Device <-> Host)
  720. //--------------------------------------------------------------------------------
  721.  
  722. typedef struct
  723. {
  724.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  725.                                                      // Collection: PIDBlockLoadReport
  726.   uint8_t  PID_PIDBlockLoadReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  727.                                                      // Collection: PIDBlockLoadReport BlockLoadStatus
  728.   uint8_t  PID_PIDBlockLoadReportBlockLoadStatus;    // Value = 1 to 3, Physical = ((Value - 1) + 1)
  729.                                                      // Value 1 = Usage 0x000F008C: Block Load Success
  730.                                                      // Value 2 = Usage 0x000F008D: Block Load Full
  731.                                                      // Value 3 = Usage 0x000F008E: Block Load Error
  732.                                                      // Collection: PIDBlockLoadReport
  733.   uint16_t PID_PIDBlockLoadReport;                   // Value = 0 to 65535, Physical = Value
  734.                                                      // Value     0 = Usage 0x000F00AC: RAM Pool Available
  735. } featureReport02_t;
  736.  
  737.  
  738. //--------------------------------------------------------------------------------
  739. // Physical Interface Device Page featureReport 03 (Device <-> Host)
  740. //--------------------------------------------------------------------------------
  741.  
  742. typedef struct
  743. {
  744.   uint8_t  reportId;                                 // Report ID = 0x03 (3)
  745.                                                      // Collection: PIDPoolReport
  746.   uint16_t PID_PIDPoolReportRamPoolSize;             // Usage 0x000F0080: RAM Pool Size, Value = 0 to 65535, Physical = Value
  747.   uint8_t  PID_PIDPoolReportSimultaneousEffectsMax;  // Usage 0x000F0083: Simultaneous Effects Max, Value = 0 to 255, Physical = Value
  748.   uint8_t  PID_PIDPoolReportDeviceManagedPool : 1;   // Usage 0x000F00A9: Device Managed Pool, Value = 0 to 1, Physical = Value
  749.   uint8_t  PID_PIDPoolReportSharedParameterBlocks : 1; // Usage 0x000F00AA: Shared Parameter Blocks, Value = 0 to 1, Physical = Value
  750.   uint8_t  : 6;                                      // Pad
  751. } featureReport03_t;
  752.  
  753.  
  754. //--------------------------------------------------------------------------------
  755. // Button Page inputReport 01 (Device --> Host)
  756. //--------------------------------------------------------------------------------
  757.  
  758. typedef struct
  759. {
  760.   uint8_t  reportId;                                 // Report ID = 0x01 (1)
  761.                                                      // Collection: GamePad
  762.   uint8_t  BTN_GamePadButton1 : 1;                   // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1
  763.   uint8_t  BTN_GamePadButton2 : 1;                   // Usage 0x00090002: Button 2 Secondary, Value = 0 to 1
  764.   uint8_t  BTN_GamePadButton3 : 1;                   // Usage 0x00090003: Button 3 Tertiary, Value = 0 to 1
  765.   uint8_t  BTN_GamePadButton4 : 1;                   // Usage 0x00090004: Button 4, Value = 0 to 1
  766.   uint8_t  BTN_GamePadButton5 : 1;                   // Usage 0x00090005: Button 5, Value = 0 to 1
  767.   uint8_t  BTN_GamePadButton6 : 1;                   // Usage 0x00090006: Button 6, Value = 0 to 1
  768.   uint8_t  BTN_GamePadButton7 : 1;                   // Usage 0x00090007: Button 7, Value = 0 to 1
  769.   uint8_t  BTN_GamePadButton8 : 1;                   // Usage 0x00090008: Button 8, Value = 0 to 1
  770.   uint8_t  BTN_GamePadButton9 : 1;                   // Usage 0x00090009: Button 9, Value = 0 to 1
  771.   uint8_t  BTN_GamePadButton10 : 1;                  // Usage 0x0009000A: Button 10, Value = 0 to 1
  772.   uint8_t  BTN_GamePadButton11 : 1;                  // Usage 0x0009000B: Button 11, Value = 0 to 1
  773.   uint8_t  BTN_GamePadButton12 : 1;                  // Usage 0x0009000C: Button 12, Value = 0 to 1
  774.   uint8_t  BTN_GamePadButton13 : 1;                  // Usage 0x0009000D: Button 13, Value = 0 to 1
  775.   uint8_t  BTN_GamePadButton14 : 1;                  // Usage 0x0009000E: Button 14, Value = 0 to 1
  776.   uint8_t  BTN_GamePadButton15 : 1;                  // Usage 0x0009000F: Button 15, Value = 0 to 1
  777.   uint8_t  BTN_GamePadButton16 : 1;                  // Usage 0x00090010: Button 16, Value = 0 to 1
  778.   uint8_t  BTN_GamePadButton17 : 1;                  // Usage 0x00090011: Button 17, Value = 0 to 1
  779.   uint8_t  BTN_GamePadButton18 : 1;                  // Usage 0x00090012: Button 18, Value = 0 to 1
  780.   uint8_t  BTN_GamePadButton19 : 1;                  // Usage 0x00090013: Button 19, Value = 0 to 1
  781.   uint8_t  BTN_GamePadButton20 : 1;                  // Usage 0x00090014: Button 20, Value = 0 to 1
  782.   uint8_t  BTN_GamePadButton21 : 1;                  // Usage 0x00090015: Button 21, Value = 0 to 1
  783.   uint8_t  BTN_GamePadButton22 : 1;                  // Usage 0x00090016: Button 22, Value = 0 to 1
  784.   uint8_t  BTN_GamePadButton23 : 1;                  // Usage 0x00090017: Button 23, Value = 0 to 1
  785.   uint8_t  BTN_GamePadButton24 : 1;                  // Usage 0x00090018: Button 24, Value = 0 to 1
  786.   uint8_t  GD_GamePadX;                              // Usage 0x00010030: X, Value = 0 to 255, Physical = Value
  787.   uint8_t  GD_GamePadY;                              // Usage 0x00010031: Y, Value = 0 to 255, Physical = Value
  788.   uint8_t  GD_GamePadZ;                              // Usage 0x00010032: Z, Value = 0 to 255, Physical = Value
  789.   uint8_t  GD_GamePadRx;                             // Usage 0x00010033: Rx, Value = 0 to 255, Physical = Value
  790.   uint8_t  GD_GamePadRy;                             // Usage 0x00010034: Ry, Value = 0 to 255, Physical = Value
  791.   uint8_t  GD_GamePadRz;                             // Usage 0x00010035: Rz, Value = 0 to 255, Physical = Value
  792.   uint8_t  GD_GamePadSlider;                         // Usage 0x00010036: Slider, Value = 0 to 255, Physical = Value
  793.   uint8_t  GD_GamePadDial;                           // Usage 0x00010037: Dial, Value = 0 to 255, Physical = Value
  794.                                                      // Collection:
  795.   uint8_t  GD_VendorDefinedHatSwitch : 4;            // Usage 0x00010039: Hat switch, Value = 0 to 7, Physical = Value x 45 in degrees
  796.   uint8_t  : 4;                                      // Pad
  797.   uint8_t  VEN_VendorDefined0020;                    // Usage 0xFF000020: , Value = 0 to 7, Physical = Value x 45
  798.   uint8_t  VEN_VendorDefined0021;                    // Usage 0xFF000021: , Value = 0 to 7, Physical = Value x 45
  799.   uint8_t  VEN_VendorDefined0049 : 1;                // Usage 0xFF010049: , Value = 0 to 7, Physical = Value x 45
  800.   uint8_t  : 7;                                      // Pad
  801. } inputReport01_t;
  802.  
  803.  
  804. //--------------------------------------------------------------------------------
  805. // Physical Interface Device Page inputReport 02 (Device --> Host)
  806. //--------------------------------------------------------------------------------
  807.  
  808. typedef struct
  809. {
  810.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  811.                                                      // Collection: PIDStateReport
  812.   uint8_t  PID_PIDStateReportDevicePaused : 1;       // Usage 0x000F009F: Device Paused, Value = 0 to 1, Physical = Value
  813.   uint8_t  PID_PIDStateReportActuatorsEnabled : 1;   // Usage 0x000F00A0: Actuators Enabled, Value = 0 to 1, Physical = Value
  814.   uint8_t  PID_PIDStateReportSafetySwitch : 1;       // Usage 0x000F00A4: Safety Switch, Value = 0 to 1, Physical = Value
  815.   uint8_t  PID_PIDStateReportActuatorOverrideSwitch : 1; // Usage 0x000F00A5: Actuator Override Switch, Value = 0 to 1, Physical = Value
  816.   uint8_t  PID_PIDStateReportActuatorPower : 1;      // Usage 0x000F00A6: Actuator Power, Value = 0 to 1, Physical = Value
  817.   uint8_t  : 1;                                      // Pad
  818.   uint8_t  : 1;                                      // Pad
  819.   uint8_t  : 1;                                      // Pad
  820.   uint8_t  PID_PIDStateReportEffectPlaying : 1;      // Usage 0x000F0094: Effect Playing, Value = 0 to 1, Physical = Value
  821.   uint8_t  PID_PIDStateReportEffectBlockIndex : 7;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  822. } inputReport02_t;
  823.  
  824.  
  825. //--------------------------------------------------------------------------------
  826. // Physical Interface Device Page outputReport 01 (Device <-- Host)
  827. //--------------------------------------------------------------------------------
  828.  
  829. typedef struct
  830. {
  831.   uint8_t  reportId;                                 // Report ID = 0x01 (1)
  832.                                                      // Collection: SetEffectReport
  833.   uint8_t  PID_SetEffectReportEffectBlockIndex;      // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  834.                                                      // Collection: SetEffectReport EffectType
  835.   uint8_t  PID_SetEffectReportEffectType;            // Value = 1 to 3, Physical = ((Value - 1) + 1)
  836.                                                      // Value 1 = Usage 0x000F0026: ET Constant Force
  837.                                                      // Value 2 = Usage 0x000F0027: ET Ramp
  838.                                                      // Value 3 = Usage 0x000F0030: ET Square
  839.                                                      // Value 4 = Usage 0x000F0031: ET Sine <-- Error: Value (4) exceeds LOGICAL_MAXIMUM
  840.                                                      // Value 5 = Usage 0x000F0032: ET Triangle <-- Error: Value (5) exceeds LOGICAL_MAXIMUM
  841.                                                      // Value 6 = Usage 0x000F0033: ET Sawtooth Up <-- Error: Value (6) exceeds LOGICAL_MAXIMUM
  842.                                                      // Value 7 = Usage 0x000F0034: ET Sawtooth Down <-- Error: Value (7) exceeds LOGICAL_MAXIMUM
  843.                                                      // Value 8 = Usage 0x000F0040: ET Spring <-- Error: Value (8) exceeds LOGICAL_MAXIMUM
  844.                                                      // Value 9 = Usage 0x000F0041: ET Damper <-- Error: Value (9) exceeds LOGICAL_MAXIMUM
  845.                                                      // Value 10 = Usage 0x000F0042: ET Inertia <-- Error: Value (10) exceeds LOGICAL_MAXIMUM
  846.                                                      // Value 11 = Usage 0x000F0043: ET Friction <-- Error: Value (11) exceeds LOGICAL_MAXIMUM
  847.                                                      // Value 12 = Usage 0x000F0028: ET Custom Force Data <-- Error: Value (12) exceeds LOGICAL_MAXIMUM
  848.                                                      // Collection: SetEffectReport
  849.   uint16_t PID_SetEffectReportDuration;              // Usage 0x000F0050: Duration, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  850.   uint16_t PID_SetEffectReportTriggerRepeatInterval; // Usage 0x000F0054: Trigger Repeat Interval, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  851.   uint16_t PID_SetEffectReportSamplePeriod;          // Usage 0x000F0051: Sample Period, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  852.   uint8_t  PID_SetEffectReportGain;                  // Usage 0x000F0052: Gain, Value = 0 to 255, Physical = Value x 2000 / 51
  853.   uint8_t  PID_SetEffectReportTriggerButton;         // Usage 0x000F0053: Trigger Button, Value = 1 to 8, Physical = ((Value - 1) + 1)
  854.                                                      // Collection: SetEffectReport AxesEnable
  855.   uint8_t  GD_SetEffectReportAxesEnableX : 1;        // Usage 0x00010030: X, Value = 0 to 1, Physical = (Value x 7 + 1)
  856.   uint8_t  GD_SetEffectReportAxesEnableY : 1;        // Usage 0x00010031: Y, Value = 0 to 1, Physical = (Value x 7 + 1)
  857.                                                      // Collection: SetEffectReport
  858.   uint8_t  PID_SetEffectReportDirectionEnable : 1;   // Usage 0x000F0056: Direction Enable, Value = 0 to 1, Physical = (Value x 7 + 1)
  859.   uint8_t  : 1;                                      // Pad
  860.   uint8_t  : 1;                                      // Pad
  861.   uint8_t  : 1;                                      // Pad
  862.   uint8_t  : 1;                                      // Pad
  863.   uint8_t  : 1;                                      // Pad
  864.                                                      // Collection: SetEffectReport Direction
  865.   uint8_t  ORD_SetEffectReportDirectionInstance1;    // Usage 0x000A0001: Instance 1, Value = 0 to 255, Physical = Value x 2400 / 17
  866.   uint8_t  ORD_SetEffectReportDirectionInstance2;    // Usage 0x000A0002: Instance 2, Value = 0 to 255, Physical = Value x 2400 / 17
  867.                                                      // Collection: SetEffectReport
  868.   uint16_t PID_SetEffectReportStartDelay;            // Usage 0x000F00A7: Start Delay, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  869. } outputReport01_t;
  870.  
  871.  
  872. //--------------------------------------------------------------------------------
  873. // Physical Interface Device Page outputReport 02 (Device <-- Host)
  874. //--------------------------------------------------------------------------------
  875.  
  876. typedef struct
  877. {
  878.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  879.                                                      // Collection: SetEnvelopeReport
  880.   uint8_t  PID_SetEnvelopeReportEffectBlockIndex;    // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  881.   uint8_t  PID_SetEnvelopeReportAttackLevel;         // Usage 0x000F005B: Attack Level, Value = 0 to 255, Physical = Value x 2000 / 51
  882.   uint8_t  PID_SetEnvelopeReportFadeLevel;           // Usage 0x000F005D: Fade Level, Value = 0 to 255, Physical = Value x 2000 / 51
  883.   uint16_t PID_SetEnvelopeReportAttackTime;          // Usage 0x000F005C: Attack Time, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  884.   uint16_t PID_SetEnvelopeReportFadeTime;            // Usage 0x000F005E: Fade Time, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  885. } outputReport02_t;
  886.  
  887.  
  888. //--------------------------------------------------------------------------------
  889. // Physical Interface Device Page outputReport 03 (Device <-- Host)
  890. //--------------------------------------------------------------------------------
  891.  
  892. typedef struct
  893. {
  894.   uint8_t  reportId;                                 // Report ID = 0x03 (3)
  895.                                                      // Collection: SetConditionReport
  896.   uint8_t  PID_SetConditionReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  897.   uint8_t  PID_SetConditionReportParameterBlockOffset : 4; // Usage 0x000F0023: Parameter Block Offset, Value = 0 to 1, Physical = Value
  898.                                                      // Collection: SetConditionReport TypeSpecificBlockOffset
  899.   uint8_t  ORD_SetConditionReportTypeSpecificBlockOffsetInstance1 : 2; // Usage 0x000A0001: Instance 1, Value = 0 to 1, Physical = Value
  900.   uint8_t  ORD_SetConditionReportTypeSpecificBlockOffsetInstance2 : 2; // Usage 0x000A0002: Instance 2, Value = 0 to 1, Physical = Value
  901.                                                      // Collection: SetConditionReport
  902.   int8_t   PID_SetConditionReportCpOffset;           // Usage 0x000F0060: CP Offset, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  903.   int8_t   PID_SetConditionReportPositiveCoefficient; // Usage 0x000F0061: Positive Coefficient, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  904.   int8_t   PID_SetConditionReportNegativeCoefficient; // Usage 0x000F0062: Negative Coefficient, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  905.   uint8_t  PID_SetConditionReportPositiveSaturation; // Usage 0x000F0063: Positive Saturation, Value = 0 to 255, Physical = Value x 2000 / 51
  906.   uint8_t  PID_SetConditionReportNegativeSaturation; // Usage 0x000F0064: Negative Saturation, Value = 0 to 255, Physical = Value x 2000 / 51
  907.   uint8_t  PID_SetConditionReportDeadBand;           // Usage 0x000F0065: Dead Band, Value = 0 to 255, Physical = Value x 2000 / 51
  908. } outputReport03_t;
  909.  
  910.  
  911. //--------------------------------------------------------------------------------
  912. // Physical Interface Device Page outputReport 04 (Device <-- Host)
  913. //--------------------------------------------------------------------------------
  914.  
  915. typedef struct
  916. {
  917.   uint8_t  reportId;                                 // Report ID = 0x04 (4)
  918.                                                      // Collection: SetPeriodicReport
  919.   uint8_t  PID_SetPeriodicReportEffectBlockIndex;    // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  920.   uint8_t  PID_SetPeriodicReportMagnitude;           // Usage 0x000F0070: Magnitude, Value = 0 to 255, Physical = Value x 2000 / 51
  921.   int8_t   PID_SetPeriodicReportOffset;              // Usage 0x000F006F: Offset, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  922.   uint8_t  PID_SetPeriodicReportPhase;               // Usage 0x000F0071: Phase, Value = 0 to 255, Physical = Value x 2400 / 17 in 10⁻² degrees units
  923.   uint16_t PID_SetPeriodicReportPeriod;              // Usage 0x000F0072: Period, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  924. } outputReport04_t;
  925.  
  926.  
  927. //--------------------------------------------------------------------------------
  928. // Physical Interface Device Page outputReport 05 (Device <-- Host)
  929. //--------------------------------------------------------------------------------
  930.  
  931. typedef struct
  932. {
  933.   uint8_t  reportId;                                 // Report ID = 0x05 (5)
  934.                                                      // Collection: SetConstantForceReport
  935.   uint8_t  PID_SetConstantForceReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  936.   int16_t  PID_SetConstantForceReportMagnitude;      // Usage 0x000F0070: Magnitude, Value = -255 to 255, Physical = ((Value + 255) x 2000 / 51 - 10000)
  937. } outputReport05_t;
  938.  
  939.  
  940. //--------------------------------------------------------------------------------
  941. // Physical Interface Device Page outputReport 06 (Device <-- Host)
  942. //--------------------------------------------------------------------------------
  943.  
  944. typedef struct
  945. {
  946.   uint8_t  reportId;                                 // Report ID = 0x06 (6)
  947.                                                      // Collection: SetRampForceReport
  948.   uint8_t  PID_SetRampForceReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  949.   int8_t   PID_SetRampForceReportRampStart;          // Usage 0x000F0075: Ramp Start, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  950.   int8_t   PID_SetRampForceReportRampEnd;            // Usage 0x000F0076: Ramp End, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  951. } outputReport06_t;
  952.  
  953.  
  954. //--------------------------------------------------------------------------------
  955. // Physical Interface Device Page outputReport 07 (Device <-- Host)
  956. //--------------------------------------------------------------------------------
  957.  
  958. typedef struct
  959. {
  960.   uint8_t  reportId;                                 // Report ID = 0x07 (7)
  961.                                                      // Collection: CustomForceDataReport
  962.   uint8_t  PID_CustomForceDataReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  963.   uint16_t PID_CustomForceDataReportCustomForceDataOffset; // Usage 0x000F006C: Custom Force Data Offset, Value = 0 to 10000, Physical = Value
  964.   int8_t   PID_CustomForceDataReportCustomForceData[12]; // Usage 0x000F0069: Custom Force Data, Value = -127 to 127, Physical = (Value + 127) x 255 / 254
  965. } outputReport07_t;
  966.  
  967.  
  968. //--------------------------------------------------------------------------------
  969. // Generic Desktop Page outputReport 08 (Device <-- Host)
  970. //--------------------------------------------------------------------------------
  971.  
  972. typedef struct
  973. {
  974.   uint8_t  reportId;                                 // Report ID = 0x08 (8)
  975.                                                      // Collection: DownloadForceSample
  976.   int8_t   GD_DownloadForceSampleX;                  // Usage 0x00010030: X, Value = -127 to 127, Physical = (Value + 127) x 255 / 254
  977.   int8_t   GD_DownloadForceSampleY;                  // Usage 0x00010031: Y, Value = -127 to 127, Physical = (Value + 127) x 255 / 254
  978. } outputReport08_t;
  979.  
  980.  
  981. //--------------------------------------------------------------------------------
  982. // Physical Interface Device Page outputReport 0A (Device <-- Host)
  983. //--------------------------------------------------------------------------------
  984.  
  985. typedef struct
  986. {
  987.   uint8_t  reportId;                                 // Report ID = 0x0A (10)
  988.                                                      // Collection: EffectOperationReport
  989.   uint8_t  PID_EffectOperationReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  990.                                                      // Collection: EffectOperationReport EffectOperation
  991.   uint8_t  PID_EffectOperationReportEffectOperation; // Value = 1 to 3, Physical = ((Value - 1) x 39 / 2 + 1)
  992.                                                      // Value 1 = Usage 0x000F0079: Op Effect Start
  993.                                                      // Value 2 = Usage 0x000F007A: Op Effect Start Solo
  994.                                                      // Value 3 = Usage 0x000F007B: Op Effect Stop
  995.                                                      // Collection: EffectOperationReport
  996.   uint8_t  PID_EffectOperationReportLoopCount;       // Usage 0x000F007C: Loop Count, Value = 0 to 255, Physical = Value
  997. } outputReport0A_t;
  998.  
  999.  
  1000. //--------------------------------------------------------------------------------
  1001. // Physical Interface Device Page outputReport 0B (Device <-- Host)
  1002. //--------------------------------------------------------------------------------
  1003.  
  1004. typedef struct
  1005. {
  1006.   uint8_t  reportId;                                 // Report ID = 0x0B (11)
  1007.                                                      // Collection: PIDBlockFreeReport
  1008.   uint8_t  PID_PIDBlockFreeReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  1009. } outputReport0B_t;
  1010.  
  1011.  
  1012. //--------------------------------------------------------------------------------
  1013. // Physical Interface Device Page outputReport 0C (Device <-- Host)
  1014. //--------------------------------------------------------------------------------
  1015.  
  1016. typedef struct
  1017. {
  1018.   uint8_t  reportId;                                 // Report ID = 0x0C (12)
  1019.                                                      // Collection: PIDDeviceControl
  1020.   uint8_t  PID_PIDDeviceControl;                     // Value = 1 to 6, Physical = ((Value - 1) x 39 / 5 + 1)
  1021.                                                      // Value 1 = Usage 0x000F0097: DC Enable Actuators
  1022.                                                      // Value 2 = Usage 0x000F0098: DC Disable Actuators
  1023.                                                      // Value 3 = Usage 0x000F0099: DC Stop All Effects
  1024.                                                      // Value 4 = Usage 0x000F009A: DC Device Reset
  1025.                                                      // Value 5 = Usage 0x000F009B: DC Device Pause
  1026.                                                      // Value 6 = Usage 0x000F009C: DC Device Continue
  1027. } outputReport0C_t;
  1028.  
  1029.  
  1030. //--------------------------------------------------------------------------------
  1031. // Physical Interface Device Page outputReport 0D (Device <-- Host)
  1032. //--------------------------------------------------------------------------------
  1033.  
  1034. typedef struct
  1035. {
  1036.   uint8_t  reportId;                                 // Report ID = 0x0D (13)
  1037.                                                      // Collection: DeviceGainReport
  1038.   uint8_t  PID_DeviceGainReportDeviceGain;           // Usage 0x000F007E: Device Gain, Value = 0 to 255, Physical = Value x 2000 / 51
  1039. } outputReport0D_t;
  1040.  
  1041.  
  1042. //--------------------------------------------------------------------------------
  1043. // Physical Interface Device Page outputReport 0E (Device <-- Host)
  1044. //--------------------------------------------------------------------------------
  1045.  
  1046. typedef struct
  1047. {
  1048.   uint8_t  reportId;                                 // Report ID = 0x0E (14)
  1049.                                                      // Collection: SetCustomForceReport
  1050.   uint8_t  PID_SetCustomForceReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  1051.   uint8_t  PID_SetCustomForceReportSampleCount;      // Usage 0x000F006D: Sample Count, Value = 0 to 255, Physical = Value
  1052.   uint16_t PID_SetCustomForceReportSamplePeriod;     // Usage 0x000F0051: Sample Period, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  1053. } outputReport0E_t;
  1054.  
  1055.  
  1056. //--------------------------------------------------------------------------------
  1057. // Decoded Application Collection
  1058. //--------------------------------------------------------------------------------
  1059.  
  1060. /*
  1061. 06 00FF      (GLOBAL) USAGE_PAGE         0xFF00 Vendor-defined
  1062. 09 01        (LOCAL)  USAGE              0xFF000001 <-- Warning: Undocumented usage
  1063. A1 01        (MAIN)   COLLECTION         0x00000001 Application (Usage=0xFF000001: Page=Vendor-defined, Usage=, Type=)
  1064. 15 00          (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  1065. 26 FF00        (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  1066. 75 08          (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  1067. 85 11          (GLOBAL) REPORT_ID          0x11 (17)
  1068. 95 20          (GLOBAL) REPORT_COUNT       0x20 (32) Number of fields  
  1069. 09 00          (LOCAL)  USAGE              0xFF000000 <-- Warning: Undocumented usage
  1070. B2 0201        (MAIN)   FEATURE            0x00000102 (32 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  1071. 85 12          (GLOBAL) REPORT_ID          0x12 (18)
  1072. 95 44          (GLOBAL) REPORT_COUNT       0x44 (68) Number of fields  
  1073. 09 00          (LOCAL)  USAGE              0xFF000000 <-- Warning: Undocumented usage
  1074. B2 0201        (MAIN)   FEATURE            0x00000102 (68 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  1075. 85 13          (GLOBAL) REPORT_ID          0x13 (19)
  1076. 95 C0          (GLOBAL) REPORT_COUNT       0xC0 (-64) Number of fields   <-- Error: REPORT_COUNT must be > 0
  1077. 09 00          (LOCAL)  USAGE              0xFF000000 <-- Warning: Undocumented usage
  1078. B2 0201        (MAIN)   FEATURE            0x00000102 (-64 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  1079. 85 14          (GLOBAL) REPORT_ID          0x14 (20)
  1080. 95 C4          (GLOBAL) REPORT_COUNT       0xC4 (-60) Number of fields   <-- Error: REPORT_COUNT must be > 0
  1081. 09 00          (LOCAL)  USAGE              0xFF000000 <-- Warning: Undocumented usage
  1082. B2 0201        (MAIN)   FEATURE            0x00000102 (-60 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  1083. C0           (MAIN)   END_COLLECTION     Application  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  1084. */
  1085.  
  1086. //--------------------------------------------------------------------------------
  1087. // Vendor-defined featureReport 11 (Device <-> Host)
  1088. //--------------------------------------------------------------------------------
  1089.  
  1090. typedef struct
  1091. {
  1092.   uint8_t  reportId;                                 // Report ID = 0x11 (17)
  1093.   uint8_t  VEN_VendorDefined0000[32];                // Usage 0xFF000000: , Value = 0 to 255, Physical = Value / 255
  1094. } featureReport11_t;
  1095.  
  1096.  
  1097. //--------------------------------------------------------------------------------
  1098. // Vendor-defined featureReport 12 (Device <-> Host)
  1099. //--------------------------------------------------------------------------------
  1100.  
  1101. typedef struct
  1102. {
  1103.   uint8_t  reportId;                                 // Report ID = 0x12 (18)
  1104.   uint8_t  VEN_VendorDefined0000[68];                // Usage 0xFF000000: , Value = 0 to 255, Physical = Value / 255
  1105. } featureReport12_t;
  1106.  
  1107.  
  1108. //--------------------------------------------------------------------------------
  1109. // Vendor-defined featureReport 13 (Device <-> Host)
  1110. //--------------------------------------------------------------------------------
  1111.  
  1112. typedef struct
  1113. {
  1114.   uint8_t  reportId;                                 // Report ID = 0x13 (19)
  1115.                                                      // Usage 0xFF000000  Value = 0 to 255 <-- Ignored: REPORT_COUNT (-64) is too small
  1116. } featureReport13_t;
  1117.  
  1118.  
  1119. //--------------------------------------------------------------------------------
  1120. // Vendor-defined featureReport 14 (Device <-> Host)
  1121. //--------------------------------------------------------------------------------
  1122.  
  1123. typedef struct
  1124. {
  1125.   uint8_t  reportId;                                 // Report ID = 0x14 (20)
  1126.                                                      // Usage 0xFF000000  Value = 0 to 255 <-- Ignored: REPORT_COUNT (-60) is too small
  1127. } featureReport14_t;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement