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