Vitaliy Margolen : dinput: Implement getting DIPROP_VIDPID property for evdev joystick driver. Fixes bug 26418.
Module: wine Branch: master Commit: 20aa3410326073ba825c8c43c757e61556e4fe9f URL: http://source.winehq.org/git/wine.git/?a=commit;h=20aa3410326073ba825c8c43c7... Author: Vitaliy Margolen <wine-patches(a)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); }
participants (1)
-
Alexandre Julliard