Vitaliy Margolen : dinput: Implement getting DIPROP_VIDPID property for evdev joystick driver. Fixes bug 26418.
Alexandre Julliard
julliard at winehq.org
Thu Apr 14 11:58:21 CDT 2011
Module: wine
Branch: master
Commit: 20aa3410326073ba825c8c43c757e61556e4fe9f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=20aa3410326073ba825c8c43c757e61556e4fe9f
Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date: Thu Apr 14 08:08:01 2011 -0600
dinput: Implement getting DIPROP_VIDPID property for evdev joystick driver. Fixes bug 26418.
---
dlls/dinput/joystick_linuxinput.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index 9b0c52c..c11edc7 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -110,6 +110,8 @@ struct JoyDev {
/* data returned by the EVIOCGABS() ioctl */
struct wine_input_absinfo axes[ABS_MAX];
+
+ WORD vendor_id, product_id;
};
struct JoystickImpl
@@ -187,6 +189,7 @@ static void find_joydevs(void)
int no_ff_check = 0;
int j;
struct JoyDev *new_joydevs;
+ struct input_id device_id = {0};
snprintf(buf, sizeof(buf), EVDEVPREFIX"%d", i);
@@ -282,6 +285,14 @@ static void find_joydevs(void)
}
}
+ if (ioctl(fd, EVIOCGID, &device_id) == -1)
+ WARN("ioct(EVIOCGBIT, EV_ABS) failed: %d %s\n", errno, strerror(errno));
+ else
+ {
+ joydev.vendor_id = device_id.vendor;
+ joydev.product_id = device_id.product;
+ }
+
if (!have_joydevs)
new_joydevs = HeapAlloc(GetProcessHeap(), 0, sizeof(struct JoyDev));
else
@@ -946,6 +957,17 @@ static HRESULT WINAPI JoystickWImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface, REF
break;
}
+ case (DWORD_PTR) DIPROP_VIDPID:
+ {
+ LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph;
+
+ if (!This->joydev->product_id || !This->joydev->vendor_id)
+ return DIERR_UNSUPPORTED;
+ pd->dwData = MAKELONG(This->joydev->vendor_id, This->joydev->product_id);
+ TRACE("DIPROP_VIDPID(%08x)\n", pd->dwData);
+ break;
+ }
+
default:
return JoystickWGenericImpl_GetProperty(iface, rguid, pdiph);
}
More information about the wine-cvs
mailing list