@@ -155,11 +155,52 @@ static uint8_t *GetDescHIDReport(int *len) {
155
155
return __hid_report;
156
156
}
157
157
158
+ #define TUD_HID_REPORT_DESC_GAMEPAD16 (...) \
159
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
160
+ HID_USAGE ( HID_USAGE_DESKTOP_GAMEPAD ) ,\
161
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
162
+ /* Report ID if any */ \
163
+ __VA_ARGS__ \
164
+ /* 16 bit X, Y, Z, Rz, Rx, Ry (min -32767, max 32767 ) */ \
165
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
166
+ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
167
+ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
168
+ HID_USAGE ( HID_USAGE_DESKTOP_Z ) ,\
169
+ HID_USAGE ( HID_USAGE_DESKTOP_RZ ) ,\
170
+ HID_USAGE ( HID_USAGE_DESKTOP_RX ) ,\
171
+ HID_USAGE ( HID_USAGE_DESKTOP_RY ) ,\
172
+ HID_LOGICAL_MIN_N ( -32767 , 2 ) ,\
173
+ HID_LOGICAL_MAX_N ( 32767 , 2 ) ,\
174
+ HID_REPORT_COUNT ( 6 ) ,\
175
+ HID_REPORT_SIZE ( 16 ) ,\
176
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
177
+ /* 8 bit DPad/Hat Button Map */ \
178
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
179
+ HID_USAGE ( HID_USAGE_DESKTOP_HAT_SWITCH ) ,\
180
+ HID_LOGICAL_MIN ( 1 ) ,\
181
+ HID_LOGICAL_MAX ( 8 ) ,\
182
+ HID_PHYSICAL_MIN ( 0 ) ,\
183
+ HID_PHYSICAL_MAX_N ( 315 , 2 ) ,\
184
+ HID_REPORT_COUNT ( 1 ) ,\
185
+ HID_REPORT_SIZE ( 8 ) ,\
186
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
187
+ /* 32 bit Button Map */ \
188
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
189
+ HID_USAGE_MIN ( 1 ) ,\
190
+ HID_USAGE_MAX ( 32 ) ,\
191
+ HID_LOGICAL_MIN ( 0 ) ,\
192
+ HID_LOGICAL_MAX ( 1 ) ,\
193
+ HID_REPORT_COUNT ( 32 ) ,\
194
+ HID_REPORT_SIZE ( 1 ) ,\
195
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
196
+ HID_COLLECTION_END \
197
+
198
+
158
199
void __SetupDescHIDReport() {
159
200
// allocate memory for the HID report descriptors. We don't use them, but need the size here.
160
201
uint8_t desc_hid_report_mouse[] = { TUD_HID_REPORT_DESC_MOUSE (HID_REPORT_ID (1 )) };
161
202
uint8_t desc_hid_report_absmouse[] = { TUD_HID_REPORT_DESC_ABSMOUSE (HID_REPORT_ID (1 )) };
162
- uint8_t desc_hid_report_joystick[] = { TUD_HID_REPORT_DESC_GAMEPAD (HID_REPORT_ID (1 )) };
203
+ uint8_t desc_hid_report_joystick[] = { TUD_HID_REPORT_DESC_GAMEPAD16 (HID_REPORT_ID (1 )) };
163
204
uint8_t desc_hid_report_keyboard[] = { TUD_HID_REPORT_DESC_KEYBOARD (HID_REPORT_ID (1 )), TUD_HID_REPORT_DESC_CONSUMER (HID_REPORT_ID (2 )) };
164
205
int size = 0 ;
165
206
@@ -229,7 +270,7 @@ void __SetupDescHIDReport() {
229
270
reportid++;
230
271
offset += sizeof (desc_hid_report_absmouse);
231
272
}
232
- uint8_t desc_local[] = { TUD_HID_REPORT_DESC_GAMEPAD (HID_REPORT_ID (reportid)) };
273
+ uint8_t desc_local[] = { TUD_HID_REPORT_DESC_GAMEPAD16 (HID_REPORT_ID (reportid)) };
233
274
memcpy (__hid_report + offset, desc_local, sizeof (desc_local));
234
275
}
235
276
}
0 commit comments