Fixed bug 3533 - Enumeration joystick devices omitted during directinput enumeration
white.magic The logic which decides if a device enumerated via the direct input system in the function EnumJoysticksCallback in SDL_dinputjoystick.c is processed is discarding valid joystick devices due to the assumption that devices of the type DI8DEVTYPE_SUPPLEMENTAL are not valid devices. This change was added with 2.0.4 with this commit http://hg.libsdl.org/SDL/rev/1b9d40126645 that is linked to this bug report https://bugzilla.libsdl.org/show_bug.cgi?id=2460 which indicates that in that case devices of the type DI8DEVTYPE_SUPPLEMENTAL were not desirable as they caused a singular device to emit multiple "device added" events. Since then there appear to have been a few fixes to handle devices that fall into various other classes in the following two commits: http://hg.libsdl.org/SDL/rev/10ffb4787d7a and http://hg.libsdl.org/SDL/rev/6a2bbac05728 Two devices I have reports of failing to be listed when the DI8DEVTYPE_SUPPLEMENTAL type is excluded are ECS Gametric Throttle and Thrustmaster MFD Cougar. Sam Lantinga I verified that the OUYA controller shows up as a single device with this change, so I've reverted the change to ignore supplemental devices, leaving framework in place to easily add devices that we want to ignore.
parent
dd007e3fe7
commit
b0c5ceef7d
|
@ -356,7 +356,20 @@ EnumJoysticksCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext)
|
||||||
Uint16 *guid16;
|
Uint16 *guid16;
|
||||||
|
|
||||||
if (devtype == DI8DEVTYPE_SUPPLEMENTAL) {
|
if (devtype == DI8DEVTYPE_SUPPLEMENTAL) {
|
||||||
return DIENUM_CONTINUE; /* Ignore touchpads, etc. */
|
/* Add any supplemental devices that should be ignored here */
|
||||||
|
#define MAKE_TABLE_ENTRY(VID, PID) ((((DWORD)PID)<<16)|VID)
|
||||||
|
static DWORD ignored_devices[] = {
|
||||||
|
MAKE_TABLE_ENTRY(0, 0)
|
||||||
|
};
|
||||||
|
#undef MAKE_TABLE_ENTRY
|
||||||
|
unsigned int i;
|
||||||
|
SDL_bool should_ignore = SDL_FALSE;
|
||||||
|
|
||||||
|
for (i = 0; i < SDL_arraysize(ignored_devices); ++i) {
|
||||||
|
if (pdidInstance->guidProduct.Data1 == ignored_devices[i]) {
|
||||||
|
return DIENUM_CONTINUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_IsXInputDevice(&pdidInstance->guidProduct)) {
|
if (SDL_IsXInputDevice(&pdidInstance->guidProduct)) {
|
||||||
|
|
Loading…
Reference in New Issue