Rémi Bernon : xinput1_3: Store HIDP_CAPS in hid_platform_private struct.
Alexandre Julliard
julliard at winehq.org
Mon Jun 7 16:30:37 CDT 2021
Module: wine
Branch: master
Commit: 11a25dec95793187cc3464e76abdf870483350d1
URL: https://source.winehq.org/git/wine.git/?a=commit;h=11a25dec95793187cc3464e76abdf870483350d1
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Mon Jun 7 19:37:56 2021 +0200
xinput1_3: Store HIDP_CAPS in hid_platform_private struct.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/xinput1_3/hid.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/dlls/xinput1_3/hid.c b/dlls/xinput1_3/hid.c
index 87127267c78..01ce3875e8a 100644
--- a/dlls/xinput1_3/hid.c
+++ b/dlls/xinput1_3/hid.c
@@ -57,6 +57,8 @@ struct axis_info
struct hid_platform_private {
PHIDP_PREPARSED_DATA ppd;
+ HIDP_CAPS caps;
+
HANDLE device;
WCHAR *device_path;
BOOL enabled;
@@ -85,7 +87,7 @@ static void MarkUsage(struct hid_platform_private *private, WORD usage, LONG min
}
}
-static BOOL VerifyGamepad(PHIDP_PREPARSED_DATA ppd, XINPUT_CAPABILITIES *xinput_caps, struct hid_platform_private *private, HIDP_CAPS *caps)
+static BOOL VerifyGamepad(PHIDP_PREPARSED_DATA ppd, XINPUT_CAPABILITIES *xinput_caps, struct hid_platform_private *private)
{
HIDP_BUTTON_CAPS *button_caps;
HIDP_VALUE_CAPS *value_caps;
@@ -93,17 +95,14 @@ static BOOL VerifyGamepad(PHIDP_PREPARSED_DATA ppd, XINPUT_CAPABILITIES *xinput_
int i;
int button_count = 0;
- USHORT button_caps_count = 0;
- USHORT value_caps_count = 0;
/* Count buttons */
memset(xinput_caps, 0, sizeof(XINPUT_CAPABILITIES));
- button_caps_count = caps->NumberInputButtonCaps;
- if (!(button_caps = malloc(sizeof(*button_caps) * button_caps_count))) return FALSE;
- status = HidP_GetButtonCaps(HidP_Input, button_caps, &button_caps_count, ppd);
+ if (!(button_caps = malloc(sizeof(*button_caps) * private->caps.NumberInputButtonCaps))) return FALSE;
+ status = HidP_GetButtonCaps(HidP_Input, button_caps, &private->caps.NumberInputButtonCaps, ppd);
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_GetButtonCaps returned %#x\n", status);
- else for (i = 0; i < button_caps_count; i++)
+ else for (i = 0; i < private->caps.NumberInputButtonCaps; i++)
{
if (button_caps[i].UsagePage != HID_USAGE_PAGE_BUTTON)
continue;
@@ -117,11 +116,10 @@ static BOOL VerifyGamepad(PHIDP_PREPARSED_DATA ppd, XINPUT_CAPABILITIES *xinput_
WARN("Too few buttons, continuing anyway\n");
xinput_caps->Gamepad.wButtons = 0xffff;
- value_caps_count = caps->NumberInputValueCaps;
- if (!(value_caps = malloc(sizeof(*value_caps) * value_caps_count))) return FALSE;
- status = HidP_GetValueCaps(HidP_Input, value_caps, &value_caps_count, ppd);
+ if (!(value_caps = malloc(sizeof(*value_caps) * private->caps.NumberInputValueCaps))) return FALSE;
+ status = HidP_GetValueCaps(HidP_Input, value_caps, &private->caps.NumberInputValueCaps, ppd);
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_GetValueCaps returned %#x\n", status);
- else for (i = 0; i < value_caps_count; i++)
+ else for (i = 0; i < private->caps.NumberInputValueCaps; i++)
{
if (value_caps[i].UsagePage != HID_USAGE_PAGE_GENERIC)
continue;
@@ -164,8 +162,7 @@ static BOOL VerifyGamepad(PHIDP_PREPARSED_DATA ppd, XINPUT_CAPABILITIES *xinput_
xinput_caps->Type = XINPUT_DEVTYPE_GAMEPAD;
xinput_caps->SubType = XINPUT_DEVSUBTYPE_GAMEPAD;
- value_caps_count = caps->NumberOutputValueCaps;
- if (value_caps_count > 0)
+ if (private->caps.NumberOutputValueCaps > 0)
{
xinput_caps->Flags |= XINPUT_CAPS_FFB_SUPPORTED;
xinput_caps->Vibration.wLeftMotorSpeed = 255;
@@ -181,7 +178,8 @@ static BOOL init_controller(xinput_controller *controller, PHIDP_PREPARSED_DATA
struct hid_platform_private *private;
if (!(private = calloc(1, sizeof(struct hid_platform_private)))) return FALSE;
- if (!VerifyGamepad(ppd, &controller->caps, private, caps)) goto failed;
+ private->caps = *caps;
+ if (!VerifyGamepad(ppd, &controller->caps, private)) goto failed;
TRACE("Found gamepad %s\n", debugstr_w(device_path));
More information about the wine-cvs
mailing list