|
@@ -443,7 +443,7 @@ HIDAPI_GetDeviceDriver(SDL_HIDAPI_Device *device)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- if (device->vendor_id != USB_VENDOR_VALVE) {
|
|
|
+ if (device->vendor_id != USB_VENDOR_VALVE) {
|
|
|
if (device->usage_page && device->usage_page != USAGE_PAGE_GENERIC_DESKTOP) {
|
|
|
return NULL;
|
|
|
}
|
|
@@ -587,7 +587,7 @@ HIDAPI_JoystickInit(void)
|
|
|
}
|
|
|
|
|
|
#if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__)
|
|
|
- /* The hidapi framwork is weak-linked on Apple platforms */
|
|
|
+ /* The hidapi framwork is weak-linked on Apple platforms */
|
|
|
int HID_API_EXPORT HID_API_CALL hid_init(void) __attribute__((weak_import));
|
|
|
|
|
|
if (hid_init == NULL) {
|
|
@@ -897,16 +897,23 @@ HIDAPI_IsEquivalentToDevice(Uint16 vendor_id, Uint16 product_id, SDL_HIDAPI_Devi
|
|
|
|
|
|
if (vendor_id == USB_VENDOR_MICROSOFT) {
|
|
|
/* If we're looking for the wireless XBox 360 controller, also look for the dongle */
|
|
|
- if (product_id == 0x02a1 && device->product_id == 0x0719) {
|
|
|
- return SDL_TRUE;
|
|
|
- }
|
|
|
-
|
|
|
- /* If we're looking for the raw input Xbox One controller, match it against any other Xbox One controller */
|
|
|
- if (vendor_id == USB_VENDOR_MICROSOFT &&
|
|
|
- product_id == USB_PRODUCT_XBOX_ONE_RAW_INPUT_CONTROLLER &&
|
|
|
- SDL_GetJoystickGameControllerType(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol) == SDL_CONTROLLER_TYPE_XBOXONE) {
|
|
|
- return SDL_TRUE;
|
|
|
- }
|
|
|
+ if (product_id == 0x02a1 && device->product_id == 0x0719) {
|
|
|
+ return SDL_TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* If we're looking for the raw input Xbox One controller, match it against any other Xbox One controller */
|
|
|
+ if (product_id == USB_PRODUCT_XBOX_ONE_RAW_INPUT_CONTROLLER &&
|
|
|
+ SDL_GetJoystickGameControllerType(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol) == SDL_CONTROLLER_TYPE_XBOXONE) {
|
|
|
+ return SDL_TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* If we're looking for an XInput controller, match it against any other Xbox controller */
|
|
|
+ if (product_id == USB_PRODUCT_XBOX_ONE_XINPUT_CONTROLLER) {
|
|
|
+ SDL_GameControllerType type = SDL_GetJoystickGameControllerType(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol);
|
|
|
+ if (type == SDL_CONTROLLER_TYPE_XBOX360 || type == SDL_CONTROLLER_TYPE_XBOXONE) {
|
|
|
+ return SDL_TRUE;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return SDL_FALSE;
|
|
|
}
|