Commit Graph

213 Commits

Author SHA1 Message Date
Rémi Bernon a7d67c1c90 hidclass.sys: Call internal minidriver report ioctls asynchronously.
Instead of calling it synchronously. Use a completion routine to wait
for their completion before returning.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 22:21:04 +02:00
Rémi Bernon 313453de29 hidclass.sys: Use a local NTSTATUS variable to keep IRP status.
So we can handle pending asynchronous calls to minidriver more easily.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 22:21:04 +02:00
Rémi Bernon ab8c00afbb hidclass.sys: Move handle_minidriver_string inline.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 22:21:04 +02:00
Rémi Bernon ae212726f8 hidclass.sys: Move HID_GET_COLLECTION_* handling inline.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 22:21:04 +02:00
Jacek Caban 21d60952cb win32u: Move __wine_send_input implementation from user32.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-01 20:30:57 +02:00
Rémi Bernon 0dd6bc9db0 hidclass.sys: Fix printf format warnings with long types.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-01 18:23:18 +01:00
Arkadiusz Hiler 2f2aba45dd hidclass.sys: Add input.inf that matches all HID devices.
This makes it so that all the devices on the HID bus now have Class,
ClassGUID, Driver and DriverDesc register properties populated.

Without having at least Driver and Class set SDL2 refuses to use HID
devices directly.

Signed-off-by: Arkadiusz Hiler <ahiler@codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-28 21:10:21 +01:00
Alexandre Julliard f0cd33c69e include: Add support for defining Win32 types as 'long' where possible.
Add -DWINE_NO_LONG_TYPES to modules that still have compilation
warnings with long types.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-27 20:38:22 +01:00
Rémi Bernon 9479e217b8 hidclass.sys: Always read InputReportByteLength bytes when not polling.
This fixes several games (e.g. ICEY) not working well with DS4 gamepad
over bluetooth, as we fixup the input report sizes, and the game expects
them to be longer.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-12 17:27:54 +01:00
Rémi Bernon c2f473d6c4 hidclass.sys: Only drop input reports when length is too short.
And add some warnings when we do.

This otherwise makes the effect state reports from the tests to be
always dropped as they are shorter than the returned length, which is
the read buffer size and the maximum input report length.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-02 20:20:39 +01:00
Alexandre Julliard d5a7d08f63 include: Add a define to enable fastcall wrappers, similar to the thiscall one.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-13 21:57:11 +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 6a869a2a8c hidclass.sys: Re-read the poll timeout on every iteration.
Otherwise it's pointless to have it configurable.

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 e9178864a7 hidclass.sys: Add Sony controllers product string overrides.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:48:44 +02:00
Rémi Bernon 60ef452922 hidclass.sys: Move product string overrides from winexinput.sys.
Some games expect the DS4 gamepads to be named like native drivers, and
they aren't detected xinput-compatible when access through hidraw, so
it's not possible to override their product string in winexinput.sys.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:48:41 +02:00
Rémi Bernon db3e592270 hidclass.sys: Pass output buffer directly in handle_minidriver_string.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:48:37 +02:00
Arkadiusz Hiler ac6f176441 hidclass.sys: Don't send WM_INPUT_DEVICE_CHANGE for WINEXINPUT devices.
For the same reason we don't send WM_INPUT messages.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:22:48 +02:00
Rémi Bernon 51ae926240 hidclass.sys: Overwrite queued reports as FIFO instead of LIFO.
Based on a patch from Ivo Ivanov <logos128@gmail.com>.

The issue causes severe skipping and non smooth movement tracking in
apps/games, when the HidP/HidD APIs are used to control the device
(joysticks, controllers, steering wheels, etc.).

Usually such devices use constant stream of INPUT reports to report
their coords, so any report skipping or change of the sequence,
when the interested apps are reading, would lead to such issues.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51824
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:22:48 +02:00
Rémi Bernon 9411ecf670 hidclass.sys: Drop reports when length doesn't match their declaration.
Based on a patch from Ivo Ivanov <logos128@gmail.com>.

Instead of using the descriptor input report length, which is the
maximum length of all input reports.

Tests show that the reports should be dropped, in non-polled mode, when
their length is invalid, but we were dropping too many of them.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51828
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:22:48 +02:00
Rémi Bernon 3c743180de hidclass.sys: Introduce new find_report_with_type_and_id helper.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51828
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:22:48 +02:00
Ivo Ivanov 62d89cee7c hidclass.sys: Use the report length when copying report data.
Instead of the HID descriptor input report length.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51828
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:02:06 +02:00
Rémi Bernon 08b01d8271 hidclass.sys: Rename hid_report_queue into hid_queue.
As it now also queues IRPs.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Aric Stewart <aric@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-29 21:38:13 +02:00
Rémi Bernon 561e722a46 hidclass.sys: Keep pending IRPs with the report queues.
Since d15358518b83384b137e81b71729c4f47fac0665 we only complete one
pending IRP per HID report, but there may be more than one IRP queued,
from different readers.

This causes trouble and report interleaving when more than one reader
accesses a device at a time. We need to complete only one for each
report queue instead.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Aric Stewart <aric@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-29 21:38:13 +02:00
Rémi Bernon 9421dd2b3c hidclass.sys: Don't leak report queues on device removal.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Aric Stewart <aric@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-29 21:38:13 +02:00
Rémi Bernon 09895076c6 hidclass.sys: Only send WM_INPUT messages for HID devices.
And not for the internal WINEXINPUT devices.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-22 21:48:24 +02:00
Alexandre Julliard 088a787a2c makefiles: Make -mno-cygwin the default.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-20 22:45:48 +02:00
Rémi Bernon 46f3ca4919 hidclass.sys: Complete all pending reads in polled mode only.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-14 18:32:04 +02:00
Rémi Bernon d40d8d9686 hidclass.sys: Drop input packets with unexpected length in non-polled mode.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-14 18:32:00 +02:00
Rémi Bernon 88a8e824e6 hidclass.sys: Enforce output packet lengths to match report lengths.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-13 11:34:10 +02:00
Rémi Bernon 78254f6ec3 hidclass.sys: Call HID_READ_REPORT to read reports in polled mode.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-10 21:58:28 +02:00
Rémi Bernon ed63e1bcf0 hidclass.sys: Use a separate class for devices matching WINEXINPUT\*&XI_*.
Although these devices will be HID compatible we need to not have them
listed on the HID class, as they should only be used internally by Wine
XInput implementation.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-03 21:43:03 +02:00
Rémi Bernon de0fb2adfd hidclass.sys: Use hidparse.sys instead of internal parser.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-16 23:28:45 +02:00
Rémi Bernon 7a47a1f5d2 hidclass.sys: Factor poll / non-polled read loops together.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-16 23:27:31 +02:00
Rémi Bernon 6f9bec436c hidclass.sys: Remove unnecessary poll_interval == 0 cases.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-16 23:27:26 +02:00
Rémi Bernon 286999a9ea hidclass.sys: Enforce POLL_FREQUENCY_MSEC value range.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-16 23:27:21 +02:00
Rémi Bernon 325984ded5 hidclass.sys: Use a simpler ring buffer with ref-counted reports.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-10 17:53:55 +02:00
Rémi Bernon 0a104844eb hidclass.sys: Process pending IRP queue using last read packet.
Instead of requiring the ring buffer to keep previously read packets.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-10 17:53:55 +02:00
Rémi Bernon 3a3e0ed2e9 hidclass.sys: Create separate report queue for each opened handle.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-10 17:53:55 +02:00
Rémi Bernon 2e3a0dac84 hidclass.sys: Rename WINE_HIDP_PREPARSED_DATA to struct hid_preparsed_data.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-10 17:53:55 +02:00
Rémi Bernon a5e2d821e2 hidclass.sys: Merge parse_descriptor and ParseDescriptor.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-09 11:42:05 +02:00
Rémi Bernon e15916cf1d hidclass.sys: Move build_preparsed_data before parse_descriptor.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-09 11:42:00 +02:00
Rémi Bernon 9ef00c9353 hidclass.sys: Remove old reports from WINE_HIDP_PREPARSED_DATA.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-09 11:41:55 +02:00
Rémi Bernon 94e5945102 hidclass.sys: Rewrite IOCTL_HID_WRITE_REPORT using hid_device_xfer_report.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-09 11:41:45 +02:00
Rémi Bernon e653a2e0b3 hidclass.sys: Validate report IDs in hid_device_xfer_report.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-09 11:41:36 +02:00
Rémi Bernon 3708bae09b hidclass.sys: Use hid_device_xfer_report for IOCTL_HID_SET_FEATURE.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-06 19:59:47 +02:00
Rémi Bernon 25409b899c hidclass.sys: Return STATUS_INVALID_USER_BUFFER if buffer_len is 0.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-06 19:59:44 +02:00
Rémi Bernon 98c512e026 hidclass.sys: Pass sizeof(packet) as input for IOCTL_HID_SET_OUTPUT_REPORT.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-06 19:59:41 +02:00
Rémi Bernon ada3ec64a6 hidclass.sys: Use hid_device_xfer_report for IOCTL_HID_SET_OUTPUT_REPORT.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-06 19:59:37 +02:00
Rémi Bernon 6fd356e009 hidclass.sys: Introduce new hid_device_xfer_report helper.
From HID_IOCTL_GET_INPUT_REPORT code, to factor report buffer transfer,
and use it for HID_IOCTL_GET_FEATURE.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-05 23:11:23 +02:00
Rémi Bernon 1f3fdb3cb6 hidclass.sys: Adjust buffer length according to report IDs usage.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-05 23:11:23 +02:00