[PATCH 2/6] dinput: Fix HID joystick DIPH_BYUSAGE object enumeration.

Rémi Bernon rbernon at codeweavers.com
Tue Sep 21 02:52:45 CDT 2021


This adds some todo_wine because we now get the correct object, but it
has incorrect offset and instance number.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/dinput/joystick_hid.c |  3 ++-
 dlls/dinput8/tests/hid.c   | 12 +++---------
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c
index a9ca6fe6cc6..fb0d769d85f 100644
--- a/dlls/dinput/joystick_hid.c
+++ b/dlls/dinput/joystick_hid.c
@@ -209,7 +209,8 @@ static BOOL enum_object( struct hid_joystick *impl, const DIPROPHEADER *filter,
         if ((filter->dwObj & 0x00ffffff) != (instance->dwType & 0x00ffffff)) return DIENUM_CONTINUE;
         return callback( impl, caps, instance, data );
     case DIPH_BYUSAGE:
-        if (LOWORD(filter->dwObj) != instance->wUsagePage || HIWORD(filter->dwObj) != instance->wUsage) return DIENUM_CONTINUE;
+        if (HIWORD( filter->dwObj ) != instance->wUsagePage) return DIENUM_CONTINUE;
+        if (LOWORD( filter->dwObj ) != instance->wUsage) return DIENUM_CONTINUE;
         return callback( impl, caps, instance, data );
     default:
         FIXME( "unimplemented filter dwHow %#x dwObj %#x\n", filter->dwHow, filter->dwObj );
diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c
index e5e1bfde79d..1afb2916d4d 100644
--- a/dlls/dinput8/tests/hid.c
+++ b/dlls/dinput8/tests/hid.c
@@ -3919,9 +3919,7 @@ static void test_simple_joystick(void)
     prop_range.lMax = 0xdeadbeef;
     hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph );
     ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_RANGE returned %#x\n", hr );
-    todo_wine
     ok( prop_range.lMin == 0, "got %d expected %d\n", prop_range.lMin, 0 );
-    todo_wine
     ok( prop_range.lMax == 65535, "got %d expected %d\n", prop_range.lMax, 65535 );
 
     prop_pointer.diph.dwHow = DIPH_BYUSAGE;
@@ -3962,9 +3960,10 @@ static void test_simple_joystick(void)
     ok( hr == DI_OK, "IDirectInputDevice8_GetObjectInfo returned: %#x\n", hr );
 
     check_member( objinst, expect_objects[1], "%u", dwSize );
-    todo_wine
     check_member_guid( objinst, expect_objects[1], guidType );
+    todo_wine
     check_member( objinst, expect_objects[1], "%#x", dwOfs );
+    todo_wine
     check_member( objinst, expect_objects[1], "%#x", dwType );
     check_member( objinst, expect_objects[1], "%#x", dwFlags );
     if (!localized) todo_wine check_member_wstr( objinst, expect_objects[1], tszName );
@@ -3974,7 +3973,6 @@ static void test_simple_joystick(void)
     check_member( objinst, expect_objects[1], "%u", wCollectionNumber );
     check_member( objinst, expect_objects[1], "%u", wDesignatorIndex );
     check_member( objinst, expect_objects[1], "%#04x", wUsagePage );
-    todo_wine
     check_member( objinst, expect_objects[1], "%#04x", wUsage );
     check_member( objinst, expect_objects[1], "%#04x", dwDimension );
     check_member( objinst, expect_objects[1], "%#04x", wExponent );
@@ -4310,9 +4308,7 @@ static void test_simple_joystick(void)
     prop_range.lMax = 0xdeadbeef;
     hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph );
     ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_RANGE returned %#x\n", hr );
-    todo_wine
     ok( prop_range.lMin == -14000, "got %d expected %d\n", prop_range.lMin, -14000 );
-    todo_wine
     ok( prop_range.lMax == -4000, "got %d expected %d\n", prop_range.lMax, -4000 );
     prop_range.diph.dwHow = DIPH_BYUSAGE;
     prop_range.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_Y, HID_USAGE_PAGE_GENERIC );
@@ -4320,9 +4316,7 @@ static void test_simple_joystick(void)
     prop_range.lMax = 0xdeadbeef;
     hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph );
     ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_RANGE returned %#x\n", hr );
-    todo_wine
     ok( prop_range.lMin == 1000, "got %d expected %d\n", prop_range.lMin, 1000 );
-    todo_wine
     ok( prop_range.lMax == 51000, "got %d expected %d\n", prop_range.lMax, 51000 );
 
     hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2), &state );
@@ -4478,7 +4472,7 @@ static void test_simple_joystick(void)
         if (broken( state.lX == -10750 )) win_skip( "Ignoring 32-bit rounding\n" );
         else
         {
-            todo_wine
+            todo_wine_if( i != 2 )
             check_member( state, expect_state_abs[i], "%d", lX );
             todo_wine_if( i != 2 )
             check_member( state, expect_state_abs[i], "%d", lY );
-- 
2.33.0




More information about the wine-devel mailing list