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