Advertisement
lastofthemartians

gamepad-ulao.rd

Mar 31st, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 74.19 KB | None | 0 0
  1.  
  2. //--------------------------------------------------------------------------------
  3. // Decoded Application Collection
  4. //--------------------------------------------------------------------------------
  5.  
  6. /*
  7. 05 01        (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  8. 09 05        (LOCAL)  USAGE              0x00010005 Game Pad (CA=Application Collection)
  9. A1 01        (MAIN)   COLLECTION         0x00000001 Application (Usage=0x00010005: Page=Generic Desktop Page, Usage=Game Pad, Type=CA)
  10. 85 01          (GLOBAL) REPORT_ID          0x01 (1)
  11. 05 09          (GLOBAL) USAGE_PAGE         0x0009 Button Page
  12. 19 01          (LOCAL)  USAGE_MINIMUM      0x00090001 Button 1 Primary/trigger (MULTI=Selector, On/Off, Momentary, or One Shot)
  13. 29 18          (LOCAL)  USAGE_MAXIMUM      0x00090018 Button 24 (MULTI=Selector, On/Off, Momentary, or One Shot)
  14. 15 00          (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  15. 25 01          (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  16. 75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  17. 95 18          (GLOBAL) REPORT_COUNT       0x18 (24) Number of fields  
  18. 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
  19. A1 00          (MAIN)   COLLECTION         0x00000000 Physical (Usage=0x0: Page=, Usage=, Type=) <-- Warning: USAGE type should be CP (Physical)
  20. 05 01            (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  21. 09 30            (LOCAL)  USAGE              0x00010030 X (DV=Dynamic Value)
  22. 09 31            (LOCAL)  USAGE              0x00010031 Y (DV=Dynamic Value)
  23. 09 32            (LOCAL)  USAGE              0x00010032 Z (DV=Dynamic Value)
  24. 09 33            (LOCAL)  USAGE              0x00010033 Rx (DV=Dynamic Value)
  25. 09 34            (LOCAL)  USAGE              0x00010034 Ry (DV=Dynamic Value)
  26. 09 35            (LOCAL)  USAGE              0x00010035 Rz (DV=Dynamic Value)
  27. 09 36            (LOCAL)  USAGE              0x00010036 Slider (DV=Dynamic Value)
  28. 09 37            (LOCAL)  USAGE              0x00010037 Dial (DV=Dynamic Value)
  29. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  30. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  31. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  32. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  33. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  34. 95 08            (GLOBAL) REPORT_COUNT       0x08 (8) Number of fields  
  35. 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
  36. C0             (MAIN)   END_COLLECTION     Physical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x,EXP=0)
  37. 05 01          (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page <-- Redundant: USAGE_PAGE is already 0x0001
  38. 25 07          (GLOBAL) LOGICAL_MAXIMUM    0x07 (7)  
  39. 46 3B01        (GLOBAL) PHYSICAL_MAXIMUM   0x013B (315)  
  40. 75 04          (GLOBAL) REPORT_SIZE        0x04 (4) Number of bits per field  
  41. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  42. 65 14          (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  43. 09 39          (LOCAL)  USAGE              0x00010039 Hat switch (DV=Dynamic Value)
  44. 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
  45. 65 00          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  46. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  47. 81 01          (MAIN)   INPUT              0x00000001 (1 field x 4 bits) 1=Constant 0=Array 0=Absolute
  48. 06 01FF        (GLOBAL) USAGE_PAGE         0xFF01 Vendor-defined
  49. 09 49          (LOCAL)  USAGE              0xFF010049 <-- Warning: Undocumented usage
  50. 75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  51. 95 01          (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  52. 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.
  53. 75 07          (GLOBAL) REPORT_SIZE        0x07 (7) Number of bits per field  
  54. 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
  55. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  56. 09 92          (LOCAL)  USAGE              0x000F0092 PID State Report (CL=Logical Collection)
  57. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0092: Page=Physical Interface Device Page, Usage=PID State Report, Type=CL)
  58. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  59. 09 9F            (LOCAL)  USAGE              0x000F009F Device Paused (DF=Dynamic Flag)
  60. 09 A0            (LOCAL)  USAGE              0x000F00A0 Actuators Enabled (DF=Dynamic Flag)
  61. 09 A4            (LOCAL)  USAGE              0x000F00A4 Safety Switch (DF=Dynamic Flag)
  62. 09 A5            (LOCAL)  USAGE              0x000F00A5 Actuator Override Switch (DF=Dynamic Flag)
  63. 09 A6            (LOCAL)  USAGE              0x000F00A6 Actuator Power (DF=Dynamic Flag)
  64. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  65. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  66. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  67. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1)  
  68. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  69. 95 05            (GLOBAL) REPORT_COUNT       0x05 (5) Number of fields  
  70. 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
  71. 95 03            (GLOBAL) REPORT_COUNT       0x03 (3) Number of fields  
  72. 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
  73. 09 94            (LOCAL)  USAGE              0x000F0094 Effect Playing (DF=Dynamic Flag)
  74. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  75. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1) <-- Redundant: LOGICAL_MAXIMUM is already 1
  76. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  77. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1) <-- Redundant: PHYSICAL_MAXIMUM is already 1
  78. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field <-- Redundant: REPORT_SIZE is already 1
  79. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  80. 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
  81. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  82. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  83. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  84. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  85. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  86. 75 07            (GLOBAL) REPORT_SIZE        0x07 (7) Number of bits per field  
  87. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  88. 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
  89. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  90. 09 21          (LOCAL)  USAGE              0x000F0021 Set Effect Report (CL=Logical Collection)
  91. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0021: Page=Physical Interface Device Page, Usage=Set Effect Report, Type=CL)
  92. 85 01            (GLOBAL) REPORT_ID          0x01 (1)
  93. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  94. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  95. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40) <-- Redundant: LOGICAL_MAXIMUM is already 40
  96. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  97. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40) <-- Redundant: PHYSICAL_MAXIMUM is already 40
  98. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  99. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  100. 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
  101. 09 25            (LOCAL)  USAGE              0x000F0025 Effect Type (NAry=Named Array)
  102. 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)
  103. 09 26              (LOCAL)  USAGE              0x000F0026 ET Constant Force (Sel=Selector)
  104. 09 27              (LOCAL)  USAGE              0x000F0027 ET Ramp (Sel=Selector)
  105. 09 30              (LOCAL)  USAGE              0x000F0030 ET Square (Sel=Selector)
  106. 09 31              (LOCAL)  USAGE              0x000F0031 ET Sine (Sel=Selector)
  107. 09 32              (LOCAL)  USAGE              0x000F0032 ET Triangle (Sel=Selector)
  108. 09 33              (LOCAL)  USAGE              0x000F0033 ET Sawtooth Up (Sel=Selector)
  109. 09 34              (LOCAL)  USAGE              0x000F0034 ET Sawtooth Down (Sel=Selector)
  110. 09 40              (LOCAL)  USAGE              0x000F0040 ET Spring (Sel=Selector)
  111. 09 41              (LOCAL)  USAGE              0x000F0041 ET Damper (Sel=Selector)
  112. 09 42              (LOCAL)  USAGE              0x000F0042 ET Inertia (Sel=Selector)
  113. 09 43              (LOCAL)  USAGE              0x000F0043 ET Friction (Sel=Selector)
  114. 09 28              (LOCAL)  USAGE              0x000F0028 ET Custom Force Data (Sel=Selector)
  115. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  116. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  117. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  118. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  119. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  120. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  121. 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
  122. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  123. 09 50            (LOCAL)  USAGE              0x000F0050 Duration (DV=Dynamic Value)
  124. 09 54            (LOCAL)  USAGE              0x000F0054 Trigger Repeat Interval (DV=Dynamic Value)
  125. 09 51            (LOCAL)  USAGE              0x000F0051 Sample Period (DV=Dynamic Value)
  126. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  127. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  128. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  129. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  130. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  131. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  132. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  133. 95 03            (GLOBAL) REPORT_COUNT       0x03 (3) Number of fields  
  134. 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
  135. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  136. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  137. 09 52            (LOCAL)  USAGE              0x000F0052 Gain (DV=Dynamic Value)
  138. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  139. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  140. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  141. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  142. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  143. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  144. 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
  145. 09 53            (LOCAL)  USAGE              0x000F0053 Trigger Button (DV=Dynamic Value)
  146. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  147. 25 08            (GLOBAL) LOGICAL_MAXIMUM    0x08 (8)  
  148. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  149. 45 08            (GLOBAL) PHYSICAL_MAXIMUM   0x08 (8)  
  150. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  151. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  152. 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
  153. 09 55            (LOCAL)  USAGE              0x000F0055 Axes Enable (US=Usage Switch)
  154. 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)
  155. 05 01              (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  156. 09 30              (LOCAL)  USAGE              0x00010030 X (DV=Dynamic Value)
  157. 09 31              (LOCAL)  USAGE              0x00010031 Y (DV=Dynamic Value)
  158. 15 00              (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  159. 25 01              (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  160. 75 01              (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  161. 95 02              (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  162. 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
  163. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=8) UNIT(0x00000000,EXP=0)
  164. 05 0F            (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  165. 09 56            (LOCAL)  USAGE              0x000F0056 Direction Enable (DF=Dynamic Flag)
  166. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  167. 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
  168. 95 05            (GLOBAL) REPORT_COUNT       0x05 (5) Number of fields  
  169. 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
  170. 09 57            (LOCAL)  USAGE              0x000F0057 Direction (CL=Logical Collection)
  171. A1 02            (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0057: Page=Physical Interface Device Page, Usage=Direction, Type=CL)
  172. 0B 01000A00        (LOCAL)  USAGE              0x000A0001 Ordinal Page: Instance 1 (UM=Usage Modifier)
  173. 0B 02000A00        (LOCAL)  USAGE              0x000A0002 Ordinal Page: Instance 2 (UM=Usage Modifier)
  174. 66 1400            (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  175. 55 FE              (GLOBAL) UNIT_EXPONENT      0xFE (Unit Value x 10⁻²)
  176. 15 00              (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  177. 26 FF00            (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  178. 35 00              (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  179. 47 A08C0000        (GLOBAL) PHYSICAL_MAXIMUM   0x00008CA0 (36000)  
  180. 66 0000            (GLOBAL) UNIT               0x00000000 No unit (0=None)
  181. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  182. 95 02              (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  183. 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
  184. 55 00              (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  185. 66 0000            (GLOBAL) UNIT               0x00000000 No unit (0=None) <-- Redundant: UNIT is already 0x00000000
  186. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=36000) UNIT(0x00000000,EXP=0)
  187. 05 0F            (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page <-- Redundant: USAGE_PAGE is already 0x000F
  188. 09 A7            (LOCAL)  USAGE              0x000F00A7 Start Delay (DV=Dynamic Value)
  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. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  192. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  193. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  194. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  195. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  196. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  197. 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
  198. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  199. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  200. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=32767) UNIT(0x00000000,EXP=0)
  201. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page <-- Redundant: USAGE_PAGE is already 0x000F
  202. 09 5A          (LOCAL)  USAGE              0x000F005A Set Envelope Report (CL=Logical Collection)
  203. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F005A: Page=Physical Interface Device Page, Usage=Set Envelope Report, Type=CL)
  204. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  205. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  206. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  207. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  208. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  209. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  210. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  211. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  212. 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
  213. 09 5B            (LOCAL)  USAGE              0x000F005B Attack Level (DV=Dynamic Value)
  214. 09 5D            (LOCAL)  USAGE              0x000F005D Fade Level (DV=Dynamic Value)
  215. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  216. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  217. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  218. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  219. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  220. 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
  221. 09 5C            (LOCAL)  USAGE              0x000F005C Attack Time (DV=Dynamic Value)
  222. 09 5E            (LOCAL)  USAGE              0x000F005E Fade Time (DV=Dynamic Value)
  223. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  224. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  225. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  226. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  227. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  228. 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
  229. 45 00            (GLOBAL) PHYSICAL_MAXIMUM   0x00 (0)  <-- Info: Consider replacing 45 00 with 44
  230. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  231. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  232. C0             (MAIN)   END_COLLECTION     Logical
  233. 09 6E          (LOCAL)  USAGE              0x000F006E Set Periodic Report (CL=Logical Collection)
  234. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F006E: Page=Physical Interface Device Page, Usage=Set Periodic Report, Type=CL)
  235. 85 04            (GLOBAL) REPORT_ID          0x04 (4)
  236. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  237. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  238. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  239. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  240. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  241. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  242. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  243. 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
  244. 09 70            (LOCAL)  USAGE              0x000F0070 Magnitude (DV=Dynamic Value)
  245. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  246. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  247. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  248. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  249. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  250. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  251. 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
  252. 09 6F            (LOCAL)  USAGE              0x000F006F Offset (DV=Dynamic Value)
  253. 15 80            (GLOBAL) LOGICAL_MINIMUM    0x80 (-128)  
  254. 25 7F            (GLOBAL) LOGICAL_MAXIMUM    0x7F (127)  
  255. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  256. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000) <-- Redundant: PHYSICAL_MAXIMUM is already 10000
  257. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  258. 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
  259. 09 71            (LOCAL)  USAGE              0x000F0071 Phase (DV=Dynamic Value)
  260. 66 1400          (GLOBAL) UNIT               0x00000014 Rotation in degrees [1° units] (4=System=English Rotation, 1=Rotation=Degrees)
  261. 55 FE            (GLOBAL) UNIT_EXPONENT      0xFE (Unit Value x 10⁻²)
  262. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  263. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  264. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  265. 47 A08C0000      (GLOBAL) PHYSICAL_MAXIMUM   0x00008CA0 (36000)  
  266. 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
  267. 09 72            (LOCAL)  USAGE              0x000F0072 Period (DV=Dynamic Value)
  268. 26 FF7F          (GLOBAL) LOGICAL_MAXIMUM    0x7FFF (32767)  
  269. 46 FF7F          (GLOBAL) PHYSICAL_MAXIMUM   0x7FFF (32767)  
  270. 66 0310          (GLOBAL) UNIT               0x00001003 Time in seconds [1 s units] (3=System=English Linear, 1=Time=Seconds)
  271. 55 FD            (GLOBAL) UNIT_EXPONENT      0xFD (Unit Value x 10⁻³)
  272. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  273. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  274. 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
  275. 66 0000          (GLOBAL) UNIT               0x00000000 No unit (0=None)
  276. 55 00            (GLOBAL) UNIT_EXPONENT      0x00 (Unit Value x 10⁰)
  277. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=32767) UNIT(0x00000000,EXP=0)
  278. 09 73          (LOCAL)  USAGE              0x000F0073 Set Constant Force Report (CL=Logical Collection)
  279. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0073: Page=Physical Interface Device Page, Usage=Set Constant Force Report, Type=CL)
  280. 85 05            (GLOBAL) REPORT_ID          0x05 (5)
  281. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  282. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  283. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  284. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  285. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  286. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  287. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  288. 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
  289. 09 70            (LOCAL)  USAGE              0x000F0070 Magnitude (DV=Dynamic Value)
  290. 16 01FF          (GLOBAL) LOGICAL_MINIMUM    0xFF01 (-255)  
  291. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  292. 36 F0D8          (GLOBAL) PHYSICAL_MINIMUM   0xD8F0 (-10000)  
  293. 46 1027          (GLOBAL) PHYSICAL_MAXIMUM   0x2710 (10000)  
  294. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  295. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  296. 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
  297. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=-10000,MAX=10000) UNIT(0x00000000,EXP=0)
  298. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page <-- Redundant: USAGE_PAGE is already 0x000F
  299. 09 77          (LOCAL)  USAGE              0x000F0077 Effect Operation Report (CL=Logical Collection)
  300. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0077: Page=Physical Interface Device Page, Usage=Effect Operation Report, Type=CL)
  301. 85 0A            (GLOBAL) REPORT_ID          0x0A (10)
  302. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  303. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  304. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  305. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  306. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  307. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  308. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  309. 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
  310. 09 78            (LOCAL)  USAGE              0x000F0078 Effect Operation (NAry=Named Array)
  311. 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)
  312. 09 79              (LOCAL)  USAGE              0x000F0079 Op Effect Start (Sel=Selector)
  313. 09 7A              (LOCAL)  USAGE              0x000F007A Op Effect Start Solo (Sel=Selector)
  314. 09 7B              (LOCAL)  USAGE              0x000F007B Op Effect Stop (Sel=Selector)
  315. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  316. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  317. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  318. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  319. 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
  320. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  321. 09 7C            (LOCAL)  USAGE              0x000F007C Loop Count (DV=Dynamic Value)
  322. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  323. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  324. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  325. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  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. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=255) UNIT(0x00000000,EXP=0)
  328. 09 90          (LOCAL)  USAGE              0x000F0090 PID Block Free Report (CL=Logical Collection)
  329. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0090: Page=Physical Interface Device Page, Usage=PID Block Free Report, Type=CL)
  330. 85 0B            (GLOBAL) REPORT_ID          0x0B (11)
  331. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  332. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  333. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  334. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  335. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  336. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  337. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  338. 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
  339. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  340. 09 96          (LOCAL)  USAGE              0x000F0096 PID Device Control (NAry=Named Array)
  341. 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)
  342. 85 0C            (GLOBAL) REPORT_ID          0x0C (12)
  343. 09 97            (LOCAL)  USAGE              0x000F0097 DC Enable Actuators (Sel=Selector)
  344. 09 98            (LOCAL)  USAGE              0x000F0098 DC Disable Actuators (Sel=Selector)
  345. 09 99            (LOCAL)  USAGE              0x000F0099 DC Stop All Effects (Sel=Selector)
  346. 09 9A            (LOCAL)  USAGE              0x000F009A DC Device Reset (Sel=Selector)
  347. 09 9B            (LOCAL)  USAGE              0x000F009B DC Device Pause (Sel=Selector)
  348. 09 9C            (LOCAL)  USAGE              0x000F009C DC Device Continue (Sel=Selector)
  349. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  350. 25 06            (GLOBAL) LOGICAL_MAXIMUM    0x06 (6)  
  351. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  352. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  353. 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
  354. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=40) UNIT(0x00000000,EXP=0)
  355. 09 7D          (LOCAL)  USAGE              0x000F007D Device Gain Report (CL=Logical Collection)
  356. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F007D: Page=Physical Interface Device Page, Usage=Device Gain Report, Type=CL)
  357. 85 0D            (GLOBAL) REPORT_ID          0x0D (13)
  358. 09 7E            (LOCAL)  USAGE              0x000F007E Device Gain (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. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=10000) UNIT(0x00000000,EXP=0)
  367. 09 AB          (LOCAL)  USAGE              0x000F00AB Create New Effect Report (CL=Logical Collection)
  368. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F00AB: Page=Physical Interface Device Page, Usage=Create New Effect Report, Type=CL)
  369. 85 0F            (GLOBAL) REPORT_ID          0x0F (15)
  370. 09 25            (LOCAL)  USAGE              0x000F0025 Effect Type (NAry=Named Array)
  371. 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)
  372. 09 26              (LOCAL)  USAGE              0x000F0026 ET Constant Force (Sel=Selector)
  373. 09 27              (LOCAL)  USAGE              0x000F0027 ET Ramp (Sel=Selector)
  374. 09 30              (LOCAL)  USAGE              0x000F0030 ET Square (Sel=Selector)
  375. 09 31              (LOCAL)  USAGE              0x000F0031 ET Sine (Sel=Selector)
  376. 09 32              (LOCAL)  USAGE              0x000F0032 ET Triangle (Sel=Selector)
  377. 09 33              (LOCAL)  USAGE              0x000F0033 ET Sawtooth Up (Sel=Selector)
  378. 09 34              (LOCAL)  USAGE              0x000F0034 ET Sawtooth Down (Sel=Selector)
  379. 09 40              (LOCAL)  USAGE              0x000F0040 ET Spring (Sel=Selector)
  380. 09 41              (LOCAL)  USAGE              0x000F0041 ET Damper (Sel=Selector)
  381. 09 42              (LOCAL)  USAGE              0x000F0042 ET Inertia (Sel=Selector)
  382. 09 43              (LOCAL)  USAGE              0x000F0043 ET Friction (Sel=Selector)
  383. 09 28              (LOCAL)  USAGE              0x000F0028 ET Custom Force Data (Sel=Selector)
  384. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  385. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  386. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  387. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  388. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  389. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  390. 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
  391. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  392. 05 01            (GLOBAL) USAGE_PAGE         0x0001 Generic Desktop Page
  393. 09 3B            (LOCAL)  USAGE              0x0001003B Byte Count (DV=Dynamic Value)
  394. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  395. 26 FF01          (GLOBAL) LOGICAL_MAXIMUM    0x01FF (511)  
  396. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  397. 46 FF01          (GLOBAL) PHYSICAL_MAXIMUM   0x01FF (511)  
  398. 75 0A            (GLOBAL) REPORT_SIZE        0x0A (10) Number of bits per field  
  399. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  400. 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
  401. 75 06            (GLOBAL) REPORT_SIZE        0x06 (6) Number of bits per field  
  402. 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
  403. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=511) UNIT(0x00000000,EXP=0)
  404. 05 0F          (GLOBAL) USAGE_PAGE         0x000F Physical Interface Device Page
  405. 09 89          (LOCAL)  USAGE              0x000F0089 PID Block Load Report (CL=Logical Collection)
  406. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F0089: Page=Physical Interface Device Page, Usage=PID Block Load Report, Type=CL)
  407. 85 02            (GLOBAL) REPORT_ID          0x02 (2)
  408. 09 22            (LOCAL)  USAGE              0x000F0022 Effect Block Index (DV=Dynamic Value)
  409. 25 28            (GLOBAL) LOGICAL_MAXIMUM    0x28 (40)  
  410. 15 01            (GLOBAL) LOGICAL_MINIMUM    0x01 (1)  
  411. 35 01            (GLOBAL) PHYSICAL_MINIMUM   0x01 (1)  
  412. 45 28            (GLOBAL) PHYSICAL_MAXIMUM   0x28 (40)  
  413. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  414. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  415. 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
  416. 09 8B            (LOCAL)  USAGE              0x000F008B Block Load Status (NAry=Named Array)
  417. 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)
  418. 09 8C              (LOCAL)  USAGE              0x000F008C Block Load Success (Sel=Selector)
  419. 09 8D              (LOCAL)  USAGE              0x000F008D Block Load Full (Sel=Selector)
  420. 09 8E              (LOCAL)  USAGE              0x000F008E Block Load Error (Sel=Selector)
  421. 25 03              (GLOBAL) LOGICAL_MAXIMUM    0x03 (3)  
  422. 15 01              (GLOBAL) LOGICAL_MINIMUM    0x01 (1) <-- Redundant: LOGICAL_MINIMUM is already 1
  423. 35 01              (GLOBAL) PHYSICAL_MINIMUM   0x01 (1) <-- Redundant: PHYSICAL_MINIMUM is already 1
  424. 45 03              (GLOBAL) PHYSICAL_MAXIMUM   0x03 (3)  
  425. 75 08              (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
  426. 95 01              (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  427. 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
  428. C0               (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=1,MAX=3) UNIT(0x00000000,EXP=0)
  429. 09 AC            (LOCAL)  USAGE              0x000F00AC RAM Pool Available (DV=Dynamic Value)
  430. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
  431. 27 FFFF0000      (GLOBAL) LOGICAL_MAXIMUM    0x0000FFFF (65535)  
  432. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0)  <-- Info: Consider replacing 35 00 with 34
  433. 47 FFFF0000      (GLOBAL) PHYSICAL_MAXIMUM   0x0000FFFF (65535)  
  434. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field  
  435. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  436. 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
  437. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=65535) UNIT(0x00000000,EXP=0)
  438. 09 7F          (LOCAL)  USAGE              0x000F007F PID Pool Report (CL=Logical Collection)
  439. A1 02          (MAIN)   COLLECTION         0x00000002 Logical (Usage=0x000F007F: Page=Physical Interface Device Page, Usage=PID Pool Report, Type=CL)
  440. 85 03            (GLOBAL) REPORT_ID          0x03 (3)
  441. 09 80            (LOCAL)  USAGE              0x000F0080 RAM Pool Size (DV=Dynamic Value)
  442. 75 10            (GLOBAL) REPORT_SIZE        0x10 (16) Number of bits per field <-- Redundant: REPORT_SIZE is already 16
  443. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  444. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  445. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  446. 27 FFFF0000      (GLOBAL) LOGICAL_MAXIMUM    0x0000FFFF (65535) <-- Redundant: LOGICAL_MAXIMUM is already 65535
  447. 47 FFFF0000      (GLOBAL) PHYSICAL_MAXIMUM   0x0000FFFF (65535) <-- Redundant: PHYSICAL_MAXIMUM is already 65535
  448. 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
  449. 09 83            (LOCAL)  USAGE              0x000F0083 Simultaneous Effects Max (SV=Static Value)
  450. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  451. 46 FF00          (GLOBAL) PHYSICAL_MAXIMUM   0x00FF (255)  
  452. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  453. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
  454. 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
  455. 09 A9            (LOCAL)  USAGE              0x000F00A9 Device Managed Pool (SF=Static Flag)
  456. 09 AA            (LOCAL)  USAGE              0x000F00AA Shared Parameter Blocks (SF=Static Flag)
  457. 75 01            (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
  458. 95 02            (GLOBAL) REPORT_COUNT       0x02 (2) Number of fields  
  459. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  460. 25 01            (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
  461. 35 00            (GLOBAL) PHYSICAL_MINIMUM   0x00 (0) <-- Redundant: PHYSICAL_MINIMUM is already 0 <-- Info: Consider replacing 35 00 with 34
  462. 45 01            (GLOBAL) PHYSICAL_MAXIMUM   0x01 (1)  
  463. 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
  464. 75 06            (GLOBAL) REPORT_SIZE        0x06 (6) Number of bits per field  
  465. 95 01            (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields  
  466. 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
  467. C0             (MAIN)   END_COLLECTION     Logical  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  468. 09 01          (LOCAL)  USAGE              0x000F0001 Physical Interface Device (CA=Application Collection)
  469. A1 01          (MAIN)   COLLECTION         0x00000001 Application (Usage=0x000F0001: Page=Physical Interface Device Page, Usage=Physical Interface Device, Type=CA)
  470. 15 00            (GLOBAL) LOGICAL_MINIMUM    0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
  471. 26 FF00          (GLOBAL) LOGICAL_MAXIMUM    0x00FF (255)  
  472. 75 08            (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field  
  473. 85 15            (GLOBAL) REPORT_ID          0x15 (21)
  474. 95 0D            (GLOBAL) REPORT_COUNT       0x0D (13) Number of fields  
  475. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  476. B2 0201          (MAIN)   FEATURE            0x00000102 (13 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  477. 85 11            (GLOBAL) REPORT_ID          0x11 (17)
  478. 95 04            (GLOBAL) REPORT_COUNT       0x04 (4) Number of fields  
  479. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  480. B2 0201          (MAIN)   FEATURE            0x00000102 (4 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  481. 85 17            (GLOBAL) REPORT_ID          0x17 (23)
  482. 95 30            (GLOBAL) REPORT_COUNT       0x30 (48) Number of fields  
  483. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  484. B2 0201          (MAIN)   FEATURE            0x00000102 (48 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  485. 85 13            (GLOBAL) REPORT_ID          0x13 (19)
  486. 95 C0            (GLOBAL) REPORT_COUNT       0xC0 (-64) Number of fields   <-- Error: REPORT_COUNT must be > 0
  487. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  488. 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
  489. 85 16            (GLOBAL) REPORT_ID          0x16 (22)
  490. 95 22            (GLOBAL) REPORT_COUNT       0x22 (34) Number of fields  
  491. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  492. B2 0201          (MAIN)   FEATURE            0x00000102 (34 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  493. 85 12            (GLOBAL) REPORT_ID          0x12 (18)
  494. 95 24            (GLOBAL) REPORT_COUNT       0x24 (36) Number of fields  
  495. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  496. B2 0201          (MAIN)   FEATURE            0x00000102 (36 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
  497. 85 14            (GLOBAL) REPORT_ID          0x14 (20)
  498. 95 C4            (GLOBAL) REPORT_COUNT       0xC4 (-60) Number of fields   <-- Error: REPORT_COUNT must be > 0
  499. 09 00            (LOCAL)  USAGE              0x000F0000 Undefined
  500. 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
  501. C0             (MAIN)   END_COLLECTION     Application  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  502. */
  503.  
  504. //--------------------------------------------------------------------------------
  505. // Physical Interface Device Page featureReport 0F (Device <-> Host)
  506. //--------------------------------------------------------------------------------
  507.  
  508. typedef struct
  509. {
  510.   uint8_t  reportId;                                 // Report ID = 0x0F (15)
  511.                                                      // Collection: CreateNewEffectReport EffectType
  512.   uint8_t  PID_CreateNewEffectReportEffectType;      // Value = 1 to 3, Physical = ((Value - 1) + 1)
  513.                                                      // Value 1 = Usage 0x000F0026: ET Constant Force
  514.                                                      // Value 2 = Usage 0x000F0027: ET Ramp
  515.                                                      // Value 3 = Usage 0x000F0030: ET Square
  516.                                                      // Value 4 = Usage 0x000F0031: ET Sine <-- Error: Value (4) exceeds LOGICAL_MAXIMUM (3)
  517.                                                      // Value 5 = Usage 0x000F0032: ET Triangle <-- Error: Value (5) exceeds LOGICAL_MAXIMUM (3)
  518.                                                      // Value 6 = Usage 0x000F0033: ET Sawtooth Up <-- Error: Value (6) exceeds LOGICAL_MAXIMUM (3)
  519.                                                      // Value 7 = Usage 0x000F0034: ET Sawtooth Down <-- Error: Value (7) exceeds LOGICAL_MAXIMUM (3)
  520.                                                      // Value 8 = Usage 0x000F0040: ET Spring <-- Error: Value (8) exceeds LOGICAL_MAXIMUM (3)
  521.                                                      // Value 9 = Usage 0x000F0041: ET Damper <-- Error: Value (9) exceeds LOGICAL_MAXIMUM (3)
  522.                                                      // Value 10 = Usage 0x000F0042: ET Inertia <-- Error: Value (10) exceeds LOGICAL_MAXIMUM (3)
  523.                                                      // Value 11 = Usage 0x000F0043: ET Friction <-- Error: Value (11) exceeds LOGICAL_MAXIMUM (3)
  524.                                                      // Value 12 = Usage 0x000F0028: ET Custom Force Data <-- Error: Value (12) exceeds LOGICAL_MAXIMUM (3)
  525.                                                      // Collection: CreateNewEffectReport
  526.   uint16_t GD_CreateNewEffectReportByteCount : 10;   // Usage 0x0001003B: Byte Count, Value = 0 to 511, Physical = Value
  527.   uint8_t  : 6;                                      // Pad
  528. } featureReport0F_t;
  529.  
  530.  
  531. //--------------------------------------------------------------------------------
  532. // Physical Interface Device Page featureReport 02 (Device <-> Host)
  533. //--------------------------------------------------------------------------------
  534.  
  535. typedef struct
  536. {
  537.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  538.                                                      // Collection: PIDBlockLoadReport
  539.   uint8_t  PID_PIDBlockLoadReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  540.                                                      // Collection: PIDBlockLoadReport BlockLoadStatus
  541.   uint8_t  PID_PIDBlockLoadReportBlockLoadStatus;    // Value = 1 to 3, Physical = ((Value - 1) + 1)
  542.                                                      // Value 1 = Usage 0x000F008C: Block Load Success
  543.                                                      // Value 2 = Usage 0x000F008D: Block Load Full
  544.                                                      // Value 3 = Usage 0x000F008E: Block Load Error
  545.                                                      // Collection: PIDBlockLoadReport
  546.   uint16_t PID_PIDBlockLoadReport;                   // Value = 0 to 65535, Physical = Value
  547.                                                      // Value     0 = Usage 0x000F00AC: RAM Pool Available
  548. } featureReport02_t;
  549.  
  550.  
  551. //--------------------------------------------------------------------------------
  552. // Physical Interface Device Page featureReport 03 (Device <-> Host)
  553. //--------------------------------------------------------------------------------
  554.  
  555. typedef struct
  556. {
  557.   uint8_t  reportId;                                 // Report ID = 0x03 (3)
  558.                                                      // Collection: PIDPoolReport
  559.   uint16_t PID_PIDPoolReportRamPoolSize;             // Usage 0x000F0080: RAM Pool Size, Value = 0 to 65535, Physical = Value
  560.   uint8_t  PID_PIDPoolReportSimultaneousEffectsMax;  // Usage 0x000F0083: Simultaneous Effects Max, Value = 0 to 255, Physical = Value
  561.   uint8_t  PID_PIDPoolReportDeviceManagedPool : 1;   // Usage 0x000F00A9: Device Managed Pool, Value = 0 to 1, Physical = Value
  562.   uint8_t  PID_PIDPoolReportSharedParameterBlocks : 1; // Usage 0x000F00AA: Shared Parameter Blocks, Value = 0 to 1, Physical = Value
  563.   uint8_t  : 6;                                      // Pad
  564. } featureReport03_t;
  565.  
  566.  
  567. //--------------------------------------------------------------------------------
  568. // Physical Interface Device Page featureReport 15 (Device <-> Host)
  569. //--------------------------------------------------------------------------------
  570.  
  571. typedef struct
  572. {
  573.   uint8_t  reportId;                                 // Report ID = 0x15 (21)
  574.                                                      // Collection: PhysicalInterfaceDevice
  575.   uint8_t  PID_PhysicalInterfaceDeviceUndefined[13]; // Usage 0x000F0000: Undefined, Value = 0 to 255, Physical = Value / 255
  576. } featureReport15_t;
  577.  
  578.  
  579. //--------------------------------------------------------------------------------
  580. // Physical Interface Device Page featureReport 11 (Device <-> Host)
  581. //--------------------------------------------------------------------------------
  582.  
  583. typedef struct
  584. {
  585.   uint8_t  reportId;                                 // Report ID = 0x11 (17)
  586.   uint8_t  PID_PhysicalInterfaceDeviceUndefined[4];  // Usage 0x000F0000: Undefined, Value = 0 to 255, Physical = Value / 255
  587. } featureReport11_t;
  588.  
  589.  
  590. //--------------------------------------------------------------------------------
  591. // Physical Interface Device Page featureReport 17 (Device <-> Host)
  592. //--------------------------------------------------------------------------------
  593.  
  594. typedef struct
  595. {
  596.   uint8_t  reportId;                                 // Report ID = 0x17 (23)
  597.   uint8_t  PID_PhysicalInterfaceDeviceUndefined[48]; // Usage 0x000F0000: Undefined, Value = 0 to 255, Physical = Value / 255
  598. } featureReport17_t;
  599.  
  600.  
  601. //--------------------------------------------------------------------------------
  602. // Physical Interface Device Page featureReport 13 (Device <-> Host)
  603. //--------------------------------------------------------------------------------
  604.  
  605. typedef struct
  606. {
  607.   uint8_t  reportId;                                 // Report ID = 0x13 (19)
  608.                                                      // Usage 0x000F0000 Undefined Value = 0 to 255 <-- Ignored: REPORT_COUNT (-64) is too small
  609. } featureReport13_t;
  610.  
  611.  
  612. //--------------------------------------------------------------------------------
  613. // Physical Interface Device Page featureReport 16 (Device <-> Host)
  614. //--------------------------------------------------------------------------------
  615.  
  616. typedef struct
  617. {
  618.   uint8_t  reportId;                                 // Report ID = 0x16 (22)
  619.   uint8_t  PID_PhysicalInterfaceDeviceUndefined[34]; // Usage 0x000F0000: Undefined, Value = 0 to 255, Physical = Value / 255
  620. } featureReport16_t;
  621.  
  622.  
  623. //--------------------------------------------------------------------------------
  624. // Physical Interface Device Page featureReport 12 (Device <-> Host)
  625. //--------------------------------------------------------------------------------
  626.  
  627. typedef struct
  628. {
  629.   uint8_t  reportId;                                 // Report ID = 0x12 (18)
  630.   uint8_t  PID_PhysicalInterfaceDeviceUndefined[36]; // Usage 0x000F0000: Undefined, Value = 0 to 255, Physical = Value / 255
  631. } featureReport12_t;
  632.  
  633.  
  634. //--------------------------------------------------------------------------------
  635. // Physical Interface Device Page featureReport 14 (Device <-> Host)
  636. //--------------------------------------------------------------------------------
  637.  
  638. typedef struct
  639. {
  640.   uint8_t  reportId;                                 // Report ID = 0x14 (20)
  641.                                                      // Usage 0x000F0000 Undefined Value = 0 to 255 <-- Ignored: REPORT_COUNT (-60) is too small
  642. } featureReport14_t;
  643.  
  644.  
  645. //--------------------------------------------------------------------------------
  646. // Button Page inputReport 01 (Device --> Host)
  647. //--------------------------------------------------------------------------------
  648.  
  649. typedef struct
  650. {
  651.   uint8_t  reportId;                                 // Report ID = 0x01 (1)
  652.                                                      // Collection: GamePad
  653.   uint8_t  BTN_GamePadButton1 : 1;                   // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1
  654.   uint8_t  BTN_GamePadButton2 : 1;                   // Usage 0x00090002: Button 2 Secondary, Value = 0 to 1
  655.   uint8_t  BTN_GamePadButton3 : 1;                   // Usage 0x00090003: Button 3 Tertiary, Value = 0 to 1
  656.   uint8_t  BTN_GamePadButton4 : 1;                   // Usage 0x00090004: Button 4, Value = 0 to 1
  657.   uint8_t  BTN_GamePadButton5 : 1;                   // Usage 0x00090005: Button 5, Value = 0 to 1
  658.   uint8_t  BTN_GamePadButton6 : 1;                   // Usage 0x00090006: Button 6, Value = 0 to 1
  659.   uint8_t  BTN_GamePadButton7 : 1;                   // Usage 0x00090007: Button 7, Value = 0 to 1
  660.   uint8_t  BTN_GamePadButton8 : 1;                   // Usage 0x00090008: Button 8, Value = 0 to 1
  661.   uint8_t  BTN_GamePadButton9 : 1;                   // Usage 0x00090009: Button 9, Value = 0 to 1
  662.   uint8_t  BTN_GamePadButton10 : 1;                  // Usage 0x0009000A: Button 10, Value = 0 to 1
  663.   uint8_t  BTN_GamePadButton11 : 1;                  // Usage 0x0009000B: Button 11, Value = 0 to 1
  664.   uint8_t  BTN_GamePadButton12 : 1;                  // Usage 0x0009000C: Button 12, Value = 0 to 1
  665.   uint8_t  BTN_GamePadButton13 : 1;                  // Usage 0x0009000D: Button 13, Value = 0 to 1
  666.   uint8_t  BTN_GamePadButton14 : 1;                  // Usage 0x0009000E: Button 14, Value = 0 to 1
  667.   uint8_t  BTN_GamePadButton15 : 1;                  // Usage 0x0009000F: Button 15, Value = 0 to 1
  668.   uint8_t  BTN_GamePadButton16 : 1;                  // Usage 0x00090010: Button 16, Value = 0 to 1
  669.   uint8_t  BTN_GamePadButton17 : 1;                  // Usage 0x00090011: Button 17, Value = 0 to 1
  670.   uint8_t  BTN_GamePadButton18 : 1;                  // Usage 0x00090012: Button 18, Value = 0 to 1
  671.   uint8_t  BTN_GamePadButton19 : 1;                  // Usage 0x00090013: Button 19, Value = 0 to 1
  672.   uint8_t  BTN_GamePadButton20 : 1;                  // Usage 0x00090014: Button 20, Value = 0 to 1
  673.   uint8_t  BTN_GamePadButton21 : 1;                  // Usage 0x00090015: Button 21, Value = 0 to 1
  674.   uint8_t  BTN_GamePadButton22 : 1;                  // Usage 0x00090016: Button 22, Value = 0 to 1
  675.   uint8_t  BTN_GamePadButton23 : 1;                  // Usage 0x00090017: Button 23, Value = 0 to 1
  676.   uint8_t  BTN_GamePadButton24 : 1;                  // Usage 0x00090018: Button 24, Value = 0 to 1
  677.   uint8_t  GD_GamePadX;                              // Usage 0x00010030: X, Value = 0 to 255, Physical = Value
  678.   uint8_t  GD_GamePadY;                              // Usage 0x00010031: Y, Value = 0 to 255, Physical = Value
  679.   uint8_t  GD_GamePadZ;                              // Usage 0x00010032: Z, Value = 0 to 255, Physical = Value
  680.   uint8_t  GD_GamePadRx;                             // Usage 0x00010033: Rx, Value = 0 to 255, Physical = Value
  681.   uint8_t  GD_GamePadRy;                             // Usage 0x00010034: Ry, Value = 0 to 255, Physical = Value
  682.   uint8_t  GD_GamePadRz;                             // Usage 0x00010035: Rz, Value = 0 to 255, Physical = Value
  683.   uint8_t  GD_GamePadSlider;                         // Usage 0x00010036: Slider, Value = 0 to 255, Physical = Value
  684.   uint8_t  GD_GamePadDial;                           // Usage 0x00010037: Dial, Value = 0 to 255, Physical = Value
  685.                                                      // Collection:
  686.   uint8_t  GD_VendorDefinedHatSwitch : 4;            // Usage 0x00010039: Hat switch, Value = 0 to 7, Physical = Value x 45 in degrees
  687.   uint8_t  : 4;                                      // Pad
  688.   uint8_t  VEN_VendorDefined0049 : 1;                // Usage 0xFF010049: , Value = 0 to 7, Physical = Value x 45
  689.   uint8_t  : 7;                                      // Pad
  690. } inputReport01_t;
  691.  
  692.  
  693. //--------------------------------------------------------------------------------
  694. // Physical Interface Device Page inputReport 02 (Device --> Host)
  695. //--------------------------------------------------------------------------------
  696.  
  697. typedef struct
  698. {
  699.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  700.                                                      // Collection: PIDStateReport
  701.   uint8_t  PID_PIDStateReportDevicePaused : 1;       // Usage 0x000F009F: Device Paused, Value = 0 to 1, Physical = Value
  702.   uint8_t  PID_PIDStateReportActuatorsEnabled : 1;   // Usage 0x000F00A0: Actuators Enabled, Value = 0 to 1, Physical = Value
  703.   uint8_t  PID_PIDStateReportSafetySwitch : 1;       // Usage 0x000F00A4: Safety Switch, Value = 0 to 1, Physical = Value
  704.   uint8_t  PID_PIDStateReportActuatorOverrideSwitch : 1; // Usage 0x000F00A5: Actuator Override Switch, Value = 0 to 1, Physical = Value
  705.   uint8_t  PID_PIDStateReportActuatorPower : 1;      // Usage 0x000F00A6: Actuator Power, Value = 0 to 1, Physical = Value
  706.   uint8_t  : 1;                                      // Pad
  707.   uint8_t  : 1;                                      // Pad
  708.   uint8_t  : 1;                                      // Pad
  709.   uint8_t  PID_PIDStateReportEffectPlaying : 1;      // Usage 0x000F0094: Effect Playing, Value = 0 to 1, Physical = Value
  710.   uint8_t  PID_PIDStateReportEffectBlockIndex : 7;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  711. } inputReport02_t;
  712.  
  713.  
  714. //--------------------------------------------------------------------------------
  715. // Physical Interface Device Page outputReport 01 (Device <-- Host)
  716. //--------------------------------------------------------------------------------
  717.  
  718. typedef struct
  719. {
  720.   uint8_t  reportId;                                 // Report ID = 0x01 (1)
  721.                                                      // Collection: SetEffectReport
  722.   uint8_t  PID_SetEffectReportEffectBlockIndex;      // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  723.                                                      // Collection: SetEffectReport EffectType
  724.   uint8_t  PID_SetEffectReportEffectType;            // Value = 1 to 3, Physical = ((Value - 1) + 1)
  725.                                                      // Value 1 = Usage 0x000F0026: ET Constant Force
  726.                                                      // Value 2 = Usage 0x000F0027: ET Ramp
  727.                                                      // Value 3 = Usage 0x000F0030: ET Square
  728.                                                      // Value 4 = Usage 0x000F0031: ET Sine <-- Error: Value (4) exceeds LOGICAL_MAXIMUM (3)
  729.                                                      // Value 5 = Usage 0x000F0032: ET Triangle <-- Error: Value (5) exceeds LOGICAL_MAXIMUM (3)
  730.                                                      // Value 6 = Usage 0x000F0033: ET Sawtooth Up <-- Error: Value (6) exceeds LOGICAL_MAXIMUM (3)
  731.                                                      // Value 7 = Usage 0x000F0034: ET Sawtooth Down <-- Error: Value (7) exceeds LOGICAL_MAXIMUM (3)
  732.                                                      // Value 8 = Usage 0x000F0040: ET Spring <-- Error: Value (8) exceeds LOGICAL_MAXIMUM (3)
  733.                                                      // Value 9 = Usage 0x000F0041: ET Damper <-- Error: Value (9) exceeds LOGICAL_MAXIMUM (3)
  734.                                                      // Value 10 = Usage 0x000F0042: ET Inertia <-- Error: Value (10) exceeds LOGICAL_MAXIMUM (3)
  735.                                                      // Value 11 = Usage 0x000F0043: ET Friction <-- Error: Value (11) exceeds LOGICAL_MAXIMUM (3)
  736.                                                      // Value 12 = Usage 0x000F0028: ET Custom Force Data <-- Error: Value (12) exceeds LOGICAL_MAXIMUM (3)
  737.                                                      // Collection: SetEffectReport
  738.   uint16_t PID_SetEffectReportDuration;              // Usage 0x000F0050: Duration, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  739.   uint16_t PID_SetEffectReportTriggerRepeatInterval; // Usage 0x000F0054: Trigger Repeat Interval, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  740.   uint16_t PID_SetEffectReportSamplePeriod;          // Usage 0x000F0051: Sample Period, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  741.   uint8_t  PID_SetEffectReportGain;                  // Usage 0x000F0052: Gain, Value = 0 to 255, Physical = Value x 2000 / 51
  742.   uint8_t  PID_SetEffectReportTriggerButton;         // Usage 0x000F0053: Trigger Button, Value = 1 to 8, Physical = ((Value - 1) + 1)
  743.                                                      // Collection: SetEffectReport AxesEnable
  744.   uint8_t  GD_SetEffectReportAxesEnableX : 1;        // Usage 0x00010030: X, Value = 0 to 1, Physical = (Value x 7 + 1)
  745.   uint8_t  GD_SetEffectReportAxesEnableY : 1;        // Usage 0x00010031: Y, Value = 0 to 1, Physical = (Value x 7 + 1)
  746.                                                      // Collection: SetEffectReport
  747.   uint8_t  PID_SetEffectReportDirectionEnable : 1;   // Usage 0x000F0056: Direction Enable, Value = 0 to 1, Physical = (Value x 7 + 1)
  748.   uint8_t  : 1;                                      // Pad
  749.   uint8_t  : 1;                                      // Pad
  750.   uint8_t  : 1;                                      // Pad
  751.   uint8_t  : 1;                                      // Pad
  752.   uint8_t  : 1;                                      // Pad
  753.                                                      // Collection: SetEffectReport Direction
  754.   uint8_t  ORD_SetEffectReportDirectionInstance1;    // Usage 0x000A0001: Instance 1, Value = 0 to 255, Physical = Value x 2400 / 17
  755.   uint8_t  ORD_SetEffectReportDirectionInstance2;    // Usage 0x000A0002: Instance 2, Value = 0 to 255, Physical = Value x 2400 / 17
  756.                                                      // Collection: SetEffectReport
  757.   uint16_t PID_SetEffectReportStartDelay;            // Usage 0x000F00A7: Start Delay, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  758. } outputReport01_t;
  759.  
  760.  
  761. //--------------------------------------------------------------------------------
  762. // Physical Interface Device Page outputReport 02 (Device <-- Host)
  763. //--------------------------------------------------------------------------------
  764.  
  765. typedef struct
  766. {
  767.   uint8_t  reportId;                                 // Report ID = 0x02 (2)
  768.                                                      // Collection: SetEnvelopeReport
  769.   uint8_t  PID_SetEnvelopeReportEffectBlockIndex;    // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  770.   uint8_t  PID_SetEnvelopeReportAttackLevel;         // Usage 0x000F005B: Attack Level, Value = 0 to 255, Physical = Value x 2000 / 51
  771.   uint8_t  PID_SetEnvelopeReportFadeLevel;           // Usage 0x000F005D: Fade Level, Value = 0 to 255, Physical = Value x 2000 / 51
  772.   uint16_t PID_SetEnvelopeReportAttackTime;          // Usage 0x000F005C: Attack Time, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  773.   uint16_t PID_SetEnvelopeReportFadeTime;            // Usage 0x000F005E: Fade Time, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  774. } outputReport02_t;
  775.  
  776.  
  777. //--------------------------------------------------------------------------------
  778. // Physical Interface Device Page outputReport 04 (Device <-- Host)
  779. //--------------------------------------------------------------------------------
  780.  
  781. typedef struct
  782. {
  783.   uint8_t  reportId;                                 // Report ID = 0x04 (4)
  784.                                                      // Collection: SetPeriodicReport
  785.   uint8_t  PID_SetPeriodicReportEffectBlockIndex;    // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  786.   uint8_t  PID_SetPeriodicReportMagnitude;           // Usage 0x000F0070: Magnitude, Value = 0 to 255, Physical = Value x 2000 / 51
  787.   int8_t   PID_SetPeriodicReportOffset;              // Usage 0x000F006F: Offset, Value = -128 to 127, Physical = ((Value + 128) x 4000 / 51 - 10000)
  788.   uint8_t  PID_SetPeriodicReportPhase;               // Usage 0x000F0071: Phase, Value = 0 to 255, Physical = Value x 2400 / 17 in 10⁻² degrees units
  789.   uint16_t PID_SetPeriodicReportPeriod;              // Usage 0x000F0072: Period, Value = 0 to 32767, Physical = Value in 10⁻³ s units
  790. } outputReport04_t;
  791.  
  792.  
  793. //--------------------------------------------------------------------------------
  794. // Physical Interface Device Page outputReport 05 (Device <-- Host)
  795. //--------------------------------------------------------------------------------
  796.  
  797. typedef struct
  798. {
  799.   uint8_t  reportId;                                 // Report ID = 0x05 (5)
  800.                                                      // Collection: SetConstantForceReport
  801.   uint8_t  PID_SetConstantForceReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  802.   int16_t  PID_SetConstantForceReportMagnitude;      // Usage 0x000F0070: Magnitude, Value = -255 to 255, Physical = ((Value + 255) x 2000 / 51 - 10000)
  803. } outputReport05_t;
  804.  
  805.  
  806. //--------------------------------------------------------------------------------
  807. // Physical Interface Device Page outputReport 0A (Device <-- Host)
  808. //--------------------------------------------------------------------------------
  809.  
  810. typedef struct
  811. {
  812.   uint8_t  reportId;                                 // Report ID = 0x0A (10)
  813.                                                      // Collection: EffectOperationReport
  814.   uint8_t  PID_EffectOperationReportEffectBlockIndex; // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  815.                                                      // Collection: EffectOperationReport EffectOperation
  816.   uint8_t  PID_EffectOperationReportEffectOperation; // Value = 1 to 3, Physical = ((Value - 1) x 39 / 2 + 1)
  817.                                                      // Value 1 = Usage 0x000F0079: Op Effect Start
  818.                                                      // Value 2 = Usage 0x000F007A: Op Effect Start Solo
  819.                                                      // Value 3 = Usage 0x000F007B: Op Effect Stop
  820.                                                      // Collection: EffectOperationReport
  821.   uint8_t  PID_EffectOperationReportLoopCount;       // Usage 0x000F007C: Loop Count, Value = 0 to 255, Physical = Value
  822. } outputReport0A_t;
  823.  
  824.  
  825. //--------------------------------------------------------------------------------
  826. // Physical Interface Device Page outputReport 0B (Device <-- Host)
  827. //--------------------------------------------------------------------------------
  828.  
  829. typedef struct
  830. {
  831.   uint8_t  reportId;                                 // Report ID = 0x0B (11)
  832.                                                      // Collection: PIDBlockFreeReport
  833.   uint8_t  PID_PIDBlockFreeReportEffectBlockIndex;   // Usage 0x000F0022: Effect Block Index, Value = 1 to 40, Physical = ((Value - 1) + 1)
  834. } outputReport0B_t;
  835.  
  836.  
  837. //--------------------------------------------------------------------------------
  838. // Physical Interface Device Page outputReport 0C (Device <-- Host)
  839. //--------------------------------------------------------------------------------
  840.  
  841. typedef struct
  842. {
  843.   uint8_t  reportId;                                 // Report ID = 0x0C (12)
  844.                                                      // Collection: PIDDeviceControl
  845.   uint8_t  PID_PIDDeviceControl;                     // Value = 1 to 6, Physical = ((Value - 1) x 39 / 5 + 1)
  846.                                                      // Value 1 = Usage 0x000F0097: DC Enable Actuators
  847.                                                      // Value 2 = Usage 0x000F0098: DC Disable Actuators
  848.                                                      // Value 3 = Usage 0x000F0099: DC Stop All Effects
  849.                                                      // Value 4 = Usage 0x000F009A: DC Device Reset
  850.                                                      // Value 5 = Usage 0x000F009B: DC Device Pause
  851.                                                      // Value 6 = Usage 0x000F009C: DC Device Continue
  852. } outputReport0C_t;
  853.  
  854.  
  855. //--------------------------------------------------------------------------------
  856. // Physical Interface Device Page outputReport 0D (Device <-- Host)
  857. //--------------------------------------------------------------------------------
  858.  
  859. typedef struct
  860. {
  861.   uint8_t  reportId;                                 // Report ID = 0x0D (13)
  862.                                                      // Collection: DeviceGainReport
  863.   uint8_t  PID_DeviceGainReportDeviceGain;           // Usage 0x000F007E: Device Gain, Value = 0 to 255, Physical = Value x 2000 / 51
  864. } outputReport0D_t;
  865.  
  866.  
  867. //--------------------------------------------------------------------------------
  868. // Decoded Application Collection
  869. //--------------------------------------------------------------------------------
  870.  
  871. /*
  872. C0           (MAIN)   END_COLLECTION     Application  <-- Warning: Physical units are still in effect PHYSICAL(MIN=0,MAX=1) UNIT(0x00000000,EXP=0)
  873. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement