From: Corentin Rossignon Subject: [PATCH] dinput : use vendor and product ids to generate product GUID like it's done on Windows Message-Id: <20160721220314.24200-1-corossig@gmail.com> Date: Thu, 21 Jul 2016 23:03:14 +0100 Signed-off-by: Corentin Rossignon --- dlls/dinput/joystick_linuxinput.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index 86f12d0..e5172b6 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -321,13 +321,19 @@ static void find_joydevs(void) static void fill_joystick_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version, int id) { DWORD dwSize = lpddi->dwSize; + // Data1 is concatenation of productid and vendorid, Data4 seems constant + GUID product_guid = { ((joydevs[id].product_id)<<16)+joydevs[id].vendor_id, + 0x0000, + 0x0000, + {0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44} }; + TRACE("%d %p\n", dwSize, lpddi); memset(lpddi, 0, dwSize); lpddi->dwSize = dwSize; lpddi->guidInstance = joydevs[id].guid; - lpddi->guidProduct = DInput_Wine_Joystick_Base_GUID; + lpddi->guidProduct = product_guid; lpddi->guidFFDriver = GUID_NULL; if (version >= 0x0800) @@ -342,13 +348,19 @@ static void fill_joystick_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD ver static void fill_joystick_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD version, int id) { DWORD dwSize = lpddi->dwSize; + // Data1 is concatenation of productid and vendorid, Data4 seems constant + GUID product_guid = { ((joydevs[id].product_id)<<16)+joydevs[id].vendor_id, + 0x0000, + 0x0000, + {0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44} }; + TRACE("%d %p\n", dwSize, lpddi); memset(lpddi, 0, dwSize); lpddi->dwSize = dwSize; lpddi->guidInstance = joydevs[id].guid; - lpddi->guidProduct = DInput_Wine_Joystick_Base_GUID; + lpddi->guidProduct = product_guid; lpddi->guidFFDriver = GUID_NULL; if (version >= 0x0800) -- 2.9.0