mirror of
https://github.com/xenia-project/xenia.git
synced 2025-12-06 07:12:03 +01:00
[HID] Report passthrough as keyboard type and subtype device.
- Added enums for: X_INPUT_DEVTYPE and X_INPUT_DEVSUBTYPE - Fixed issue with xinput failure with keyboard flag received
This commit is contained in:
parent
2e521383c2
commit
a6e3d77504
|
|
@ -34,6 +34,16 @@ enum X_INPUT_FLAG {
|
||||||
X_INPUT_FLAG_ANY_USER = 1 << 30
|
X_INPUT_FLAG_ANY_USER = 1 << 30
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum X_INPUT_DEVTYPE {
|
||||||
|
XINPUT_DEVTYPE_GAMEPAD = 0x00000001,
|
||||||
|
XINPUT_DEVTYPE_KEYBOARD = 0x00000002,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum X_INPUT_DEVSUBTYPE {
|
||||||
|
XINPUT_DEVSUBTYPE_USB_KEYBOARD = 0x00000000,
|
||||||
|
XINPUT_DEVSUBTYPE_GAMEPAD = 0x00000001,
|
||||||
|
};
|
||||||
|
|
||||||
enum X_INPUT_GAMEPAD_BUTTON {
|
enum X_INPUT_GAMEPAD_BUTTON {
|
||||||
X_INPUT_GAMEPAD_DPAD_UP = 0x0001,
|
X_INPUT_GAMEPAD_DPAD_UP = 0x0001,
|
||||||
X_INPUT_GAMEPAD_DPAD_DOWN = 0x0002,
|
X_INPUT_GAMEPAD_DPAD_DOWN = 0x0002,
|
||||||
|
|
|
||||||
|
|
@ -132,9 +132,14 @@ X_RESULT WinKeyInputDriver::GetCapabilities(uint32_t user_index, uint32_t flags,
|
||||||
return X_ERROR_DEVICE_NOT_CONNECTED;
|
return X_ERROR_DEVICE_NOT_CONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(benvanik): confirm with a real XInput controller.
|
if (IsPassthroughEnabled()) {
|
||||||
out_caps->type = 0x01; // XINPUT_DEVTYPE_GAMEPAD
|
out_caps->type = X_INPUT_DEVTYPE::XINPUT_DEVTYPE_KEYBOARD;
|
||||||
out_caps->sub_type = 0x01; // XINPUT_DEVSUBTYPE_GAMEPAD
|
out_caps->sub_type = X_INPUT_DEVSUBTYPE::XINPUT_DEVSUBTYPE_USB_KEYBOARD;
|
||||||
|
return X_ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
out_caps->type = X_INPUT_DEVTYPE::XINPUT_DEVTYPE_GAMEPAD;
|
||||||
|
out_caps->sub_type = X_INPUT_DEVSUBTYPE::XINPUT_DEVSUBTYPE_GAMEPAD;
|
||||||
out_caps->flags = 0;
|
out_caps->flags = 0;
|
||||||
out_caps->gamepad.buttons = 0xFFFF;
|
out_caps->gamepad.buttons = 0xFFFF;
|
||||||
out_caps->gamepad.left_trigger = 0xFF;
|
out_caps->gamepad.left_trigger = 0xFF;
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,9 @@ X_RESULT XInputInputDriver::GetCapabilities(uint32_t user_index, uint32_t flags,
|
||||||
}
|
}
|
||||||
XINPUT_CAPABILITIES native_caps;
|
XINPUT_CAPABILITIES native_caps;
|
||||||
auto xigc = (decltype(&XInputGetCapabilities))XInputGetCapabilities_;
|
auto xigc = (decltype(&XInputGetCapabilities))XInputGetCapabilities_;
|
||||||
DWORD result = xigc(user_index, flags, &native_caps);
|
DWORD result =
|
||||||
|
xigc(user_index, flags & ~X_INPUT_DEVTYPE::XINPUT_DEVTYPE_KEYBOARD,
|
||||||
|
&native_caps);
|
||||||
if (result) {
|
if (result) {
|
||||||
if (result == ERROR_DEVICE_NOT_CONNECTED) {
|
if (result == ERROR_DEVICE_NOT_CONNECTED) {
|
||||||
set_skip(user_index);
|
set_skip(user_index);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue