Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
usb_hid_ffb_desc.h
Go to the documentation of this file.
1/*
2 * usb_hid_ffb_desc.h
3 *
4 * Created on: 22.02.2021
5 * Author: Yannick
6 */
7
8#ifndef USB_INC_USB_HID_FFB_DESC_H_
9#define USB_INC_USB_HID_FFB_DESC_H_
10#include "constants.h"
11#include "hid.h"
12
17
18#if defined(HIDAXISRES_32B_BITS) && HIDAXISRES_32B_BITS > 2 && HIDAXISRES_32B_BITS < 32
19// 7FFFFFFF for 32
20#define HIDAXISRES_32B_MAXS (1 << (HIDAXISRES_32B_BITS-1))-1
21#else
22#define HIDAXISRES_32B_MAXS 0x7FFFFFFF
23#define HIDAXISRES_32B_BITS 32
24#endif
25
26// HID descriptor building blocks
27#define HIDDESC_32B_ENTRY(count) /* LOGICAL_MINIMUM (-7FFFFFFF)*/\
28 HID_LOGICAL_MIN_N(-HIDAXISRES_32B_MAXS,3), /*0x17, 0x01, 0x00, 0x00, 0x80,*/\
29 /* LOGICAL_MAXIMUM (7FFFFFFF)*/\
30 HID_LOGICAL_MAX_N(HIDAXISRES_32B_MAXS,3), /* 0x27, 0xff, 0xff, 0xff, 0x7f, */ \
31 /* REPORT_SIZE (32)*/\
32 0x75, 0x20,\
33 /* REPORT_COUNT */\
34 0x95, count,\
35/* INPUT (Data,Var,Abs)*/\
36 0x81, 0x02,
37#define HIDDESC_32B_ENTRY_SIZE 16 // 16 bytes more for range definition
38
39
40#define HIDDESC_GAMEPAD_16B \
41 0xa1, 0x00, /* COLLECTION (Physical)*/\
42 0x85, 0x01, /* REPORT_ID (1)*/\
43 0x05, 0x09, /* USAGE_PAGE (Button)*/\
44 0x19, 0x01, /* USAGE_MINIMUM (Button 1)*/\
45 0x29, 0x40, /* USAGE_MAXIMUM (Button 64)*/\
46 0x15, 0x00, /* LOGICAL_MINIMUM (0)*/\
47 0x25, 0x01, /* LOGICAL_MAXIMUM (1)*/\
48 0x95, 0x40, /* REPORT_COUNT (64)*/\
49 0x75, 0x01, /* REPORT_SIZE (1)*/\
50 0x81, 0x02, /* INPUT (Data,Var,Abs)*/\
51 0x05, 0x01, /* USAGE_PAGE (Generic Desktop)*/\
52 0x09, HID_USAGE_DESKTOP_X, /* USAGE (X)*/\
53 0x09, HID_USAGE_DESKTOP_Y, /* USAGE (Y)*/\
54 0x09, HID_USAGE_DESKTOP_Z, /* USAGE (Z)*/\
55 0x09, HID_USAGE_DESKTOP_RX, /* USAGE (Rx)*/\
56 0x09, HID_USAGE_DESKTOP_RY, /* USAGE (Ry)*/\
57 0x09, HID_USAGE_DESKTOP_RZ, /* USAGE (Rz)*/\
58 0x09, HID_USAGE_DESKTOP_DIAL, /* USAGE (Dial)*/\
59 0x09, HID_USAGE_DESKTOP_SLIDER, /* USAGE (Slider)*/\
60 0x16, 0x01, 0x80, /* LOGICAL_MINIMUM (-32767)*/\
61 0x26, 0xff, 0x7f, /* LOGICAL_MAXIMUM (32767)*/\
62 0x75, 0x10, /* REPORT_SIZE (16)*/\
63 0x95, 0x08, /* REPORT_COUNT (8)*/\
64 0x81, 0x02, /* INPUT (Data,Var,Abs)*/\
65 0xc0
66#define HIDDESC_GAMEPAD_16B_SIZE 51
67
68// Define workaround because we can't have conditionals in macros
69#if MAX_AXIS == 1
70#define HIDDESC_GPENTRY_32B_1 0x09, HID_USAGE_DESKTOP_X, /* USAGE (X)*/\
71 HIDDESC_32B_ENTRY(0x01)
72#else
73#define HIDDESC_GPENTRY_32B_1 0x09, HID_USAGE_DESKTOP_X, /* USAGE (X)*/
74#endif
75#if MAX_AXIS == 2
76#define HIDDESC_GPENTRY_32B_2 0x09, HID_USAGE_DESKTOP_Y, /* USAGE (Y)*/\
77 HIDDESC_32B_ENTRY(0x02)
78#else
79#define HIDDESC_GPENTRY_32B_2 0x09, HID_USAGE_DESKTOP_Y, /* USAGE (Y)*/
80#endif
81#if MAX_AXIS == 3
82#define HIDDESC_GPENTRY_32B_3 0x09, HID_USAGE_DESKTOP_Z, /* USAGE (Z)*/\
83 HIDDESC_32B_ENTRY(0x03)
84#else
85#define HIDDESC_GPENTRY_32B_3 0x09, HID_USAGE_DESKTOP_Z, /* USAGE (Z)*/
86#endif
87#define HIDDESC_GAMEPAD_32B \
88 0xa1, 0x00, /* COLLECTION (Physical)*/\
89 0x85, 0x01, /* REPORT_ID (1)*/\
90 0x05, 0x09, /* USAGE_PAGE (Button)*/\
91 0x19, 0x01, /* USAGE_MINIMUM (Button 1)*/\
92 0x29, 0x40, /* USAGE_MAXIMUM (Button 64)*/\
93 0x15, 0x00, /* LOGICAL_MINIMUM (0)*/\
94 0x25, 0x01, /* LOGICAL_MAXIMUM (1)*/\
95 0x95, 0x40, /* REPORT_COUNT (64)*/\
96 0x75, 0x01, /* REPORT_SIZE (1)*/\
97 0x81, 0x02, /* INPUT (Data,Var,Abs)*/\
98 0x05, 0x01, /* USAGE_PAGE (Generic Desktop)*/\
99 HIDDESC_GPENTRY_32B_1 \
100 HIDDESC_GPENTRY_32B_2 \
101 HIDDESC_GPENTRY_32B_3 \
102 0x09, HID_USAGE_DESKTOP_RX, /* USAGE (Rx)*/\
103 0x09, HID_USAGE_DESKTOP_RY, /* USAGE (Ry)*/\
104 0x09, HID_USAGE_DESKTOP_RZ, /* USAGE (Rz)*/\
105 0x09, HID_USAGE_DESKTOP_DIAL, /* USAGE (Dial)*/\
106 0x09, HID_USAGE_DESKTOP_SLIDER, /* USAGE (Slider)*/\
107 0x16, 0x01, 0x80, /* LOGICAL_MINIMUM (-32767)*/\
108 0x26, 0xff, 0x7f, /* LOGICAL_MAXIMUM (32767)*/\
109 0x75, 0x10, /* REPORT_SIZE (16)*/\
110 0x95, 0x08-MAX_AXIS, /* REPORT_COUNT (8-32baxes)*/\
111 0x81, 0x02, /* INPUT (Data,Var,Abs)*/\
112 0xc0
113#define HIDDESC_GAMEPAD_32B_SIZE HIDDESC_GAMEPAD_16B_SIZE + HIDDESC_32B_ENTRY_SIZE
114// Control reports for HID command interface
115#define HIDDESC_CTRL_REP(DIR) /* INPUT or OUTPUT*/\
116 0x85,HID_ID_HIDCMD, /* Report ID*/\
117 0x09, 0x01, /* USAGE (Vendor)*/\
118 0x15, 0x00, /* LOGICAL_MINIMUM (0)*/\
119 0x26, 0x04, 0x00, /* Logical Maximum 4*/\
120 0x75, 0x08, /* REPORT_SIZE (8)*/\
121 0x95, 0x01, /* REPORT_COUNT (1)*/\
122 HID_##DIR(1), /* INPUT (Data,Var,Abs)*/\
123 \
124 0x09, 0x02, /* USAGE (Vendor) class address*/\
125 0x75, 0x10, /* REPORT_SIZE (16)*/\
126 0x95, 0x01, /* REPORT_COUNT (1)*/\
127 HID_##DIR(1), /* INPUT (Data,Var,Abs)*/\
128 \
129 0x09, 0x03, /* USAGE (Vendor) class instance*/\
130 0x75, 0x08, /* REPORT_SIZE (8)*/\
131 0x95, 0x01, /* REPORT_COUNT (1)*/\
132 HID_##DIR(1), /* INPUT (Data,Var,Abs)*/\
133 \
134 0x09, 0x04, /* USAGE (Vendor) cmd*/\
135 0x75, 0x20, /* REPORT_SIZE (32)*/\
136 0x95, 0x01, /* REPORT_COUNT (1)*/\
137 HID_##DIR(1), /* INPUT (Data,Var,Abs)*/\
138 \
139 0x09, 0x05, /* USAGE (Vendor)*/\
140 0x75, 0x40, /* REPORT_SIZE (64) value*/\
141 0x95, 0x01, /* REPORT_COUNT (1)*/\
142 HID_##DIR(1), /* INPUT (Data,Var,Abs)*/\
143 \
144 0x09, 0x06, /* USAGE (Vendor) address*/\
145 0x75, 0x40, /* REPORT_SIZE (64)*/\
146 0x95, 0x01, /* REPORT_COUNT (1)*/\
147 HID_##DIR(1) /* INPUT (Data,Var,Abs)*/
148#define HIDDESC_CTRL_REPORTS \
149 0x06, 0x00, 0xFF, /* USAGE_PAGE (Vendor)*/\
150 0x09, 0x00, /* USAGE (Vendor)*/\
151 0xA1, 0x01, /* Collection (Application)*/\
152 HIDDESC_CTRL_REP(OUTPUT),\
153 HIDDESC_CTRL_REP(INPUT),\
154 0xc0 /* END_COLLECTION*/
155#define HIDDESC_CTRL_REPORTS_SIZE 118
156
157#define HIDDESC_FFB_STATEREP \
158 0x05,0x0F, /* Usage Page Physical Interface*/ \
159 0x09,0x92, /* Usage PID State report*/\
160 0xA1,0x02, /* Collection Datalink (logical)*/\
161 0x85,HID_ID_STATE+FFB_ID_OFFSET, /* Report ID 2*/\
162/* 0x09,0x22, Usage Effect Block Index*/\
163/* 0x15,0x01, Logical Minimum 1*/\
164/* 0x25,MAX_EFFECTS, Logical Maximum 28h (40d)*/\
165/* 0x35,0x01, Physical Minimum 1*/\
166/* 0x45,MAX_EFFECTS, Physical Maximum 28h (40d)*/\
167/* 0x75,0x08, Report Size 8*/\
168/* 0x95,0x01, Report Count 1*/\
169/* 0x81,0x02, Input (Variable)*/\
170 0x09,0x9F, /* Usage Device is Pause*/\
171 0x09,0xA0, /* Usage Actuators Enabled*/\
172 0x09,0xA4, /* Usage Safety Switch*/\
173 0x09,0xA6, /* Usage Actuator Power*/\
174 0x09,0x94, /* Usage Effect Playing*/\
175 /* 0x15,0x00, Logical Minimum 0*/\
176 /* 0x25,0x01, Logical Maximum 1*/\
177 /* 0x35,0x00, Physical Minimum 0*/\
178 /* 0x45,0x01, Physical Maximum 1*/\
179 /* 0x75,0x01, Report Size 1*/\
180 /* 0x95,0x01, Report Count 1*/\
181 /* 0x81,0x02, Input (Variable)*/\
182 0x15,0x00, /* Logical Minimum 0*/\
183 0x25,0x01, /* Logical Maximum 1*/\
184 0x35,0x00, /* Physical Minimum 0*/\
185 0x45,0x01, /* Physical Maximum 1*/\
186 0x75,0x01, /* Report Size 1*/\
187 0x95,0x05, /* Report Count 4*/\
188 0x81,0x02, /* Input (Variable)*/\
189 0x95,0x03, /* Report Count 3*/\
190 0x81,0x03, /* Input (Constant, Variable)*/\
191 0xC0 // End Collection
192#define HIDDESC_FFB_STATEREP_SIZE 37
193
194/*
195Output
196Collection Datalink:
197Usage Set Effect Report
198
199ID:1
200Effect Block Index: 8bit
201
202subcollection Effect Type
20312 effect types, 8bit each
204
205*/
206#define HIDDESC_FFB_SETEFREP \
207 0x09,0x21, /* Usage Set Effect Report*/\
208 0xA1,0x02, /* Collection Datalink (Logical)*/\
209 0x85,HID_ID_EFFREP+FFB_ID_OFFSET, /* Report ID 1*/\
210 0x09,0x22, /* Usage Effect Block Index*/\
211 0x15,0x01, /* Logical Minimum 1*/\
212 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
213 0x35,0x01, /* Physical Minimum 1*/\
214 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
215 0x75,0x08, /* Report Size 8*/\
216 0x95,0x01, /* Report Count 1*/\
217 0x91,0x02, /* Output (Variable)*/\
218 0x09,0x25, /* Usage Effect Type*/\
219 0xA1,0x02, /* Collection Datalink*/\
220 0x09, HID_USAGE_CONST, /* Usage ET Constant Force*/\
221 0x09, HID_USAGE_RAMP, /* Usage ET Ramp*/\
222 0x09, HID_USAGE_SQUR, /* Usage ET Square*/\
223 0x09, HID_USAGE_SINE, /* Usage ET Sine*/\
224 0x09, HID_USAGE_TRNG, /* Usage ET Triangle*/\
225 0x09, HID_USAGE_STUP, /* Usage ET Sawtooth Up*/\
226 0x09, HID_USAGE_STDN, /* Usage ET Sawtooth Down*/\
227 0x09, HID_USAGE_SPRNG, /* Usage ET Spring*/\
228 0x09, HID_USAGE_DMPR, /* Usage ET Damper*/\
229 0x09, HID_USAGE_INRT, /* Usage ET Inertia*/\
230 0x09, HID_USAGE_FRIC, /* Usage ET Friction*/\
231 /* 0x09, 0x28, // Usage ET Custom Force Data*/\
232 0x25,0x0B, /* Logical Maximum Bh (11d)*/\
233 0x15,0x01, /* Logical Minimum 1*/\
234 0x35,0x01, /* Physical Minimum 1*/\
235 0x45,0x0B, /* Physical Maximum Bh (11d)*/\
236 0x75,0x08, /* Report Size 8*/\
237 0x95,0x01, /* Report Count 1*/\
238 0x91,0x00, /* Output*/\
239 0xC0 , /* End Collection*/\
240 0x09,0x50, /* Usage Duration*/\
241 0x09,0x54, /* Usage Trigger Repeat Interval*/\
242 0x09,0x51, /* Usage Sample Period*/\
243 0x09,0xA7, /* Usage Start Delay*/\
244 0x15,0x00, /* Logical Minimum 0*/\
245 0x26,0xFF,0x7F, /* Logical Maximum 7FFFh (32767d)*/\
246 0x35,0x00, /* Physical Minimum 0*/\
247 0x46,0xFF,0x7F, /* Physical Maximum 7FFFh (32767d)*/\
248 0x66,0x03,0x10, /* Unit 1003h (4099d)*/\
249 0x55,0xFD, /* Unit Exponent FDh (253d)*/\
250 0x75,0x10, /* Report Size 10h (16d)*/\
251 0x95,0x04, /* Report Count 4*/\
252 0x91,0x02, /* Output (Variable)*/\
253 0x55,0x00, /* Unit Exponent 0*/\
254 0x66,0x00,0x00, /* Unit 0*/\
255 0x09,0x52, /* Usage Gain*/\
256 0x15,0x00, /* Logical Minimum 0*/\
257 0x26,0xFF,0x00, /* Logical Maximum FFh (255d) // TODO scaling?*/\
258 0x35,0x00, /* Physical Minimum 0*/\
259 0x46,0x10,0x27, /* Physical Maximum 2710h (10000d)*/\
260 0x75,0x08, /* Report Size 8*/\
261 0x95,0x01, /* Report Count 1*/\
262 0x91,0x02, /* Output (Variable)*/\
263 0x09,0x53, /* Usage Trigger Button*/\
264 0x15,0x01, /* Logical Minimum 1*/\
265 0x25,0x08, /* Logical Maximum 8*/\
266 0x35,0x01, /* Physical Minimum 1*/\
267 0x45,0x08, /* Physical Maximum 8*/\
268 0x75,0x08, /* Report Size 8*/\
269 0x95,0x01, /* Report Count 1*/\
270 0x91,0x02 // Output (Variable)
271#define HIDDESC_FFB_SETEFREP_SIZE 131
272
273#define HIDDESC_FFB_SETENVREP \
274 /* Envelope Report Definition*/\
275 0x09,0x5A, /* Usage Set Envelope Report*/\
276 0xA1,0x02, /* Collection Datalink*/\
277 0x85,HID_ID_ENVREP+FFB_ID_OFFSET, /* Report ID 2*/\
278 0x09,0x22, /* Usage Effect Block Index*/\
279 0x15,0x01, /* Logical Minimum 1*/\
280 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
281 0x35,0x01, /* Physical Minimum 1*/\
282 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
283 0x75,0x08, /* Report Size 8*/\
284 0x95,0x01, /* Report Count 1*/\
285 0x91,0x02, /* Output (Variable)*/\
286 0x09,0x5B, /* Usage Attack Level*/\
287 0x09,0x5D, /* Usage Fade Level*/\
288 0x16,0x00,0x00, /* Logical Minimum 0*/\
289 0x26,0xFF,0x7F, /* Logical Maximum 7FFFh (32767d)*/\
290 0x36,0x00,0x00, /* Physical Minimum 0*/\
291 0x46,0xFF,0x7F, /* Physical Maximum 7FFFh (32767d)*/\
292 0x75,0x10, /* Report Size 16*/\
293 0x95,0x02, /* Report Count 2*/\
294 0x91,0x02, /* Output (Variable)*/\
295 0x09, 0x5C, /* Usage Attack Time*/\
296 0x09, 0x5E, /* Usage Fade Time*/\
297 0x66, 0x03, 0x10, /* Unit 1003h (English Linear, Seconds)*/\
298 0x55, 0xFD, /* Unit Exponent FDh (X10^-3 ==> Milisecond)*/\
299 0x27, 0xFF, 0x7F, 0x00, 0x00, /* Logical Maximum FFFFFFFFh (4294967295)*/\
300 0x47, 0xFF, 0x7F, 0x00, 0x00, /* Physical Maximum FFFFFFFFh (4294967295)*/\
301 0x75, 0x20, /* Report Size 20h (32d)*/\
302 0x91, 0x02, /* Output (Variable)*/\
303 0x45, 0x00, /* Physical Maximum 0*/\
304 0x66,0x00,0x00, /* Unit 0*/\
305 0x55,0x00, /* Unit Exponent 0*/\
306 0xC0 /* End Collection*/
307#define HIDDESC_FFB_SETENVREP_SIZE 75
308
309// Contains axis dependant parts. not used
310#define HIDDESC_FFB_SETCONDREP \
311 0x09,0x5F, /* Usage Set Condition Report*/\
312 0xA1,0x02, /* Collection Datalink*/\
313 0x85,HID_ID_CONDREP+FFB_ID_OFFSET, /* Report ID 3*/\
314 0x09,0x22, /* Usage Effect Block Index*/\
315 0x15,0x01, /* Logical Minimum 1*/\
316 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
317 0x35,0x01, /* Physical Minimum 1*/\
318 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
319 0x75,0x08, /* Report Size 8*/\
320 0x95,0x01, /* Report Count 1*/\
321 0x91,0x02, /* Output (Variable)*/\
322 0x09,0x23, /* Usage Parameter Block Offset*/\
323 0x15,0x00, /* Logical Minimum 0*/\
324 0x25,0x03, /* Logical Maximum 3*/\
325 0x35,0x00, /* Physical Minimum 0*/\
326 0x45,0x03, /* Physical Maximum 3*/\
327 0x75,0x04, /* Report Size 4*/\
328 0x95,0x01, /* Report Count 1*/\
329 0x91,0x02, /* Output (Variable)*/\
330 0x09,0x58, /* Usage Type Specific Block Off...*/\
331 0xA1,0x02, /* Collection Datalink*/\
332 0x0B,0x01,0x00,0x0A,0x00, /* Usage Ordinals: Instance 1*/\
333 0x0B,0x02,0x00,0x0A,0x00, /* Usage Ordinals: Instance 2*/\
334 0x75,0x02, /* Report Size 2*/\
335 0x95,0x02, /* Report Count 2*/\
336 0x91,0x02, /* Output (Variable)*/\
337 0xC0 , /* End Collection*/\
338 0x16,0x00, 0x80, /* Logical Minimum 7FFFh (-32767d)*/\
339 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
340 0x36,0x00, 0x80, /* Physical Minimum 7FFFh (-32767d)*/\
341 0x46,0xff, 0x7f, /* Physical Maximum 7FFFh (32767d)*/\
342\
343 0x09,0x60, /* Usage CP Offset*/\
344 0x75,0x10, /* Report Size 16*/\
345 0x95,0x01, /* Report Count 1*/\
346 0x91,0x02, /* Output (Variable)*/\
347 0x36,0x00, 0x80, /* Physical Minimum (-32768)*/\
348 0x46,0xff, 0x7f, /* Physical Maximum (32767)*/\
349 0x09,0x61, /* Usage Positive Coefficient*/\
350 0x09,0x62, /* Usage Negative Coefficient*/\
351 0x95,0x02, /* Report Count 2*/\
352 0x91,0x02, /* Output (Variable)*/\
353 0x16,0x00,0x00, /* Logical Minimum 0*/\
354 0x26,0xff, 0x7f, /* Logical Maximum (32767)*/\
355 0x36,0x00,0x00, /* Physical Minimum 0*/\
356 0x46,0xff, 0x7f, /* Physical Maximum (32767)*/\
357 0x09,0x63, /* Usage Positive Saturation*/\
358 0x09,0x64, /* Usage Negative Saturation*/\
359 0x75,0x10, /* Report Size 16*/\
360 0x95,0x02, /* Report Count 2*/\
361 0x91,0x02, /* Output (Variable)*/\
362 0x09,0x65, /* Usage Dead Band*/\
363 0x46,0xff, 0x7f, /* Physical Maximum (32767)*/\
364 0x95,0x01, /* Report Count 1*/\
365 0x91,0x02, /* Output (Variable)*/\
366 0xC0 /* End Collection*/
367#define HIDDESC_FFB_SETCONDREP_SIZE 125
368
369#define HIDDESC_FFB_SETPERIODICREP \
370 0x09,0x6E, /* Usage Set Periodic Report*/\
371 0xA1,0x02, /* Collection Datalink*/\
372 0x85,HID_ID_PRIDREP+FFB_ID_OFFSET, /* Report ID 4*/\
373 0x09,0x22, /* Usage Effect Block Index*/\
374 0x15,0x01, /* Logical Minimum 1*/\
375 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
376 0x35,0x01, /* Physical Minimum 1*/\
377 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
378 0x75,0x08, /* Report Size 8*/\
379 0x95,0x01, /* Report Count 1*/\
380 0x91,0x02, /* Output (Variable)*/\
381 0x09,0x70, /* Usage Magnitude*/\
382 0x16,0x00,0x00, /* Logical Minimum 0*/\
383 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
384 0x36,0x00,0x00, /* Physical Minimum 0*/\
385 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
386 0x75,0x10, /* Report Size 16*/\
387 0x95,0x01, /* Report Count 1*/\
388 0x91,0x02, /* Output (Variable)*/\
389 0x09, 0x6F, /* Usage Offset*/\
390 0x16,0x00, 0x80, /* Logical Minimum 7FFFh (-32767d)*/\
391 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
392 0x36,0x00, 0x80, /* Physical Minimum 7FFFh (-32767d)*/\
393 0x46,0xff, 0x7f, /* Physical Maximum 7FFFh (32767d)*/\
394 0x95, 0x01, /* Report Count 1*/\
395 0x75, 0x10, /* Report Size 16*/\
396 0x91, 0x02, /* Output (Variable)*/\
397 0x09, 0x71, /* Usage Phase*/\
398 0x66, 0x14, 0x00, /* Unit 14h (Eng Rotation, Degrees)*/\
399 0x55, 0xFE, /* Unit Exponent FEh (X10^-2)*/\
400 0x15, 0x00, /* Logical Minimum 0*/\
401 0x27, 0x9F, 0x8C, 0x00, 0x00, /* Logical Maximum 8C9Fh (35999d)*/\
402 0x35, 0x00, /* Physical Minimum 0*/\
403 0x47, 0x9F, 0x8C, 0x00, 0x00, /* Physical Maximum 8C9Fh (35999d)*/\
404 0x75, 0x10, /* Report Size 16*/\
405 0x95, 0x01, /* Report Count 1*/\
406 0x91, 0x02, /* Output (Variable)*/\
407 0x09, 0x72, /* Usage Period*/\
408 0x15, 0x01, /* Logical Minimum 1*/\
409 0x27, 0xFF, 0x7F, 0x00, 0x00, /* Logical Maximum 7FFFh (32K)*/\
410 0x35, 0x01, /* Physical Minimum 1*/\
411 0x47, 0xFF, 0x7F, 0x00, 0x00, /* Physical Maximum 7FFFh (32K)*/\
412 0x66, 0x03, 0x10, /* Unit 1003h (English Linear, Seconds)*/\
413 0x55, 0xFD, /* Unit Exponent FDh (X10^-3 ==> Millisecond)*/\
414 0x75, 0x20, /* Report Size 20h (32)*/\
415 0x95, 0x01, /* Report Count 1*/\
416 0x91, 0x02, /* Output (Variable)*/\
417 0x66, 0x00, 0x00, /* Unit 0*/\
418 0x55,0x00, /* Unit Exponent 0*/\
419 0xC0 /* End Collection*/
420#define HIDDESC_FFB_SETPERIODICREP_SIZE 122
421
422#define HIDDESC_FFB_SETCFREP \
423 0x09,0x73, /* Usage Set Constant Force Report*/\
424 0xA1,0x02, /* Collection Datalink*/\
425 0x85,HID_ID_CONSTREP+FFB_ID_OFFSET, /* Report ID 5*/\
426 0x09,0x22, /* Usage Effect Block Index*/\
427 0x15,0x01, /* Logical Minimum 1*/\
428 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
429 0x35,0x01, /* Physical Minimum 1*/\
430 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
431 0x75,0x08, /* Report Size 8*/\
432 0x95,0x01, /* Report Count 1*/\
433 0x91,0x02, /* Output (Variable)*/\
434 0x09,0x70, /* Usage Magnitude*/\
435 0x16,0x01, 0x80, /* Logical Minimum -7FFFh (-32767d)*/\
436 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
437 0x36,0x01, 0x80, /* Physical Minimum -7FFFh (-32767d)*/\
438 0x46,0xff, 0x7f, /* Physical Maximum 7FFFh (32767d)*/\
439 0x75, 0x10, /* Report Size 10h (16d)*/\
440 0x95,0x01, /* Report Count 1*/\
441 0x91,0x02, /* Output (Variable)*/\
442 0xC0 /* End Collection*/
443#define HIDDESC_FFB_SETCFREP_SIZE 43
444
445#define HIDDESC_FFB_SETRAMPREP \
446 0x09,0x74, /* Usage Set Ramp Force Report*/\
447 0xA1,0x02, /* Collection Datalink*/\
448 0x85,HID_ID_RAMPREP+FFB_ID_OFFSET, /* Report ID 6*/\
449 0x09,0x22, /* Usage Effect Block Index*/\
450 0x15,0x01, /* Logical Minimum 1*/\
451 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
452 0x35,0x01, /* Physical Minimum 1*/\
453 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
454 0x75,0x08, /* Report Size 8*/\
455 0x95,0x01, /* Report Count 1*/\
456 0x91,0x02, /* Output (Variable)*/\
457 0x09,0x75, /* Usage Ramp Start*/\
458 0x09,0x76, /* Usage Ramp End*/\
459 0x16,0x00, 0x80, /* Logical Minimum 7FFFh (-32767d)*/\
460 0x26,0xff, 0x7f, /* Logical Maximum 7FFFh (32767d)*/\
461 0x36,0x00, 0x80, /* Physical Minimum 7FFFh (-32767d)*/\
462 0x46,0xff, 0x7f, /* Physical Maximum 7FFFh (32767d)*/\
463 0x75,0x10, /* Report Size 16*/\
464 0x95,0x02, /* Report Count 2*/\
465 0x91,0x02, /* Output (Variable)*/\
466 0xC0 /* End Collection*/
467#define HIDDESC_FFB_SETRAMPREP_SIZE 45
468// not to be used yet
469#define HIDDESC_FFB_CUSTOMFORCEREP \
470/* 0x09,0x68, // Usage Custom Force Data Report*/\
471/* 0xA1,0x02, // Collection Datalink*/\
472/* 0x85,HID_ID_CSTMREP+FFB_ID_OFFSET, // Report ID 7*/\
473/* 0x09,0x22, // Usage Effect Block Index*/\
474/* 0x15,0x01, // Logical Minimum 1*/\
475/* 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)*/\
476/* 0x35,0x01, // Physical Minimum 1*/\
477/* 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)*/\
478/* 0x75,0x08, // Report Size 8*/\
479/* 0x95,0x01, // Report Count 1*/\
480/* 0x91,0x02, // Output (Variable)*/\
481/* 0x09,0x6C, // Usage Custom Force Data Offset*/\
482/* 0x15,0x00, // Logical Minimum 0*/\
483/* 0x26,0x10,0x27, // Logical Maximum 2710h (10000d)*/\
484/* 0x35,0x00, // Physical Minimum 0*/\
485/* 0x46,0x10,0x27, // Physical Maximum 2710h (10000d)*/\
486/* 0x75,0x10, // Report Size 10h (16d)*/\
487/* 0x95,0x01, // Report Count 1*/\
488/* 0x91,0x02, // Output (Variable)*/\
489/* 0x09,0x69, // Usage Custom Force Data*/\
490/* 0x15,0x81, // Logical Minimum 81h (-127d)*/\
491/* 0x25,0x7F, // Logical Maximum 7Fh (127d)*/\
492/* 0x35,0x00, // Physical Minimum 0*/\
493/* 0x46,0xFF,0x00, // Physical Maximum FFh (255d)*/\
494/* 0x75,0x08, // Report Size 8*/\
495/* 0x95,0x0C, // Report Count Ch (12d)*/\
496/* 0x92,0x02,0x01, // Output (Variable, Buffered)*/\
497/* 0xC0 , // End Collection*/\
498/* 0x09,0x66, // Usage Download Force Sample*/\
499/* 0xA1,0x02, // Collection Datalink*/\
500/* 0x85,HID_ID_SMPLREP+FFB_ID_OFFSET, // Report ID 8*/\
501/* 0x05,0x01, // Usage Page Generic Desktop*/\
502/* 0x09,0x30, // Usage X*/\
503/* 0x09,0x31, // Usage Y*/\
504/* 0x15,0x81, // Logical Minimum 81h (-127d)*/\
505/* 0x25,0x7F, // Logical Maximum 7Fh (127d)*/\
506/* 0x35,0x00, // Physical Minimum 0*/\
507/* 0x46,0xFF,0x00, // Physical Maximum FFh (255d)*/\
508/* 0x75,0x08, // Report Size 8*/\
509/* 0x95,0x02, // Report Count 2*/\
510/* 0x91,0x02, // Output (Variable)*/\
511/* 0xC0 , // End Collection*/
512#define HIDDESC_FFB_EFOPREP \
513 0x05,0x0F, /* Usage Page Physical Interface*/\
514 0x09,0x77, /* Usage Effect Operation Report*/\
515 0xA1,0x02, /* Collection Datalink*/\
516 0x85,HID_ID_EFOPREP+FFB_ID_OFFSET, /* Report ID Ah (10d)*/\
517 0x09,0x22, /* Usage Effect Block Index*/\
518 0x15,0x01, /* Logical Minimum 1*/\
519 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
520 0x35,0x01, /* Physical Minimum 1*/\
521 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
522 0x75,0x08, /* Report Size 8*/\
523 0x95,0x01, /* Report Count 1*/\
524 0x91,0x02, /* Output (Variable)*/\
525 0x09,0x78, /* Usage Effect Operation*/\
526 0xA1,0x02, /* Collection Datalink*/\
527 0x09,0x79, /* Usage Op Effect Start*/\
528 0x09,0x7A, /* Usage Op Effect Start Solo*/\
529 0x09,0x7B, /* Usage Op Effect Stop*/\
530 0x15,0x01, /* Logical Minimum 1*/\
531 0x25,0x03, /* Logical Maximum 3*/\
532 0x75,0x08, /* Report Size 8*/\
533 0x95,0x01, /* Report Count 1*/\
534 0x91,0x00, /* Output*/\
535 0xC0 , /* End Collection*/\
536 0x09,0x7C, /* Usage Loop Count*/\
537 0x15,0x00, /* Logical Minimum 0*/\
538 0x26,0xFF,0x00, /* Logical Maximum FFh (255d)*/\
539 0x35,0x00, /* Physical Minimum 0*/\
540 0x46,0xFF,0x00, /* Physical Maximum FFh (255d)*/\
541 0x91,0x02, /* Output (Variable)*/\
542 0xC0 /* End Collection*/
543#define HIDDESC_FFB_EFOPREP_SIZE 60
544#define HIDDESC_FFB_BLOCKFREEREP \
545 0x09,0x90, /* Usage PID Block Free Report*/\
546 0xA1,0x02, /* Collection Datalink*/\
547 0x85,HID_ID_BLKFRREP+FFB_ID_OFFSET, /* Report ID Bh (11d)*/\
548 0x09,0x22, /* Usage Effect Block Index*/\
549 0x15,0x01, /* Logical Minimum 1*/\
550 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
551 0x35,0x01, /* Physical Minimum 1*/\
552 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
553 0x75,0x08, /* Report Size 8*/\
554 0x95,0x01, /* Report Count 1*/\
555 0x91,0x02, /* Output (Variable)*/\
556 0xC0 /* End Collection*/
557#define HIDDESC_FFB_BLOCKFREEREP_SIZE 23
558#define HIDDESC_FFB_DEVCTRLREP \
559 0x09,0x95, /* Usage PID Device Control (0x96?)*/\
560 0xA1,0x02, /* Collection Datalink*/\
561 0x85,HID_ID_CTRLREP+FFB_ID_OFFSET, /* Report ID Ch (12d)*/\
562 0x09,0x96, /* Usage PID Device Control (0x96?)*/\
563 0xA1,0x02, /* Collection Datalink*/\
564\
565 0x09,0x97, /* Usage DC Enable Actuators*/\
566 0x09,0x98, /* Usage DC Disable Actuators*/\
567 0x09,0x99, /* Usage DC Stop All Effects*/\
568 0x09,0x9A, /* Usage DC Device Reset*/\
569 0x09,0x9B, /* Usage DC Device Pause*/\
570 0x09,0x9C, /* Usage DC Device Continue*/\
571\
572\
573\
574 0x15,0x01, /* Logical Minimum 1*/\
575 0x25,0x06, /* Logical Maximum 6*/\
576 0x75,0x01, /* Report Size 1*/\
577 0x95,0x08, /* Report Count 8*/\
578 0x91,0x02, /* Output*/\
579\
580 0xC0 , /* End Collection*/\
581 0xC0 , /* End Collection*/\
582 0x09,0x7D, /* Usage Device Gain Report*/\
583 0xA1,0x02, /* Collection Datalink*/\
584 0x85,HID_ID_GAINREP+FFB_ID_OFFSET, /* Report ID Dh (13d)*/\
585 0x09,0x7E, /* Usage Device Gain*/\
586 0x15,0x00, /* Logical Minimum 0*/\
587 0x26,0xFF,0x00, /* Logical Maximum FFh (255d)*/\
588 0x35,0x00, /* Physical Minimum 0*/\
589 0x46,0x10,0x27, /* Physical Maximum 2710h (10000d)*/\
590 0x75,0x08, /* Report Size 8*/\
591 0x95,0x01, /* Report Count 1*/\
592 0x91,0x02, /* Output (Variable)*/\
593 0xC0 /* End Collection*/
594#define HIDDESC_FFB_DEVCTRLREP_SIZE 59
595// Do not use yet
596#define HIDDESC_FFB_SETCUSTFORCEREP \
597/* 0x09,0x6B, // Usage Set Custom Force Report*/\
598/* 0xA1,0x02, // Collection Datalink*/\
599/* 0x85,HID_ID_SETCREP+FFB_ID_OFFSET, // Report ID Eh (14d)*/\
600/* 0x09,0x22, // Usage Effect Block Index*/\
601/* 0x15,0x01, // Logical Minimum 1*/\
602/* 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)*/\
603/* 0x35,0x01, // Physical Minimum 1*/\
604/* 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)*/\
605/* 0x75,0x08, // Report Size 8*/\
606/* 0x95,0x01, // Report Count 1*/\
607/* 0x91,0x02, // Output (Variable)*/\
608/* 0x09,0x6D, // Usage Sample Count*/\
609/* 0x15,0x00, // Logical Minimum 0*/\
610/* 0x26,0xFF,0x00, // Logical Maximum FFh (255d)*/\
611/* 0x35,0x00, // Physical Minimum 0*/\
612/* 0x46,0xFF,0x00, // Physical Maximum FFh (255d)*/\
613/* 0x75,0x08, // Report Size 8*/\
614/* 0x95,0x01, // Report Count 1*/\
615/* 0x91,0x02, // Output (Variable)*/\
616/* 0x09,0x51, // Usage Sample Period*/\
617/* 0x66,0x03,0x10, // Unit 1003h (4099d)*/\
618/* 0x55,0xFD, // Unit Exponent FDh (253d)*/\
619/* 0x15,0x00, // Logical Minimum 0*/\
620/* 0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)*/\
621/* 0x35,0x00, // Physical Minimum 0*/\
622/* 0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)*/\
623/* 0x75,0x10, // Report Size 10h (16d)*/\
624/* 0x95,0x01, // Report Count 1*/\
625/* 0x91,0x02, // Output (Variable)*/\
626/* 0x55,0x00, // Unit Exponent 0*/\
627/* 0x66,0x00,0x00, // Unit 0*/\
628/* 0xC0 // End Collection*/
629#define HIDDESC_FFB_NEWEFREP \
630 0x09,0xAB, /* Usage Create New Effect Report*/\
631 0xA1,0x02, /* Collection Datalink*/\
632 0x85,HID_ID_NEWEFREP+FFB_ID_OFFSET, /* Report ID 1*/\
633 0x09,0x25, /* Usage Effect Type*/\
634 0xA1,0x02, /* Collection Datalink*/\
635 0x09, HID_USAGE_CONST, /* Usage ET Constant Force*/\
636 0x09, HID_USAGE_RAMP, /* Usage ET Ramp*/\
637 0x09, HID_USAGE_SQUR, /* Usage ET Square*/\
638 0x09, HID_USAGE_SINE, /* Usage ET Sine*/\
639 0x09, HID_USAGE_TRNG, /* Usage ET Triangle*/\
640 0x09, HID_USAGE_STUP, /* Usage ET Sawtooth Up*/\
641 0x09, HID_USAGE_STDN, /* Usage ET Sawtooth Down*/\
642 0x09, HID_USAGE_SPRNG, /* Usage ET Spring*/\
643 0x09, HID_USAGE_DMPR, /* Usage ET Damper*/\
644 0x09, HID_USAGE_INRT, /* Usage ET Inertia*/\
645 0x09, HID_USAGE_FRIC, /* Usage ET Friction*/\
646/* 0x09, 0x28, // Usage ET Custom Force Data*/\
647 0x25,0x0B, /* Logical Maximum Ch (11d)*/\
648 0x15,0x01, /* Logical Minimum 1*/\
649 0x35,0x01, /* Physical Minimum 1*/\
650 0x45,0x0B, /* Physical Maximum Ch (11d)*/\
651 0x75,0x08, /* Report Size 8*/\
652 0x95,0x01, /* Report Count 1*/\
653 0xB1,0x00, /* Feature*/\
654 0xC0 , /* End Collection*/\
655 0x05,0x01, /* Usage Page Generic Desktop*/\
656 0x09,0x3B, /* Usage Reserved (Byte count)*/\
657 0x15,0x00, /* Logical Minimum 0*/\
658 0x26,0xFF,0x01, /* Logical Maximum 1FFh (511d)*/\
659 0x35,0x00, /* Physical Minimum 0*/\
660 0x46,0xFF,0x01, /* Physical Maximum 1FFh (511d)*/\
661 0x75,0x0A, /* Report Size Ah (10d)*/\
662 0x95,0x01, /* Report Count 1*/\
663 0xB1,0x02, /* Feature (Variable)*/\
664 0x75,0x06, /* Report Size 6*/\
665 0xB1,0x01, /* Feature (Constant)*/\
666 0xC0 /* End Collection*/
667#define HIDDESC_FFB_NEWEFREP_SIZE 72
668
669#define HIDDESC_FFB_BLOCKLOADREP \
670 0x05,0x0F, /* Usage Page Physical Interface*/\
671 0x09,0x89, /* Usage Block Load Report*/\
672 0xA1,0x02, /* Collection Datalink*/\
673 0x85,HID_ID_BLKLDREP+FFB_ID_OFFSET, /* Report ID 0x12*/\
674 0x09,0x22, /* Usage Effect Block Index*/\
675 0x25,MAX_EFFECTS, /* Logical Maximum 28h (40d)*/\
676 0x15,0x01, /* Logical Minimum 1*/\
677 0x35,0x01, /* Physical Minimum 1*/\
678 0x45,MAX_EFFECTS, /* Physical Maximum 28h (40d)*/\
679 0x75,0x08, /* Report Size 8*/\
680 0x95,0x01, /* Report Count 1*/\
681 0xB1,0x02, /* Feature (Variable)*/\
682 0x09,0x8B, /* Usage Block Load Status*/\
683 0xA1,0x02, /* Collection Datalink*/\
684 0x09,0x8C, /* Usage Block Load Success*/\
685 0x09,0x8D, /* Usage Block Load Full*/\
686 0x09,0x8E, /* Usage Block Load Error*/\
687 0x15,0x01, /* Logical Minimum 1*/\
688 0x25,0x03, /* Logical Maximum 3*/\
689 0x35,0x01, /* Physical Minimum 1*/\
690 0x45,0x03, /* Physical Maximum 3*/\
691 0x75,0x08, /* Report Size 8*/\
692 0x95,0x01, /* Report Count 1*/\
693 0xB1,0x00, /* Feature*/\
694 0xC0 , /* End Collection*/\
695 0x09,0xAC, /* Usage Pool available*/\
696 0x15,0x00, /* Logical Minimum 0*/\
697 0x27,0xFF,0xFF,0x00,0x00, /* Logical Maximum FFFFh (65535d)*/\
698 0x35,0x00, /* Physical Minimum 0*/\
699 0x47,0xFF,0xFF,0x00,0x00, /* Physical Maximum FFFFh (65535d)*/\
700 0x75,0x10, /* Report Size 10h (16d)*/\
701 0x95,0x01, /* Report Count 1*/\
702 0xB1,0x00, /* Feature*/\
703 0xC0 // End Collection
704#define HIDDESC_FFB_BLOCKLOADREP_SIZE 72
705
706#define HIDDESC_FFB_POOLREP \
707 0x09,0x7F, /* Usage PID Pool Report*/\
708 0xA1,0x02, /* Collection Datalink*/\
709 0x85,HID_ID_POOLREP+FFB_ID_OFFSET, /* Report ID 0x13*/\
710 0x09,0x80, /* Usage RAM Pool size*/\
711 0x75,0x10, /* Report Size 10h (16d)*/\
712 0x95,0x01, /* Report Count 1*/\
713 0x15,0x00, /* Logical Minimum 0*/\
714 0x35,0x00, /* Physical Minimum 0*/\
715 0x27,0xFF,0xFF,0x00,0x00, /* Logical Maximum FFFFh (65535d)*/\
716 0x47,0xFF,0xFF,0x00,0x00, /* Physical Maximum FFFFh (65535d)*/\
717 0xB1,0x02, /* Feature (Variable)*/\
718 0x09,0x83, /* Usage Simultaneous Effects Max*/\
719 0x26,0xFF,0x00, /* Logical Maximum FFh (255d)*/\
720 0x46,0xFF,0x00, /* Physical Maximum FFh (255d)*/\
721 0x75,0x08, /* Report Size 8*/\
722 0x95,0x01, /* Report Count 1*/\
723 0xB1,0x02, /* Feature (Variable)*/\
724 0x09,0xA9, /* Usage Device Managed Pool*/\
725 0x09,0xAA, /* Usage Shared Parameter Blocks*/\
726 0x75,0x01, /* Report Size 1*/\
727 0x95,0x02, /* Report Count 2*/\
728 0x15,0x00, /* Logical Minimum 0*/\
729 0x25,0x01, /* Logical Maximum 1*/\
730 0x35,0x00, /* Physical Minimum 0*/\
731 0x45,0x01, /* Physical Maximum 1*/\
732 0xB1,0x02, /* Feature (Variable)*/\
733 0x75,0x06, /* Report Size 6*/\
734 0x95,0x01, /* Report Count 1*/\
735 0xB1,0x03, /* Feature (Constant, Variable)*/\
736 0xC0 // End Collection
737#define HIDDESC_FFB_POOLREP_SIZE 67
738
739#define HIDDESC_FFB_DESCSIZE HIDDESC_FFB_STATEREP_SIZE + HIDDESC_FFB_POOLREP_SIZE + HIDDESC_FFB_BLOCKLOADREP_SIZE + HIDDESC_FFB_NEWEFREP_SIZE + HIDDESC_FFB_DEVCTRLREP_SIZE + HIDDESC_FFB_BLOCKFREEREP_SIZE + HIDDESC_FFB_EFOPREP_SIZE + HIDDESC_FFB_SETEFREP_SIZE + HIDDESC_FFB_SETRAMPREP_SIZE + HIDDESC_FFB_SETCFREP_SIZE + HIDDESC_FFB_SETPERIODICREP_SIZE + HIDDESC_FFB_SETENVREP_SIZE
740
741
742
743#ifdef AXIS2_FFB_HID_DESC
744#define USB_HID_2FFB_REPORT_DESC_SIZE HIDDESC_GAMEPAD_16B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + HIDDESC_FFB_DESCSIZE + 7 + 108 + 125
745extern const uint8_t hid_2ffb_desc[USB_HID_2FFB_REPORT_DESC_SIZE];
746#endif
747#ifdef AXIS2_FFB_HID_DESC_32B
748#define USB_HID_2FFB_REPORT_DESC_32B_SIZE HIDDESC_GAMEPAD_32B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + HIDDESC_FFB_DESCSIZE + 7 + 108 + 125
749extern const uint8_t hid_2ffb_desc_32b[USB_HID_2FFB_REPORT_DESC_32B_SIZE];
750#endif
751
752#ifdef AXIS1_FFB_HID_DESC
753#define USB_HID_1FFB_REPORT_DESC_SIZE HIDDESC_GAMEPAD_16B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + HIDDESC_FFB_DESCSIZE + 7 + 94 + 120
754extern const uint8_t hid_1ffb_desc[USB_HID_1FFB_REPORT_DESC_SIZE];
755#endif
756#ifdef AXIS1_FFB_HID_DESC_32B
757#define USB_HID_1FFB_REPORT_DESC_SIZE HIDDESC_GAMEPAD_32B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + HIDDESC_FFB_DESCSIZE + 7 + 94 + 120
758extern const uint8_t hid_1ffb_desc_32b[USB_HID_1FFB_REPORT_DESC_32B_SIZE];
759#endif
760
761
762#ifdef FFB_HID_DESC_GAMEPAD
763#define USB_HID_GAMEPAD_REPORT_DESC_SIZE HIDDESC_GAMEPAD_16B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + 7
764extern const uint8_t hid_gamepad_desc[USB_HID_GAMEPAD_REPORT_DESC_SIZE];
765#endif
766#ifdef FFB_HID_DESC_GAMEPAD_32B
767#define USB_HID_GAMEPAD_REPORT_DESC_32B_SIZE HIDDESC_GAMEPAD_32B_SIZE + HIDDESC_CTRL_REPORTS_SIZE + 7
768extern const uint8_t hid_gamepad_desc_32b[USB_HID_GAMEPAD_REPORT_DESC_32B_SIZE];
769#endif
770
771#ifdef HIDAXISRES_USE_32B_DESC
772
773#endif
774
776#endif /* USB_INC_USB_HID_FFB_DESC_H_ */
const uint8_t hid_2ffb_desc_32b[USB_HID_2FFB_REPORT_DESC_32B_SIZE]
const uint8_t hid_1ffb_desc[USB_HID_1FFB_REPORT_DESC_SIZE]
const uint8_t hid_1ffb_desc_32b[USB_HID_1FFB_REPORT_DESC_32B_SIZE]
const uint8_t hid_2ffb_desc[USB_HID_2FFB_REPORT_DESC_SIZE]
const uint8_t hid_gamepad_desc_32b[USB_HID_GAMEPAD_REPORT_DESC_32B_SIZE]
const uint8_t hid_gamepad_desc[USB_HID_GAMEPAD_REPORT_DESC_SIZE]