mirror of
https://github.com/encounter/SDL.git
synced 2025-12-14 23:56:19 +00:00
Generalized the raw input controller driver and moved XInput/WGI detection into it for XInput devices
This fixes bad report parsing for various newer Xbox controllers, and this driver is now preferred over XInput, since it handles more than 4 controllers.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,9 @@
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
/* Return true if the RawInput driver is enabled */
|
||||
extern SDL_bool RAWINPUT_IsEnabled();
|
||||
|
||||
/* Return true if a RawInput device is present and supported as a joystick */
|
||||
extern SDL_bool RAWINPUT_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version);
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "SDL_events.h"
|
||||
#include "../SDL_sysjoystick.h"
|
||||
#include "../hidapi/SDL_hidapijoystick_c.h"
|
||||
#include "SDL_rawinputjoystick_c.h"
|
||||
|
||||
#include "../../core/windows/SDL_windows.h"
|
||||
#define COBJMACROS
|
||||
@@ -247,6 +248,12 @@ static HRESULT STDMETHODCALLTYPE IEventHandler_CRawGameControllerVtbl_InvokeAdde
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SDL_JOYSTICK_RAWINPUT
|
||||
if (!ignore_joystick && RAWINPUT_IsDevicePresent(vendor, product, version)) {
|
||||
ignore_joystick = SDL_TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!ignore_joystick && SDL_DINPUT_JoystickPresent(vendor, product, version)) {
|
||||
ignore_joystick = SDL_TRUE;
|
||||
}
|
||||
|
||||
@@ -65,6 +65,11 @@ SDL_XINPUT_JoystickInit(void)
|
||||
{
|
||||
s_bXInputEnabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE);
|
||||
|
||||
if (RAWINPUT_IsEnabled()) {
|
||||
/* The raw input driver handles more than 4 controllers, so prefer that when available */
|
||||
s_bXInputEnabled = SDL_FALSE;
|
||||
}
|
||||
|
||||
if (s_bXInputEnabled && WIN_LoadXInputDLL() < 0) {
|
||||
s_bXInputEnabled = SDL_FALSE; /* oh well. */
|
||||
}
|
||||
@@ -208,7 +213,7 @@ GuessXInputDevice(Uint8 userid, Uint16 *pVID, Uint16 *pPID, Uint16 *pVersion)
|
||||
}
|
||||
}
|
||||
SDL_free(devices);
|
||||
#endif /* ifndef __WINRT__ */
|
||||
#endif /* !__WINRT__ */
|
||||
|
||||
/* The device wasn't in the raw HID device list, it's probably Bluetooth */
|
||||
*pVID = 0x045e; /* Microsoft */
|
||||
|
||||
Reference in New Issue
Block a user