devreorder
devreorder copied to clipboard
Distinguishing between 2 gamepads that are exactly the same.
First off, the world needs a solution like this to tell Windows which controllers are which no matter what random order you connect them to your machine, and no matter how many gamepads connected all at the same time (in my case, over 16 controllers). So thank you for making this, I would love to see this further developed.
Is there a way to have the dinput8.dll component be able to read the devreorder.ini to look for another unique ID of sorts for each controller connected to a machine (via cable or BT, doesn't matter)? In my example, I have 2 SNES30 8BitDo gamepads. When you use DeviceLister.exe, it reports the GUID's to be exactly the same. This is because they both are listed in control panel as "Wireless Controller" (pair mode + A) or "Xbox Bluetooth Gamepad" (pair mode + X), etc. And each of those "virtual" listings in Windows is considered the same GUID for both hardware controllers.
To show the problem easiest as in this example, please see the attached screenshot
.
That's very unfortunate that Windows gives both controllers the same GUID. The GUID is supposed to be unique for every physical controller connected to your system, and the fact that it's not in this case just goes to show how broken Windows can be when it comes to game controllers. I'm not sure if Windows provides another method anyone can use to consistently distinguish between them.
Does disconnecting and reconnecting just one of the controllers, possibly using a different pairing method, change their GUID?
Unfortunately it does not change it. I thought I discovered a small glimmer of hope when I found out about testing 2 pads on at the same time. This gives each of them a unique GUID (see screenshot). But the problem is still the same as Windows is treating a GUID like an "assignable slot" with a "first come first serve" approach, which is a poor way of handling it and is not the static assignment approach we need. I will demonstrate in the next post...
.
As you can see, with 4 gamepads connected (all 4 same 'Start + A' mode) (2 NES and 2 SNES), 2 additional GUID slots present themselves. So which controller was connected first to be the top GUID? Which controller was connected 3rd to be the 3rd GUID? This maybe isn't a problem if all 4 gamepads had all the exact same buttons for mapping in an app. Something like BizHawk would just do them as J1, J2, J3, J4, and all button mappings the exact same. But when these controllers have different buttons and mappings, the app will have no idea how to handle that. And it will expect whichever one is J1 to have the same buttons it always had when originally mapped, which wouldn't be the case if you turned them all on in a random order
.
I'm afraid I'm confused. Are you saying that Windows will assign the same specific GUID to whichever controller is connected first, regardless of which physical controller it is?
When you connect one of these controllers, will its GUID be different from the last time it was connected?
That is exactly what I'm saying, yes! It will use the same specific GUID to whichever controller is first. "Slots" and "first come first serve". Physical does not matter, which is why I was hoping there is something else besides just the GUID, like a hardware ID somewhere, that can be pulled.
Here is another look from control panel. All of them install under the label "Wireless Controller", which Windows is too dumb to distinguish which is which. These are 2 NES, 2 SNES, and 2 Sega controllers.