From d7d5d92e591112165662235bb67fe9e7fd10415b Mon Sep 17 00:00:00 2001 From: Joel Linn Date: Tue, 21 Apr 2020 02:07:17 +0200 Subject: [PATCH] [HID] Fix any poll on XInput. --- src/xenia/hid/xinput/xinput_input_driver.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/xenia/hid/xinput/xinput_input_driver.cc b/src/xenia/hid/xinput/xinput_input_driver.cc index 02c35ad14..830daa0e4 100644 --- a/src/xenia/hid/xinput/xinput_input_driver.cc +++ b/src/xenia/hid/xinput/xinput_input_driver.cc @@ -149,12 +149,16 @@ X_RESULT XInputInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags, // https://stackoverflow.com/questions/23669238/xinputgetkeystroke-returning-error-success-while-controller-is-unplugged // // So we first check if the device is connected via XInputGetCapabilities, so - // we are not passing back an uninitialized X_INPUT_KEYSTROKE structure: - XINPUT_CAPABILITIES caps; - auto xigc = (decltype(&XInputGetCapabilities))XInputGetCapabilities_; - result = xigc(user_index, 0, &caps); - if (result) { - return result; + // we are not passing back an uninitialized X_INPUT_KEYSTROKE structure. + // If any user (0xFF) is polled this bug does not occur but GetCapabilities + // would fail so we need to skip it. + if (user_index != 0xFF) { + XINPUT_CAPABILITIES caps; + auto xigc = (decltype(&XInputGetCapabilities))XInputGetCapabilities_; + result = xigc(user_index, 0, &caps); + if (result) { + return result; + } } XINPUT_KEYSTROKE native_keystroke;