[PATCH] dinput : use vendor and product ids to generate product GUID like it's done on Windows

Corentin Rossignon corossig at gmail.com
Thu Jul 21 17:08:20 CDT 2016


Signed-off-by: Corentin Rossignon <corossig at gmail.com>
---
 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




More information about the wine-patches mailing list