Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput8/tests/hid.c | 3 --- dlls/hidclass.sys/device.c | 10 ++++++---- 2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c index 0d0e528bf40..40d40b6fcdf 100644 --- a/dlls/dinput8/tests/hid.c +++ b/dlls/dinput8/tests/hid.c @@ -2187,7 +2187,6 @@ static void test_hidp( HANDLE file, HANDLE async_file, int report_id, BOOL polle /* first read should be completed */ ret = GetOverlappedResult( async_file, &overlapped, &value, TRUE ); ok( ret, "GetOverlappedResult failed, last error %u\n", GetLastError() ); - todo_wine ok( value == caps.InputReportByteLength, "got length %u, expected %u\n", value, caps.InputReportByteLength ); /* second read should still be pending */ Sleep( 50 ); @@ -2206,13 +2205,11 @@ static void test_hidp( HANDLE file, HANDLE async_file, int report_id, BOOL polle
ret = GetOverlappedResult( async_file, &overlapped2, &value, TRUE ); ok( ret, "GetOverlappedResult failed, last error %u\n", GetLastError() ); - todo_wine ok( value == caps.InputReportByteLength, "got length %u, expected %u\n", value, caps.InputReportByteLength );
off = report_id ? 0 : 1; todo_wine ok( memcmp( report, buffer, caps.InputReportByteLength ), "expected different report\n" ); - todo_wine ok( !memcmp( report + off, report + caps.InputReportByteLength, caps.InputReportByteLength - off ), "expected identical reports\n" ); todo_wine diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c index 71fb4a366db..b9b31045297 100644 --- a/dlls/hidclass.sys/device.c +++ b/dlls/hidclass.sys/device.c @@ -246,7 +246,8 @@ static DWORD CALLBACK hid_device_thread(void *args) HIDP_COLLECTION_DESC *desc = ext->u.pdo.device_desc.CollectionDesc; HIDP_REPORT_IDS *reports = ext->u.pdo.device_desc.ReportIDs; ULONG report_count = ext->u.pdo.device_desc.ReportIDsLength; - ULONG i, report_id = 0, poll_interval = 0; + BOOL polled = ext->u.pdo.information.Polled; + ULONG i, report_id = 0, timeout = 0; HID_XFER_PACKET *packet; IO_STATUS_BLOCK io; BYTE *buffer; @@ -256,7 +257,7 @@ static DWORD CALLBACK hid_device_thread(void *args) buffer = (BYTE *)(packet + 1); packet->reportBuffer = buffer;
- if (ext->u.pdo.information.Polled) poll_interval = ext->u.pdo.poll_interval; + if (polled) timeout = ext->u.pdo.poll_interval;
for (i = 0; i < report_count; ++i) { @@ -288,10 +289,11 @@ static DWORD CALLBACK hid_device_thread(void *args) packet->reportBuffer = buffer; packet->reportBufferLen = io.Information;
- hid_device_queue_input( device, packet ); + if (polled || io.Information == desc->InputLength) + hid_device_queue_input( device, packet ); }
- res = WaitForSingleObject(ext->u.pdo.halt_event, poll_interval); + res = WaitForSingleObject(ext->u.pdo.halt_event, timeout); } while (res == WAIT_TIMEOUT);
TRACE("device thread exiting, res %#x\n", res);