Different game controllers with the same GUID


#1

Hello,
I wanted to know what’s the official word on different game controllers having the same GUID.
For example, I have 2 controllers that I like, that report the exact same GUID, but the mappings of the right stick are different.
They can’t have different mappings because of the GUID, so I can’t have both working at the same time.
Is there any workaround?
Is there any official position on that issue?


#2

Nothing? No answer??


#3

Well, continuing my monologue, the two devices have the same GUID, same vendor/product id, but they’re not exactly the same. One is from Dragonrise, the other is actually from Microntek.

Bus 002 Device 012: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0079 DragonRise Inc.
idProduct 0x0006 PC TWIN SHOCK Gamepad
bcdDevice 1.07
iManufacturer 1 DragonRise Inc.
iProduct 2 Generic USB Joystick
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 33 US
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 101
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Device Status: 0x0000
(Bus Powered)

Bus 002 Device 013: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0079 DragonRise Inc.
idProduct 0x0006 PC TWIN SHOCK Gamepad
bcdDevice 1.07
iManufacturer 1 Microntek
iProduct 2 USB Joystick
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 33 US
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 107
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Device Status: 0x0000
(Bus Powered)

Any way to tell them apart in SDL2 and have different profiles?


#4

I don’t think so.
Can the operating system tell them apart (in device manager or controller settings on windows, or dmesg when plugged in on linux)?
Probably both devices have the same kind of electronics in them and the vendor didn’t even bother to set unique names or IDs or anything.
See also https://github.com/gabomdq/SDL_GameControllerDB/issues/86 which has a similar problem, also with devices identifying as something from DragonRise


#5

Hello, thanks for answering.
I’m using Linux.
Besides having the same productid / vendorid, and the same GUID on SDL, there are a few differences in my “lsusb -v” output.


#6

I didn’t compare those two long outputs line-by-line, of first sight they looked the same…
I guess it might help if you pointed out the differences to start a discussion about which of those could be exposed in SDL and in what way…


#7

Those are the differences (with the help of diff):

 iManufacturer 1 DragonRise Inc.
 iProduct 2 Generic USB Joystick
 wDescriptorLength 101

 iManufacturer 1 Microntek
 iProduct 2 USB Joystick
 wDescriptorLength 107

#8

I have reported it here:
https://bugzilla.libsdl.org/show_bug.cgi?id=4545
Let’s see what happens.