|
@@ -255,17 +255,16 @@ public class HIDDeviceManager {
|
|
|
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) {
|
|
|
return true;
|
|
|
}
|
|
|
- if (interface_number == 0) {
|
|
|
- if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
+ if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
|
|
|
+ return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) {
|
|
|
final int XB360_IFACE_SUBCLASS = 93;
|
|
|
- final int XB360_IFACE_PROTOCOL = 1; // Wired only
|
|
|
+ final int XB360_IFACE_PROTOCOL = 1; // Wired
|
|
|
+ final int XB360W_IFACE_PROTOCOL = 129; // Wireless
|
|
|
final int[] SUPPORTED_VENDORS = {
|
|
|
0x0079, // GPD Win 2
|
|
|
0x044f, // Thrustmaster
|
|
@@ -290,10 +289,10 @@ public class HIDDeviceManager {
|
|
|
0x24c6, // PowerA
|
|
|
};
|
|
|
|
|
|
- if (usbInterface.getId() == 0 &&
|
|
|
- usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
|
|
|
+ if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
|
|
|
usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS &&
|
|
|
- usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL) {
|
|
|
+ (usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL ||
|
|
|
+ usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) {
|
|
|
int vendor_id = usbDevice.getVendorId();
|
|
|
for (int supportedVid : SUPPORTED_VENDORS) {
|
|
|
if (vendor_id == supportedVid) {
|