Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
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 HIDDESC_GAMEPAD_16B,
20
21 HIDDESC_CTRL_REPORTS, // HID command report support
22
23
24 HIDDESC_FFB_STATEREP,
25
26 HIDDESC_FFB_SETEFREP,
27
28 0x09,0x55, // Usage Axes Enable TODO multi axis
29 0xA1,0x02, // Collection Datalink
30 0x05,0x01, // Usage Page Generic Desktop
31 0x09,0x30, // Usage X
32 //0x09,0x31, // Usage Y
33 0x15,0x00, // Logical Minimum 0
34 0x25,0x00, // Logical Maximum 0
35 0x75,0x01, // Report Size 1
36 0x95,0x01, // Report Count 1
37 0x91,0x02, // Output (Variable)
38 0xC0 , // End Collection
39 0x05,0x0F, // Usage Page Physical Interface
40 0x09,0x56, // Usage Direction Enable
41 0x95,0x01, // Report Count 1
42 0x91,0x02, // Output (Variable)
43 0x95,0x06, // Report Count 6
44 0x91,0x03, // Output (Constant, Variable)
45
46 0x09,0x57, // Usage Direction
47 0xA1,0x02, // Collection Datalink
48 0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
49// 0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
50 0x66,0x14,0x00, // Unit 14h (20d)
51// 0x55,0xFE, // Unit Exponent FEh (254d)
52// 0x15,0x00, // Logical Minimum 0
53// 0x26,0xFF,0x00, // Logical Maximum FFh (255d)
54 0x15,0x00, // Logical Minimum 0
55 0x27,0xA0,0x8C,0x00,0x00, // Logical Maximum 8CA0h (36000d)
56 0x35,0x00, // Physical Minimum 0
57 0x47,0xA0,0x8C,0x00,0x00, // Physical Maximum 8CA0h (36000d)
58 0x66,0x00,0x00, // Unit 0
59 0x75,0x10, // Report Size 16
60 0x95,0x01, // Report Count 1
61 0x91,0x02, // Output (Variable)
62 0x55,0x00, // Unit Exponent 0
63 0x66,0x00,0x00, // Unit 0
64 0xC0, // End Collection
65
66 0x05, 0x0F, // USAGE_PAGE (Physical Interface)
67 0x09, 0x58, // USAGE (Type Specific Block Offset)
68 0xA1, 0x02, // COLLECTION (Logical)
69 0x0B, 0x01, 0x00, 0x0A, 0x00, //USAGE (Ordinals:Instance 1
70 //0x0B, 0x02, 0x00, 0x0A, 0x00, //USAGE (Ordinals:Instance 2)
71 0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max.
72 0x75, 0x10, // REPORT_SIZE (16)
73 0x95, 0x01, // REPORT_COUNT (1)
74 0x91, 0x02, // OUTPUT (Data,Var,Abs)
75 0xC0, // END_COLLECTION
76 0xC0, // END_COLLECTION
77
78 HIDDESC_FFB_SETENVREP,
79
80 0x09,0x5F, // Usage Set Condition Report
81 0xA1,0x02, // Collection Datalink
82 0x85,HID_ID_CONDREP+FFB_ID_OFFSET, // Report ID 3
83 0x09,0x22, // Usage Effect Block Index
84 0x15,0x01, // Logical Minimum 1
85 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)
86 0x35,0x01, // Physical Minimum 1
87 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)
88 0x75,0x08, // Report Size 8
89 0x95,0x01, // Report Count 1
90 0x91,0x02, // Output (Variable)
91 0x09,0x23, // Usage Parameter Block Offset
92 0x15,0x00, // Logical Minimum 0
93 0x25,0x03, // Logical Maximum 3
94 0x35,0x00, // Physical Minimum 0
95 0x45,0x03, // Physical Maximum 3
96 0x75,0x06, // Report Size 6
97 0x95,0x01, // Report Count 1
98 0x91,0x02, // Output (Variable)
99 0x09,0x58, // Usage Type Specific Block Off...
100 0xA1,0x02, // Collection Datalink
101 0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
102// 0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
103 0x75,0x02, // Report Size 2
104 0x95,0x01, // Report Count 1
105 0x91,0x02, // Output (Variable)
106 0xC0 , // End Collection
107 0x16,0x00, 0x80, // Logical Minimum 7FFFh (-32767d)
108 0x26,0xff, 0x7f, // Logical Maximum 7FFFh (32767d)
109 0x36,0x00, 0x80, // Physical Minimum 7FFFh (-32767d)
110 0x46,0xff, 0x7f, // Physical Maximum 7FFFh (32767d)
111
112 0x09,0x60, // Usage CP Offset
113 0x75,0x10, // Report Size 16
114 0x95,0x01, // Report Count 1
115 0x91,0x02, // Output (Variable)
116 0x36,0x00, 0x80, // Physical Minimum (-32768)
117 0x46,0xff, 0x7f, // Physical Maximum (32767)
118 0x09,0x61, // Usage Positive Coefficient
119 0x09,0x62, // Usage Negative Coefficient
120 0x95,0x02, // Report Count 2
121 0x91,0x02, // Output (Variable)
122 0x16,0x00,0x00, // Logical Minimum 0
123 0x26,0xff, 0x7f, // Logical Maximum (32767)
124 0x36,0x00,0x00, // Physical Minimum 0
125 0x46,0xff, 0x7f, // Physical Maximum (32767)
126 0x09,0x63, // Usage Positive Saturation
127 0x09,0x64, // Usage Negative Saturation
128 0x75,0x10, // Report Size 16
129 0x95,0x02, // Report Count 2
130 0x91,0x02, // Output (Variable)
131 0x09,0x65, // Usage Dead Band
132 0x46,0xff, 0x7f, // Physical Maximum (32767)
133 0x95,0x01, // Report Count 1
134 0x91,0x02, // Output (Variable)
135 0xC0 , // End Collection
136
137 HIDDESC_FFB_SETPERIODICREP,
138
139 HIDDESC_FFB_SETCFREP,
140
141 HIDDESC_FFB_SETRAMPREP,
142
143
144// 0x09,0x68, // Usage Custom Force Data Report
145// 0xA1,0x02, // Collection Datalink
146// 0x85,HID_ID_CSTMREP+FFB_ID_OFFSET, // Report ID 7
147// 0x09,0x22, // Usage Effect Block Index
148// 0x15,0x01, // Logical Minimum 1
149// 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)
150// 0x35,0x01, // Physical Minimum 1
151// 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)
152// 0x75,0x08, // Report Size 8
153// 0x95,0x01, // Report Count 1
154// 0x91,0x02, // Output (Variable)
155// 0x09,0x6C, // Usage Custom Force Data Offset
156// 0x15,0x00, // Logical Minimum 0
157// 0x26,0x10,0x27, // Logical Maximum 2710h (10000d)
158// 0x35,0x00, // Physical Minimum 0
159// 0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
160// 0x75,0x10, // Report Size 10h (16d)
161// 0x95,0x01, // Report Count 1
162// 0x91,0x02, // Output (Variable)
163// 0x09,0x69, // Usage Custom Force Data
164// 0x15,0x81, // Logical Minimum 81h (-127d)
165// 0x25,0x7F, // Logical Maximum 7Fh (127d)
166// 0x35,0x00, // Physical Minimum 0
167// 0x46,0xFF,0x00, // Physical Maximum FFh (255d)
168// 0x75,0x08, // Report Size 8
169// 0x95,0x0C, // Report Count Ch (12d)
170// 0x92,0x02,0x01, // Output (Variable, Buffered)
171// 0xC0 , // End Collection
172// 0x09,0x66, // Usage Download Force Sample
173// 0xA1,0x02, // Collection Datalink
174// 0x85,HID_ID_SMPLREP+FFB_ID_OFFSET, // Report ID 8
175// 0x05,0x01, // Usage Page Generic Desktop
176// 0x09,0x30, // Usage X
177// 0x09,0x31, // Usage Y
178// 0x15,0x81, // Logical Minimum 81h (-127d)
179// 0x25,0x7F, // Logical Maximum 7Fh (127d)
180// 0x35,0x00, // Physical Minimum 0
181// 0x46,0xFF,0x00, // Physical Maximum FFh (255d)
182// 0x75,0x08, // Report Size 8
183// 0x95,0x02, // Report Count 2
184// 0x91,0x02, // Output (Variable)
185// 0xC0 , // End Collection
186
187 HIDDESC_FFB_EFOPREP,
188 HIDDESC_FFB_BLOCKFREEREP,
189
190 HIDDESC_FFB_DEVCTRLREP,
191// 0x09,0x6B, // Usage Set Custom Force Report
192// 0xA1,0x02, // Collection Datalink
193// 0x85,HID_ID_SETCREP+FFB_ID_OFFSET, // Report ID Eh (14d)
194// 0x09,0x22, // Usage Effect Block Index
195// 0x15,0x01, // Logical Minimum 1
196// 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)
197// 0x35,0x01, // Physical Minimum 1
198// 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)
199// 0x75,0x08, // Report Size 8
200// 0x95,0x01, // Report Count 1
201// 0x91,0x02, // Output (Variable)
202// 0x09,0x6D, // Usage Sample Count
203// 0x15,0x00, // Logical Minimum 0
204// 0x26,0xFF,0x00, // Logical Maximum FFh (255d)
205// 0x35,0x00, // Physical Minimum 0
206// 0x46,0xFF,0x00, // Physical Maximum FFh (255d)
207// 0x75,0x08, // Report Size 8
208// 0x95,0x01, // Report Count 1
209// 0x91,0x02, // Output (Variable)
210// 0x09,0x51, // Usage Sample Period
211// 0x66,0x03,0x10, // Unit 1003h (4099d)
212// 0x55,0xFD, // Unit Exponent FDh (253d)
213// 0x15,0x00, // Logical Minimum 0
214// 0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
215// 0x35,0x00, // Physical Minimum 0
216// 0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
217// 0x75,0x10, // Report Size 10h (16d)
218// 0x95,0x01, // Report Count 1
219// 0x91,0x02, // Output (Variable)
220// 0x55,0x00, // Unit Exponent 0
221// 0x66,0x00,0x00, // Unit 0
222// 0xC0 , // End Collection
223 HIDDESC_FFB_NEWEFREP,
224 HIDDESC_FFB_BLOCKLOADREP,
225
226 HIDDESC_FFB_POOLREP,
227
228 0xC0 /* END_COLLECTION */
229};
230#endif
231
232#ifdef AXIS1_FFB_HID_DESC_32B
233__ALIGN_BEGIN const uint8_t hid_1ffb_desc_32b[USB_HID_1FFB_REPORT_DESC_32B_SIZE] __ALIGN_END =
234{
235 0x05, 0x01, /* USAGE_PAGE (Generic Desktop)*/
236 0x09, 0x04, /* USAGE (Joystick)*/
237 0xa1, 0x01, /* COLLECTION (Application)*/
238 HIDDESC_GAMEPAD_32B,
239
240 HIDDESC_CTRL_REPORTS, // HID command report support
241
242 HIDDESC_FFB_STATEREP,
243 /*
244 Output
245 Collection Datalink:
246 Usage Set Effect Report
247
248 ID:1
249 Effect Block Index: 8bit
250
251 subcollection Effect Type
252 12 effect types, 8bit each
253
254 */
255 HIDDESC_FFB_SETEFREP,
256
257 0x09,0x55, // Usage Axes Enable TODO multi axis
258 0xA1,0x02, // Collection Datalink
259 0x05,0x01, // Usage Page Generic Desktop
260 0x09,0x30, // Usage X
261 //0x09,0x31, // Usage Y
262 0x15,0x00, // Logical Minimum 0
263 0x25,0x00, // Logical Maximum 0
264 0x75,0x01, // Report Size 1
265 0x95,0x01, // Report Count 1
266 0x91,0x02, // Output (Variable)
267 0xC0 , // End Collection
268 0x05,0x0F, // Usage Page Physical Interface
269 0x09,0x56, // Usage Direction Enable
270 0x95,0x01, // Report Count 1
271 0x91,0x02, // Output (Variable)
272 0x95,0x06, // Report Count 6
273 0x91,0x03, // Output (Constant, Variable)
274
275 0x09,0x57, // Usage Direction
276 0xA1,0x02, // Collection Datalink
277 0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
278// 0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
279 0x66,0x14,0x00, // Unit 14h (20d)
280// 0x55,0xFE, // Unit Exponent FEh (254d)
281// 0x15,0x00, // Logical Minimum 0
282// 0x26,0xFF,0x00, // Logical Maximum FFh (255d)
283 0x15,0x00, // Logical Minimum 0
284 0x27,0xA0,0x8C,0x00,0x00, // Logical Maximum 8CA0h (36000d)
285 0x35,0x00, // Physical Minimum 0
286 0x47,0xA0,0x8C,0x00,0x00, // Physical Maximum 8CA0h (36000d)
287 0x66,0x00,0x00, // Unit 0
288 0x75,0x10, // Report Size 16
289 0x95,0x01, // Report Count 1
290 0x91,0x02, // Output (Variable)
291 0x55,0x00, // Unit Exponent 0
292 0x66,0x00,0x00, // Unit 0
293 0xC0, // End Collection
294
295 0x05, 0x0F, // USAGE_PAGE (Physical Interface)
296 0x09, 0x58, // USAGE (Type Specific Block Offset)
297 0xA1, 0x02, // COLLECTION (Logical)
298 0x0B, 0x01, 0x00, 0x0A, 0x00, //USAGE (Ordinals:Instance 1
299 //0x0B, 0x02, 0x00, 0x0A, 0x00, //USAGE (Ordinals:Instance 2)
300 0x26, 0xFD, 0x7F, // LOGICAL_MAXIMUM (32765) ; 32K RAM or ROM max.
301 0x75, 0x10, // REPORT_SIZE (16)
302 0x95, 0x01, // REPORT_COUNT (1)
303 0x91, 0x02, // OUTPUT (Data,Var,Abs)
304 0xC0, // END_COLLECTION
305 0xC0, // END_COLLECTION
306
307 HIDDESC_FFB_SETENVREP,
308
309 0x09,0x5F, // Usage Set Condition Report
310 0xA1,0x02, // Collection Datalink
311 0x85,HID_ID_CONDREP+FFB_ID_OFFSET, // Report ID 3
312 0x09,0x22, // Usage Effect Block Index
313 0x15,0x01, // Logical Minimum 1
314 0x25,MAX_EFFECTS, // Logical Maximum 28h (40d)
315 0x35,0x01, // Physical Minimum 1
316 0x45,MAX_EFFECTS, // Physical Maximum 28h (40d)
317 0x75,0x08, // Report Size 8
318 0x95,0x01, // Report Count 1
319 0x91,0x02, // Output (Variable)
320 0x09,0x23, // Usage Parameter Block Offset
321 0x15,0x00, // Logical Minimum 0
322 0x25,0x03, // Logical Maximum 3
323 0x35,0x00, // Physical Minimum 0
324 0x45,0x03, // Physical Maximum 3
325 0x75,0x06, // Report Size 6
326 0x95,0x01, // Report Count 1
327 0x91,0x02, // Output (Variable)
328 0x09,0x58, // Usage Type Specific Block Off...
329 0xA1,0x02, // Collection Datalink
330 0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
331// 0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
332 0x75,0x02, // Report Size 2
333 0x95,0x01, // Report Count 1
334 0x91,0x02, // Output (Variable)
335 0xC0 , // End Collection
336 0x16,0x00, 0x80, // Logical Minimum 7FFFh (-32767d)
337 0x26,0xff, 0x7f, // Logical Maximum 7FFFh (32767d)
338 0x36,0x00, 0x80, // Physical Minimum 7FFFh (-32767d)
339 0x46,0xff, 0x7f, // Physical Maximum 7FFFh (32767d)
340
341 0x09,0x60, // Usage CP Offset
342 0x75,0x10, // Report Size 16
343 0x95,0x01, // Report Count 1
344 0x91,0x02, // Output (Variable)
345 0x36,0x00, 0x80, // Physical Minimum (-32768)
346 0x46,0xff, 0x7f, // Physical Maximum (32767)
347 0x09,0x61, // Usage Positive Coefficient
348 0x09,0x62, // Usage Negative Coefficient
349 0x95,0x02, // Report Count 2
350 0x91,0x02, // Output (Variable)
351 0x16,0x00,0x00, // Logical Minimum 0
352 0x26,0xff, 0x7f, // Logical Maximum (32767)
353 0x36,0x00,0x00, // Physical Minimum 0
354 0x46,0xff, 0x7f, // Physical Maximum (32767)
355 0x09,0x63, // Usage Positive Saturation
356 0x09,0x64, // Usage Negative Saturation
357 0x75,0x10, // Report Size 16
358 0x95,0x02, // Report Count 2
359 0x91,0x02, // Output (Variable)
360 0x09,0x65, // Usage Dead Band
361 0x46,0xff, 0x7f, // Physical Maximum (32767)
362 0x95,0x01, // Report Count 1
363 0x91,0x02, // Output (Variable)
364 0xC0 , // End Collection
365
366 HIDDESC_FFB_SETPERIODICREP,
367
368 HIDDESC_FFB_SETCFREP,
369
370 HIDDESC_FFB_SETRAMPREP,
371
372 HIDDESC_FFB_EFOPREP,
373
374 HIDDESC_FFB_BLOCKFREEREP,
375
376 HIDDESC_FFB_DEVCTRLREP,
377
378 HIDDESC_FFB_NEWEFREP,
379
380 HIDDESC_FFB_BLOCKLOADREP,
381
382 HIDDESC_FFB_POOLREP,
383
384 0xC0 /* END_COLLECTION */
385};
386#endif
387
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]
__ALIGN_BEGIN const uint8_t hid_1ffb_desc[USB_HID_1FFB_REPORT_DESC_SIZE] __ALIGN_END