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