Open FFBoard
Open source force feedback firmware
usb_hid_gamepad.c
Go to the documentation of this file.
1/*
2 * usb_hid_gamepad.c
3 *
4 * Created on: 30.11.2022
5 * Author: Yannick
6 */
7
8#include "cppmain.h"
9#include "ffb_defs.h"
10#include "usb_hid_ffb_desc.h"
11
12#ifdef FFB_HID_DESC_GAMEPAD
13
17__ALIGN_BEGIN const uint8_t hid_gamepad_desc[USB_HID_GAMEPAD_REPORT_DESC_SIZE] __ALIGN_END =
18{
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_X, // USAGE (X)
34 0x09, HID_USAGE_Y, // USAGE (Y)
35 0x09, HID_USAGE_Z, // USAGE (Z)
36 0x09, HID_USAGE_RX, // USAGE (Rx)
37 0x09, HID_USAGE_RY, // USAGE (Ry)
38 0x09, HID_USAGE_RZ, // USAGE (Rz)
39 0x09, HID_USAGE_SL1, // USAGE (Dial)
40 0x09, HID_USAGE_SL0, // USAGE (Slider)
41 0x16, 0x01, 0x80, // LOGICAL_MINIMUM (-32767)
42 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)
43 0x75, 0x10, // REPORT_SIZE (16)
44 0x95, 0x08, // REPORT_COUNT (8)
45 0x81, 0x02, // INPUT (Data,Var,Abs)
46 0xc0, // END_COLLECTION
47
48
49 // Control reports
50 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor)
51 0x09, 0x00, // USAGE (Vendor)
52 0xA1, 0x01, // Collection (Application)
53
54 0x85,HID_ID_HIDCMD, // Report ID
55 0x09, 0x01, // USAGE (Vendor)
56 0x15, 0x00, // LOGICAL_MINIMUM (0)
57 0x26, 0x04, 0x00, // Logical Maximum 4
58 0x75, 0x08, // REPORT_SIZE (8)
59 0x95, 0x01, // REPORT_COUNT (1)
60 0x91, 0x02, // OUTPUT (Data,Var,Abs)
61
62 0x09, 0x02, // USAGE (Vendor) class address
63 0x75, 0x10, // REPORT_SIZE (16)
64 0x95, 0x01, // REPORT_COUNT (1)
65 0x91, 0x02, // OUTPUT (Data,Var,Abs)
66
67 0x09, 0x03, // USAGE (Vendor) class instance
68 0x75, 0x08, // REPORT_SIZE (8)
69 0x95, 0x01, // REPORT_COUNT (1)
70 0x91, 0x02, // OUTPUT (Data,Var,Abs)
71
72 0x09, 0x04, // USAGE (Vendor) cmd
73 0x75, 0x20, // REPORT_SIZE (32)
74 0x95, 0x01, // REPORT_COUNT (1)
75 0x91, 0x02, // OUTPUT (Data,Var,Abs)
76
77 0x09, 0x05, // USAGE (Vendor)
78 0x75, 0x40, // REPORT_SIZE (64) value
79 0x95, 0x01, // REPORT_COUNT (1)
80 0x91, 0x02, // OUTPUT (Data,Var,Abs)
81
82 0x09, 0x06, // USAGE (Vendor) address
83 0x75, 0x40, // REPORT_SIZE (64)
84 0x95, 0x01, // REPORT_COUNT (1)
85 0x91, 0x02, // OUTPUT (Data,Var,Abs)
86
87 0x85,HID_ID_HIDCMD, // 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) class address
96 0x75, 0x10, // REPORT_SIZE (16)
97 0x95, 0x01, // REPORT_COUNT (1)
98 0x81, 0x02, // INPUT (Data,Var,Abs)
99
100 0x09, 0x03, // USAGE (Vendor) class instance
101 0x75, 0x08, // REPORT_SIZE (8)
102 0x95, 0x01, // REPORT_COUNT (1)
103 0x81, 0x02, // INPUT (Data,Var,Abs)
104
105 0x09, 0x04, // USAGE (Vendor) cmd
106 0x75, 0x20, // REPORT_SIZE (32)
107 0x95, 0x01, // REPORT_COUNT (1)
108 0x81, 0x02, // INPUT (Data,Var,Abs)
109
110 0x09, 0x05, // USAGE (Vendor)
111 0x75, 0x40, // REPORT_SIZE (64) value
112 0x95, 0x01, // REPORT_COUNT (1)
113 0x81, 0x02, // INPUT (Data,Var,Abs)
114
115 0x09, 0x06, // USAGE (Vendor) address
116 0x75, 0x40, // REPORT_SIZE (64)
117 0x95, 0x01, // REPORT_COUNT (1)
118 0x81, 0x02, // INPUT (Data,Var,Abs)
119
120
121
122 0xc0, // END_COLLECTION
123
124
125 0xC0 /* END_COLLECTION */
126};
127
128#endif
const uint8_t hid_gamepad_desc[USB_HID_GAMEPAD_REPORT_DESC_SIZE]
__ALIGN_BEGIN const uint8_t hid_gamepad_desc[USB_HID_GAMEPAD_REPORT_DESC_SIZE] __ALIGN_END