Commit Graph

220 Commits

Author SHA1 Message Date
Ivo Ivanov b793fb5457 dinput: Add support for DIPROP_(PHYSICAL|LOGICAL)RANGE properties.
Fixes apps like WheelCheck, which rely on some of these properties
(DIPROP_PHYSICALRANGE) to correctly calculate the top center of the
wheel against their permitted range.

In particular the constant force test now works just like in Windows,
directing the wheel to the upper center and resisting any movement to
the left or right. Before that it would pull the steering wheel hard to
the left.

Signed-off-by: Ivo Ivanov <logos128@gmail.com>
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:12:00 +01:00
Rémi Bernon e8d961b5c7 dinput: Stub support for the DIPROP_CALIBRATIONMODE property.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:11:57 +01:00
Rémi Bernon 0c9cac9547 dinput: Move GetProperty implementation for objects to generic device.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:11:55 +01:00
Rémi Bernon 801bc147f0 dinput: Factor (Get|Set)Property checks together.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:11:50 +01:00
Rémi Bernon dee684fbca dinput8/tests: Add some more (Get|Set)Property tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:11:39 +01:00
Rémi Bernon 45986545f8 dinput: Write PID device gain reports when necessary.
Based on a patch from Ivo Ivanov <logos128@gmail.com>.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-17 15:26:09 +01:00
Rémi Bernon e7217a3287 dinput: Stub support for the DIPROP_FFGAIN property.
Based on a patch from Ivo Ivanov <logos128@gmail.com>.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-17 15:25:33 +01:00
Rémi Bernon 3f110402f6 dinput8/tests: Add some HID device gain report tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-17 15:25:29 +01:00
Rémi Bernon 2608a5caa6 dinput: Handle device types and flags directly in EnumDevices.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:09:07 +01:00
Rémi Bernon 28364159b8 dinput: Implement IDirectInput_EnumDevices with IDirectInput8_EnumDevices.
Instead of the other way around.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:08:54 +01:00
Rémi Bernon e14254ee2b dinput8/tests: Add some IDirectInput(8)_EnumDevices tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:08:48 +01:00
Rémi Bernon e6eb909d21 dinput: Stub support for DIPROP_AUTOCENTER property.
Signed-off-by: Ivo Ivanov <logos128@gmail.com>
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:08:44 +01:00
Rémi Bernon 23194bb047 dinput: Implement HID joystick object names from their usages.
Fixes some issues with apps like WheelCheck from iRacing, which show
detailed info about available objects on the device (such as axes,
buttons, other non-data caps, collections, etc.).

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:08:40 +01:00
Rémi Bernon 98a0a75610 dinput8/tests: Make sure SetCooperativeLevel window is foreground.
This should prevent spurious failures on Windows.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 10:08:32 +01:00
Rémi Bernon 899d4eb87a dinput8/tests: Test device types with older dinput versions.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Rémi Bernon 68d3301571 dinput8/tests: Introduce new create_dinput_device helper.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Ivo Ivanov 34b0b4accb dinput: Return DI_OK when HID joystick CreateEffect succeeds.
SetParameters returns DI_DOWNLOADSKIPPED if the device is not acquired
exclusively.

This fixes Assetto Corsa Competizione and Assetto Corsa not having FFB
due to calling CreateEffect before acquiring the device, which skips the
effect download and returns DI_DOWNLOADSKIPPED.

In particular, ACC tries twice to create the effect, and each time they
unacquire the device to turn off the autocenter, and then create the
effect while still in unacquired state, which in turn returns
DI_DOWNLOADSKIPPED, etc.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Ivo Ivanov ee8015b97a dinput: Return DI_DOWNLOADSKIPPED from SetParameters.
When Download or Start failed because device is not acquired.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Rémi Bernon 979b19ce73 dinput8/tests: Test effect creation with unacquired device.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Rémi Bernon dab7d15c74 dinput8/tests: Improve HID joystick tests output.
Reducing verbosity and fixing typos and potentially interleaved lines.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 19:54:17 +01:00
Rémi Bernon 0697d1caf1 dinput: Fix DIEFF_CARTESIAN to DIEFF_SPHERICAL conversion.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:52 +01:00
Rémi Bernon bd6d258e33 dinput: Only convert DIEFFECT directions to spherical when needed.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:50 +01:00
Rémi Bernon 4289bae3b4 dinput: Check for DIEFF_POLAR axes count before capacity.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:47 +01:00
Rémi Bernon bc2ba90bd8 dinput: Allow DIEFF_CARTESIAN directions when cAxes matches.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:45 +01:00
Rémi Bernon 204763198d dinput8/tests: Add more force-feedback effect direction tests.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:42 +01:00
Rémi Bernon 95fca9198b dinput8/tests: Add older dinput HID force-feedback tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:39 +01:00
Rémi Bernon 352b5b188e dinput8/tests: Make test_device_input tests more predictable.
Using a notification event to wait for input, addressing spurious
failures or timeouts.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 20:12:35 +01:00
Rémi Bernon ec3ffba786 dinput: Fix HID joystick GetEffectInfo / GetCapabilities flags.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-09 22:02:55 +01:00
Rémi Bernon e04cfc0b0a dinput: Pretend that DIPROP_AUTOCENTER is supported.
Star Wars Episode I Racer will ignore force-feedback joystick devices if
we return an error here.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-08 10:28:30 +01:00
Rémi Bernon d5a44e98da dinput8/tests: Check setting DIPROP_AUTOCENTER on force-feedback joystick.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-08 10:28:25 +01:00
Rémi Bernon 4e56801abd dinput: Rewrite and simplify user data format object matching.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-29 12:29:54 +02:00
Rémi Bernon 621af39c11 dinput: Use user object data format array to keep user offsets.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-29 12:29:49 +02:00
Rémi Bernon 998b9d8666 dinput: Implement SetProperty DIPROP_APPDATA using enum_objects.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-28 13:03:54 +02:00
Rémi Bernon b2446501e9 dinput8/tests: Add more HID joystick SetDataFormat tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-28 13:03:47 +02:00
Rémi Bernon 2c95bb3704 dinput8/tests: Relax test results for 3 buttons mouse.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51913
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-26 10:39:34 +02:00
Alexandre Julliard 4233b5d600 dinput8/tests: Use the standard va_list instead of __ms_va_list.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-22 11:11:39 +02:00
Rémi Bernon 7402568a45 dinput: Implement GetProperty with DIPROP_FFGAIN stub.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-19 10:50:15 +02:00
Rémi Bernon 3ec4ae8390 dinput: Factor all GetProperty implementations together.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-19 10:50:13 +02:00
Rémi Bernon 9f493b0ed8 dinput: Factor all GetObjectInfo implementations together.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-18 16:03:42 +02:00
Rémi Bernon 71ecc179aa dinput: Implement internal enum_objects for the keyboard device.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-18 16:03:39 +02:00
Rémi Bernon d2aa45329d dinput: Implement internal enum_objects for the mouse device.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-18 16:03:36 +02:00
Rémi Bernon 2ffdb5519f dinput8/tests: Add mouse and keyboard object enumeration tests.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-18 16:03:28 +02:00
Rémi Bernon b905ea81aa dinput: Add support for more HID axes usages.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=40658
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-15 18:31:51 +02:00
Ivo Ivanov eb223bf58d dinput: Ignore input caps from the PID usage page.
Prevents PID usage page input reports from being parsed and listed in
the device objects, increasing the total number of buttons or axes.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51873
Signed-off-by: Ivo Ivanov <logos128@gmail.com>
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-14 18:59:52 +02:00
Rémi Bernon fe78540b51 dinput8/tests: Remove old packet report id checks in HID driver.
It's superseded with the new expect list, and generally invalid if
report id is not 1.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-14 18:59:52 +02:00
Rémi Bernon 947e6ee5b4 dinput: Wait for the internal thread to complete unacquiring.
Otherwise we may close HID read event before it has finished removing it
from the wait handles, causing MsgWaitForMultipleObjectsEx to return an
error and terminate.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-13 13:05:23 +02:00
Rémi Bernon daed18a816 dinput: Factor all GetCapabilities implementations together.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-13 13:05:23 +02:00
Rémi Bernon 64191946d3 hidclass.sys: Don't queue reports in polled mode.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-12 18:29:22 +02:00
Rémi Bernon 12dc52cd4a dinput8/tests: Add some more polled read tests.
Showing that we should probably not queue reports in this mode.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-12 18:29:22 +02:00
Rémi Bernon a971b48b32 dinput: Implement support for the PID effect set condition report.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-08 15:27:25 +02:00