[PATCH resend 1/5] ntoskrnl.exe/tests: Add tests with and without report IDs.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- Resending to run the tests again. The w864 crash should be fixed but I still expect spurious test failures on w7u_qxl, which sometimes misses bus message arrival, in the PnP driver test so unrelated to these changes, as well as some even less frequent spurious failures. dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 4 +- dlls/ntoskrnl.exe/tests/driver_hid.c | 108 +++++++++++++++++---------- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 56 +++++++++++--- 3 files changed, 114 insertions(+), 54 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 2f7e27e0d87..5fdaa922f45 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1436,7 +1436,7 @@ @ stdcall -private ZwOpenEvent(ptr long ptr) NtOpenEvent @ stdcall ZwOpenFile(ptr long ptr ptr long long) NtOpenFile @ stdcall -private ZwOpenJobObject(ptr long ptr) NtOpenJobObject -@ stdcall -private ZwOpenKey(ptr long ptr) NtOpenKey +@ stdcall ZwOpenKey(ptr long ptr) NtOpenKey @ stdcall -private ZwOpenKeyEx(ptr long ptr long) NtOpenKeyEx @ stdcall -private ZwOpenKeyTransacted(ptr long ptr long) NtOpenKeyTransacted @ stdcall -private ZwOpenKeyTransactedEx(ptr long ptr long long) NtOpenKeyTransactedEx @@ -1476,7 +1476,7 @@ @ stdcall -private ZwQuerySystemInformation(long ptr long ptr) NtQuerySystemInformation @ stdcall -private ZwQuerySystemInformationEx(long ptr long ptr long ptr) NtQuerySystemInformationEx @ stdcall -private ZwQueryTimerResolution(ptr ptr ptr) NtQueryTimerResolution -@ stdcall -private ZwQueryValueKey(long ptr long ptr long ptr) NtQueryValueKey +@ stdcall ZwQueryValueKey(long ptr long ptr long ptr) NtQueryValueKey @ stdcall -private ZwQueryVirtualMemory(long ptr long ptr long ptr) NtQueryVirtualMemory @ stdcall -private ZwQueryVolumeInformationFile(long ptr ptr long long) NtQueryVolumeInformationFile @ stdcall -private ZwReadFile(long long ptr ptr ptr ptr long ptr ptr) NtReadFile diff --git a/dlls/ntoskrnl.exe/tests/driver_hid.c b/dlls/ntoskrnl.exe/tests/driver_hid.c index 1fe644250f7..3a9f4867de4 100644 --- a/dlls/ntoskrnl.exe/tests/driver_hid.c +++ b/dlls/ntoskrnl.exe/tests/driver_hid.c @@ -40,6 +40,7 @@ static UNICODE_STRING control_symlink; static unsigned int got_start_device; +static DWORD report_id; static NTSTATUS WINAPI driver_pnp(DEVICE_OBJECT *device, IRP *irp) { @@ -85,49 +86,54 @@ static NTSTATUS WINAPI driver_power(DEVICE_OBJECT *device, IRP *irp) return PoCallDriver(ext->NextDeviceObject, irp); } -#include "psh_hid_macros.h" - -static const unsigned char report_descriptor[] = +static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) { - USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), - USAGE(1, HID_USAGE_GENERIC_JOYSTICK), - COLLECTION(1, Application), - USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), - USAGE(1, HID_USAGE_GENERIC_X), - USAGE(1, HID_USAGE_GENERIC_Y), - LOGICAL_MINIMUM(1, -128), - LOGICAL_MAXIMUM(1, 127), - REPORT_SIZE(1, 8), - REPORT_COUNT(1, 2), - INPUT(1, Data|Var|Abs), - - USAGE_PAGE(1, HID_USAGE_PAGE_BUTTON), - USAGE_MINIMUM(1, 1), - USAGE_MAXIMUM(1, 8), - LOGICAL_MINIMUM(1, 0), - LOGICAL_MAXIMUM(1, 1), - PHYSICAL_MINIMUM(1, 0), - PHYSICAL_MAXIMUM(1, 1), - REPORT_COUNT(1, 8), - REPORT_SIZE(1, 1), - INPUT(1, Data|Var|Abs), - +#include "psh_hid_macros.h" +/* Replace REPORT_ID with USAGE_PAGE when id is 0 */ +#define REPORT_ID_OR_USAGE_PAGE(size, id) SHORT_ITEM_1((id ? 8 : 0), 1, id) + const unsigned char report_descriptor[] = + { USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), - USAGE(1, HID_USAGE_GENERIC_HATSWITCH), - LOGICAL_MINIMUM(1, 1), - LOGICAL_MAXIMUM(1, 8), - PHYSICAL_MINIMUM(1, 0), - PHYSICAL_MAXIMUM(1, 8), - REPORT_SIZE(1, 4), - REPORT_COUNT(1, 2), - INPUT(1, Data|Var|Abs), - END_COLLECTION, -}; - + USAGE(1, HID_USAGE_GENERIC_JOYSTICK), + COLLECTION(1, Application), + USAGE(1, HID_USAGE_GENERIC_JOYSTICK), + COLLECTION(1, Logical), + REPORT_ID_OR_USAGE_PAGE(1, report_id), + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_X), + USAGE(1, HID_USAGE_GENERIC_Y), + LOGICAL_MINIMUM(1, -128), + LOGICAL_MAXIMUM(1, 127), + REPORT_SIZE(1, 8), + REPORT_COUNT(1, 2), + INPUT(1, Data|Var|Abs), + + USAGE_PAGE(1, HID_USAGE_PAGE_BUTTON), + USAGE_MINIMUM(1, 1), + USAGE_MAXIMUM(1, 8), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + PHYSICAL_MINIMUM(1, 0), + PHYSICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Data|Var|Abs), + + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_HATSWITCH), + LOGICAL_MINIMUM(1, 1), + LOGICAL_MAXIMUM(1, 8), + PHYSICAL_MINIMUM(1, 0), + PHYSICAL_MAXIMUM(1, 8), + REPORT_SIZE(1, 4), + REPORT_COUNT(1, 2), + INPUT(1, Data|Var|Abs), + END_COLLECTION, + END_COLLECTION, + }; +#undef REPORT_ID_OR_USAGE_PAGE #include "pop_hid_macros.h" -static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) -{ static BOOL test_failed; IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation(irp); const ULONG in_size = stack->Parameters.DeviceIoControl.InputBufferLength; @@ -202,9 +208,13 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) case IOCTL_HID_READ_REPORT: { - ULONG expected_size = 4; + ULONG expected_size = report_id ? 5 : 4; ok(!in_size, "got input size %u\n", in_size); - if (!test_failed) todo_wine ok(out_size == expected_size, "got output size %u\n", out_size); + if (!test_failed) + { + todo_wine_if(!report_id) + ok(out_size == expected_size, "got output size %u\n", out_size); + } if (out_size != expected_size) test_failed = TRUE; ret = STATUS_NOT_IMPLEMENTED; @@ -278,17 +288,33 @@ static void WINAPI driver_unload(DRIVER_OBJECT *driver) NTSTATUS WINAPI DriverEntry(DRIVER_OBJECT *driver, UNICODE_STRING *registry) { + static const int info_size = offsetof( KEY_VALUE_PARTIAL_INFORMATION, Data ); + char buffer[offsetof( KEY_VALUE_PARTIAL_INFORMATION, Data ) + sizeof(DWORD)]; HID_MINIDRIVER_REGISTRATION params = { .Revision = HID_REVISION, .DriverObject = driver, .RegistryPath = registry, }; + UNICODE_STRING name_str; + OBJECT_ATTRIBUTES attr; NTSTATUS ret; + HANDLE hkey; + DWORD size; if ((ret = winetest_init())) return ret; + InitializeObjectAttributes(&attr, registry, 0, NULL, NULL); + ret = ZwOpenKey(&hkey, KEY_ALL_ACCESS, &attr); + ok(!ret, "ZwOpenKey returned %#x\n", ret); + + RtlInitUnicodeString(&name_str, L"ReportID"); + size = info_size + sizeof(report_id); + ret = ZwQueryValueKey(hkey, &name_str, KeyValuePartialInformation, buffer, size, &size); + ok(!ret, "ZwQueryValueKey returned %#x\n", ret); + memcpy(&report_id, buffer + info_size, size - info_size); + driver->DriverExtension->AddDevice = driver_add_device; driver->DriverUnload = driver_unload; driver->MajorFunction[IRP_MJ_PNP] = driver_pnp; diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index 4b744d813d8..e9390698fc6 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1634,25 +1634,27 @@ static inline void check_hidp_value_caps_(int line, HIDP_VALUE_CAPS *caps, const } } -static void test_hidp(HANDLE file) +static void test_hidp(HANDLE file, int report_id) { - static const HIDP_CAPS expect_hidp_caps = + const HIDP_CAPS expect_hidp_caps = { .Usage = HID_USAGE_GENERIC_JOYSTICK, .UsagePage = HID_USAGE_PAGE_GENERIC, .InputReportByteLength = 5, - .NumberLinkCollectionNodes = 1, + .NumberLinkCollectionNodes = 2, .NumberInputButtonCaps = 1, .NumberInputValueCaps = 3, .NumberInputDataIndices = 11, }; - static const HIDP_BUTTON_CAPS expect_button_caps[] = + const HIDP_BUTTON_CAPS expect_button_caps[] = { { .UsagePage = HID_USAGE_PAGE_BUTTON, + .ReportID = report_id, .BitField = 2, .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .LinkCollection = 1, .IsRange = TRUE, .IsAbsolute = TRUE, .Range.UsageMin = 1, @@ -1661,13 +1663,15 @@ static void test_hidp(HANDLE file) .Range.DataIndexMax = 9, }, }; - static const HIDP_VALUE_CAPS expect_value_caps[] = + const HIDP_VALUE_CAPS expect_value_caps[] = { { .UsagePage = HID_USAGE_PAGE_GENERIC, + .ReportID = report_id, .BitField = 2, .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .LinkCollection = 1, .IsAbsolute = TRUE, .BitSize = 8, .ReportCount = 1, @@ -1677,9 +1681,11 @@ static void test_hidp(HANDLE file) }, { .UsagePage = HID_USAGE_PAGE_GENERIC, + .ReportID = report_id, .BitField = 2, .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .LinkCollection = 1, .IsAbsolute = TRUE, .BitSize = 8, .ReportCount = 1, @@ -1690,9 +1696,11 @@ static void test_hidp(HANDLE file) }, { .UsagePage = HID_USAGE_PAGE_GENERIC, + .ReportID = report_id, .BitField = 2, .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .LinkCollection = 1, .IsAbsolute = TRUE, .BitSize = 4, .ReportCount = 2, @@ -1709,6 +1717,13 @@ static void test_hidp(HANDLE file) .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, .CollectionType = 1, + .NumberOfChildren = 1, + .FirstChild = 1, + }, + { + .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, + .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .CollectionType = 2, }, }; @@ -1956,20 +1971,26 @@ static void test_hidp(HANDLE file) ok(status == HIDP_STATUS_INVALID_REPORT_LENGTH, "HidP_InitializeReportForID returned %#x\n", status); status = HidP_InitializeReportForID(HidP_Input, 0, preparsed_data, report, caps.InputReportByteLength + 1); ok(status == HIDP_STATUS_INVALID_REPORT_LENGTH, "HidP_InitializeReportForID returned %#x\n", status); + status = HidP_InitializeReportForID(HidP_Input, 1 - report_id, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(!report_id) + ok(status == HIDP_STATUS_REPORT_DOES_NOT_EXIST, "HidP_InitializeReportForID returned %#x\n", status); memset(report, 0xcd, sizeof(report)); - status = HidP_InitializeReportForID(HidP_Input, 0, preparsed_data, report, caps.InputReportByteLength); + status = HidP_InitializeReportForID(HidP_Input, report_id, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) ok(status == HIDP_STATUS_SUCCESS, "HidP_InitializeReportForID returned %#x\n", status); memset(buffer, 0xcd, sizeof(buffer)); memset(buffer, 0, caps.InputReportByteLength); + buffer[0] = report_id; + todo_wine_if(report_id) ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); HidD_FreePreparsedData(preparsed_data); CloseHandle(file); } -static void test_hid_device(void) +static void test_hid_device(DWORD report_id) { char buffer[200]; SP_DEVICE_INTERFACE_DETAIL_DATA_A *iface_detail = (void *)buffer; @@ -1984,6 +2005,8 @@ static void test_hid_device(void) HDEVINFO set; HANDLE file; + winetest_push_context("report %d", report_id); + set = SetupDiGetClassDevsA(&GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); ok(set != INVALID_HANDLE_VALUE, "failed to get device list, error %#x\n", GetLastError()); @@ -2014,7 +2037,7 @@ static void test_hid_device(void) FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); ok(file != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError()); - test_hidp(file); + test_hidp(file, report_id); CloseHandle(file); @@ -2022,9 +2045,11 @@ static void test_hid_device(void) InitializeObjectAttributes(&attr, &string, OBJ_CASE_INSENSITIVE, NULL, NULL); status = NtOpenFile(&file, SYNCHRONIZE, &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT); todo_wine ok(status == STATUS_UNSUCCESSFUL, "got %#x\n", status); + + winetest_pop_context(); } -static void test_hid_driver(struct testsign_context *ctx) +static void test_hid_driver(struct testsign_context *ctx, DWORD report_id) { static const char hardware_id[] = "test_hardware_id\0"; char path[MAX_PATH], dest[MAX_PATH], *filepart; @@ -2034,13 +2059,21 @@ static void test_hid_driver(struct testsign_context *ctx) SC_HANDLE manager, service; BOOL ret, need_reboot; HANDLE catalog, file; + LSTATUS status; HDEVINFO set; + HKEY hkey; FILE *f; GetCurrentDirectoryA(ARRAY_SIZE(cwd), cwd); GetTempPathA(ARRAY_SIZE(tempdir), tempdir); SetCurrentDirectoryA(tempdir); + status = RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Services\\winetest", 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL); + ok(!status, "RegCreateKeyExW returned %#x\n", status); + + status = RegSetValueExW(hkey, L"ReportID", 0, REG_DWORD, (void *)&report_id, sizeof(report_id)); + ok(!status, "RegSetValueExW returned %#x\n", status); + load_resource(L"driver_hid.dll", driver_filename); ret = MoveFileExW(driver_filename, L"winetest.sys", MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING); ok(ret, "failed to move file, error %u\n", GetLastError()); @@ -2088,7 +2121,7 @@ static void test_hid_driver(struct testsign_context *ctx) /* Tests. */ - test_hid_device(); + test_hid_device(report_id); /* Clean up. */ @@ -2219,7 +2252,8 @@ START_TEST(ntoskrnl) test_pnp_driver(&ctx); subtest("driver_hid"); - test_hid_driver(&ctx); + test_hid_driver(&ctx, 0); + test_hid_driver(&ctx, 1); out: testsign_cleanup(&ctx); -- 2.31.0
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/ntoskrnl.exe/tests/driver_hid.c | 124 +++++++++++++- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 246 ++++++++++++++++++++++++--- 2 files changed, 335 insertions(+), 35 deletions(-) diff --git a/dlls/ntoskrnl.exe/tests/driver_hid.c b/dlls/ntoskrnl.exe/tests/driver_hid.c index 3a9f4867de4..74e9029a476 100644 --- a/dlls/ntoskrnl.exe/tests/driver_hid.c +++ b/dlls/ntoskrnl.exe/tests/driver_hid.c @@ -90,7 +90,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) { #include "psh_hid_macros.h" /* Replace REPORT_ID with USAGE_PAGE when id is 0 */ -#define REPORT_ID_OR_USAGE_PAGE(size, id) SHORT_ITEM_1((id ? 8 : 0), 1, id) +#define REPORT_ID_OR_USAGE_PAGE(size, id, off) SHORT_ITEM_1((id ? 8 : 0), 1, (id + off)) const unsigned char report_descriptor[] = { USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), @@ -98,7 +98,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) COLLECTION(1, Application), USAGE(1, HID_USAGE_GENERIC_JOYSTICK), COLLECTION(1, Logical), - REPORT_ID_OR_USAGE_PAGE(1, report_id), + REPORT_ID_OR_USAGE_PAGE(1, report_id, 0), USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), USAGE(1, HID_USAGE_GENERIC_X), USAGE(1, HID_USAGE_GENERIC_Y), @@ -113,22 +113,132 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) USAGE_MAXIMUM(1, 8), LOGICAL_MINIMUM(1, 0), LOGICAL_MAXIMUM(1, 1), - PHYSICAL_MINIMUM(1, 0), - PHYSICAL_MAXIMUM(1, 1), REPORT_COUNT(1, 8), REPORT_SIZE(1, 1), INPUT(1, Data|Var|Abs), + USAGE_MINIMUM(1, 0x18), + USAGE_MAXIMUM(1, 0x1f), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Cnst|Var|Abs), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Cnst|Var|Abs), + /* needs to be 8 bit aligned as next has Buff */ + + USAGE_MINIMUM(4, (HID_USAGE_PAGE_KEYBOARD<<16)|0x8), + USAGE_MAXIMUM(4, (HID_USAGE_PAGE_KEYBOARD<<16)|0xf), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 8), + REPORT_COUNT(1, 2), + REPORT_SIZE(1, 8), + INPUT(2, Data|Ary|Rel|Wrap|Lin|Pref|Null|Vol|Buff), + + /* needs to be 8 bit aligned as previous has Buff */ + USAGE(1, 0x20), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Data|Var|Abs), + USAGE_MINIMUM(1, 0x21), + USAGE_MAXIMUM(1, 0x22), + REPORT_COUNT(1, 2), + REPORT_SIZE(1, 0), + INPUT(1, Data|Var|Abs), + USAGE(1, 0x23), + REPORT_COUNT(1, 0), + REPORT_SIZE(1, 1), + INPUT(1, Data|Var|Abs), + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), USAGE(1, HID_USAGE_GENERIC_HATSWITCH), LOGICAL_MINIMUM(1, 1), LOGICAL_MAXIMUM(1, 8), - PHYSICAL_MINIMUM(1, 0), - PHYSICAL_MAXIMUM(1, 8), REPORT_SIZE(1, 4), REPORT_COUNT(1, 2), INPUT(1, Data|Var|Abs), END_COLLECTION, + + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_JOYSTICK), + COLLECTION(1, Report), + REPORT_ID_OR_USAGE_PAGE(1, report_id, 1), + USAGE_PAGE(1, HID_USAGE_PAGE_BUTTON), + USAGE_MINIMUM(1, 9), + USAGE_MAXIMUM(1, 10), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Data|Var|Abs), + END_COLLECTION, + + USAGE_PAGE(2, HID_USAGE_PAGE_HAPTICS), + USAGE(1, HID_USAGE_HAPTICS_SIMPLE_CONTROLLER), + COLLECTION(1, Logical), + REPORT_ID_OR_USAGE_PAGE(1, report_id, 0), + USAGE_PAGE(2, HID_USAGE_PAGE_HAPTICS), + + USAGE(1, HID_USAGE_HAPTICS_WAVEFORM_LIST), + COLLECTION(1, NamedArray), + USAGE_PAGE(1, HID_USAGE_PAGE_ORDINAL), + USAGE(1, 3), /* HID_USAGE_HAPTICS_WAVEFORM_RUMBLE */ + USAGE(1, 4), /* HID_USAGE_HAPTICS_WAVEFORM_BUZZ */ + LOGICAL_MINIMUM(2, 0x0000), + LOGICAL_MAXIMUM(2, 0xffff), + REPORT_COUNT(1, 2), + REPORT_SIZE(1, 16), + FEATURE(1, Data|Var|Abs|Null), + END_COLLECTION, + + USAGE_PAGE(2, HID_USAGE_PAGE_HAPTICS), + USAGE(1, HID_USAGE_HAPTICS_DURATION_LIST), + COLLECTION(1, NamedArray), + USAGE_PAGE(1, HID_USAGE_PAGE_ORDINAL), + USAGE(1, 3), /* 0 (HID_USAGE_HAPTICS_WAVEFORM_RUMBLE) */ + USAGE(1, 4), /* 0 (HID_USAGE_HAPTICS_WAVEFORM_BUZZ) */ + LOGICAL_MINIMUM(2, 0x0000), + LOGICAL_MAXIMUM(2, 0xffff), + REPORT_COUNT(1, 2), + REPORT_SIZE(1, 16), + FEATURE(1, Data|Var|Abs|Null), + END_COLLECTION, + + USAGE_PAGE(2, HID_USAGE_PAGE_HAPTICS), + USAGE(1, HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME), + UNIT(2, 0x1001), /* seconds */ + UNIT_EXPONENT(1, -3), /* 10^-3 */ + LOGICAL_MINIMUM(2, 0x8000), + LOGICAL_MAXIMUM(2, 0x7fff), + PHYSICAL_MINIMUM(4, 0x00000000), + PHYSICAL_MAXIMUM(4, 0xffffffff), + REPORT_SIZE(1, 32), + REPORT_COUNT(1, 1), + FEATURE(1, Data|Var|Abs), + /* reset global items */ + UNIT(1, 0), /* None */ + UNIT_EXPONENT(1, 0), + END_COLLECTION, + + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_JOYSTICK), + COLLECTION(1, Report), + REPORT_ID_OR_USAGE_PAGE(1, report_id, 1), + USAGE_PAGE(1, HID_USAGE_PAGE_BUTTON), + USAGE_MINIMUM(1, 9), + USAGE_MAXIMUM(1, 10), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + PHYSICAL_MINIMUM(1, 0), + PHYSICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + FEATURE(1, Data|Var|Abs), + END_COLLECTION, END_COLLECTION, }; #undef REPORT_ID_OR_USAGE_PAGE @@ -208,7 +318,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) case IOCTL_HID_READ_REPORT: { - ULONG expected_size = report_id ? 5 : 4; + ULONG expected_size = 10; ok(!in_size, "got input size %u\n", in_size); if (!test_failed) { diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index e9390698fc6..a800ac3b8ea 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1636,15 +1636,36 @@ static inline void check_hidp_value_caps_(int line, HIDP_VALUE_CAPS *caps, const static void test_hidp(HANDLE file, int report_id) { - const HIDP_CAPS expect_hidp_caps = + const HIDP_CAPS expect_hidp_caps[] = { - .Usage = HID_USAGE_GENERIC_JOYSTICK, - .UsagePage = HID_USAGE_PAGE_GENERIC, - .InputReportByteLength = 5, - .NumberLinkCollectionNodes = 2, - .NumberInputButtonCaps = 1, - .NumberInputValueCaps = 3, - .NumberInputDataIndices = 11, + /* without report id */ + { + .Usage = HID_USAGE_GENERIC_JOYSTICK, + .UsagePage = HID_USAGE_PAGE_GENERIC, + .InputReportByteLength = 11, + .FeatureReportByteLength = 14, + .NumberLinkCollectionNodes = 7, + .NumberInputButtonCaps = 5, + .NumberInputValueCaps = 4, + .NumberInputDataIndices = 32, + .NumberFeatureButtonCaps = 1, + .NumberFeatureValueCaps = 5, + .NumberFeatureDataIndices = 7, + }, + /* with report id */ + { + .Usage = HID_USAGE_GENERIC_JOYSTICK, + .UsagePage = HID_USAGE_PAGE_GENERIC, + .InputReportByteLength = 10, + .FeatureReportByteLength = 13, + .NumberLinkCollectionNodes = 7, + .NumberInputButtonCaps = 5, + .NumberInputValueCaps = 4, + .NumberInputDataIndices = 32, + .NumberFeatureButtonCaps = 1, + .NumberFeatureValueCaps = 5, + .NumberFeatureDataIndices = 7, + }, }; const HIDP_BUTTON_CAPS expect_button_caps[] = { @@ -1662,6 +1683,48 @@ static void test_hidp(HANDLE file, int report_id) .Range.DataIndexMin = 2, .Range.DataIndexMax = 9, }, + { + .UsagePage = HID_USAGE_PAGE_BUTTON, + .ReportID = report_id, + .BitField = 3, + .LinkCollection = 1, + .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, + .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .IsRange = TRUE, + .IsAbsolute = TRUE, + .Range.UsageMin = 0x18, + .Range.UsageMax = 0x1f, + .Range.DataIndexMin = 10, + .Range.DataIndexMax = 17, + }, + { + .UsagePage = HID_USAGE_PAGE_KEYBOARD, + .ReportID = report_id, + .BitField = 0x1fc, + .LinkCollection = 1, + .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, + .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .IsRange = TRUE, + .IsAbsolute = FALSE, + .Range.UsageMin = 0x8, + .Range.UsageMax = 0xf, + .Range.DataIndexMin = 18, + .Range.DataIndexMax = 25, + }, + { + .UsagePage = HID_USAGE_PAGE_BUTTON, + .ReportID = report_id, + .BitField = 2, + .LinkCollection = 1, + .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, + .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .IsRange = FALSE, + .IsAbsolute = TRUE, + .NotRange.Usage = 0x20, + .NotRange.Reserved1 = 0x20, + .NotRange.DataIndex = 26, + .NotRange.Reserved4 = 26, + }, }; const HIDP_VALUE_CAPS expect_value_caps[] = { @@ -1678,6 +1741,7 @@ static void test_hidp(HANDLE file, int report_id) .LogicalMin = -128, .LogicalMax = 127, .NotRange.Usage = HID_USAGE_GENERIC_Y, + .NotRange.Reserved1 = HID_USAGE_GENERIC_Y, }, { .UsagePage = HID_USAGE_PAGE_GENERIC, @@ -1692,7 +1756,25 @@ static void test_hidp(HANDLE file, int report_id) .LogicalMin = -128, .LogicalMax = 127, .NotRange.Usage = HID_USAGE_GENERIC_X, + .NotRange.Reserved1 = HID_USAGE_GENERIC_X, .NotRange.DataIndex = 1, + .NotRange.Reserved4 = 1, + }, + { + .UsagePage = HID_USAGE_PAGE_BUTTON, + .ReportID = report_id, + .BitField = 2, + .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, + .LinkUsagePage = HID_USAGE_PAGE_GENERIC, + .LinkCollection = 1, + .IsAbsolute = TRUE, + .ReportCount = 1, + .LogicalMax = 1, + .IsRange = TRUE, + .Range.UsageMin = 0x21, + .Range.UsageMax = 0x22, + .Range.DataIndexMin = 27, + .Range.DataIndexMax = 28, }, { .UsagePage = HID_USAGE_PAGE_GENERIC, @@ -1706,9 +1788,10 @@ static void test_hidp(HANDLE file, int report_id) .ReportCount = 2, .LogicalMin = 1, .LogicalMax = 8, - .PhysicalMax = 8, .NotRange.Usage = HID_USAGE_GENERIC_HATSWITCH, - .NotRange.DataIndex = 10, + .NotRange.Reserved1 = HID_USAGE_GENERIC_HATSWITCH, + .NotRange.DataIndex = 29, + .NotRange.Reserved4 = 29, }, }; static const HIDP_LINK_COLLECTION_NODE expect_collections[] = @@ -1717,8 +1800,8 @@ static void test_hidp(HANDLE file, int report_id) .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, .CollectionType = 1, - .NumberOfChildren = 1, - .FirstChild = 1, + .NumberOfChildren = 4, + .FirstChild = 6, }, { .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, @@ -1747,7 +1830,25 @@ static void test_hidp(HANDLE file, int report_id) ok(status == HIDP_STATUS_INVALID_PREPARSED_DATA, "HidP_GetCaps returned %#x\n", status); status = HidP_GetCaps(preparsed_data, &caps); ok(status == HIDP_STATUS_SUCCESS, "HidP_GetCaps returned %#x\n", status); - check_hidp_caps(&caps, &expect_hidp_caps); + check_member(caps, expect_hidp_caps[report_id], "%04x", Usage); + check_member(caps, expect_hidp_caps[report_id], "%04x", UsagePage); + check_member(caps, expect_hidp_caps[report_id], "%d", InputReportByteLength); + check_member(caps, expect_hidp_caps[report_id], "%d", OutputReportByteLength); + check_member(caps, expect_hidp_caps[report_id], "%d", FeatureReportByteLength); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberLinkCollectionNodes); + todo_wine + check_member(caps, expect_hidp_caps[report_id], "%d", NumberInputButtonCaps); + todo_wine + check_member(caps, expect_hidp_caps[report_id], "%d", NumberInputValueCaps); + todo_wine + check_member(caps, expect_hidp_caps[report_id], "%d", NumberInputDataIndices); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberOutputButtonCaps); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberOutputValueCaps); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberOutputDataIndices); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberFeatureButtonCaps); + check_member(caps, expect_hidp_caps[report_id], "%d", NumberFeatureValueCaps); + todo_wine + check_member(caps, expect_hidp_caps[report_id], "%d", NumberFeatureDataIndices); collection_count = 0; status = HidP_GetLinkCollectionNodes(collections, &collection_count, preparsed_data); @@ -1766,7 +1867,16 @@ static void test_hidp(HANDLE file, int report_id) for (i = 0; i < ARRAY_SIZE(expect_collections); ++i) { winetest_push_context("collections[%d]", i); - check_hidp_link_collection_node(collections + i, expect_collections + i); + check_member(collections[i], expect_collections[i], "%04x", LinkUsage); + check_member(collections[i], expect_collections[i], "%04x", LinkUsagePage); + check_member(collections[i], expect_collections[i], "%d", Parent); + check_member(collections[i], expect_collections[i], "%d", NumberOfChildren); + todo_wine_if(i == 1) + check_member(collections[i], expect_collections[i], "%d", NextSibling); + todo_wine_if(i == 0) + check_member(collections[i], expect_collections[i], "%d", FirstChild); + check_member(collections[i], expect_collections[i], "%d", CollectionType); + check_member(collections[i], expect_collections[i], "%d", IsAlias); winetest_pop_context(); } @@ -1786,6 +1896,7 @@ static void test_hidp(HANDLE file, int report_id) count = ARRAY_SIZE(button_caps); status = HidP_GetButtonCaps(HidP_Input, button_caps, &count, (PHIDP_PREPARSED_DATA)buffer); ok(status == HIDP_STATUS_INVALID_PREPARSED_DATA, "HidP_GetButtonCaps returned %#x\n", status); + memset(button_caps, 0, sizeof(button_caps)); status = HidP_GetButtonCaps(HidP_Input, button_caps, &count, preparsed_data); ok(status == HIDP_STATUS_SUCCESS, "HidP_GetButtonCaps returned %#x\n", status); ok(count == caps.NumberInputButtonCaps, "HidP_GetButtonCaps returned count %d, expected %d\n", @@ -1794,25 +1905,36 @@ static void test_hidp(HANDLE file, int report_id) for (i = 0; i < ARRAY_SIZE(expect_button_caps); ++i) { winetest_push_context("button_caps[%d]", i); + todo_wine_if(i >= 2) check_member(button_caps[i], expect_button_caps[i], "%04x", UsagePage); + todo_wine_if(i >= 2 && report_id) check_member(button_caps[i], expect_button_caps[i], "%d", ReportID); check_member(button_caps[i], expect_button_caps[i], "%d", IsAlias); todo_wine check_member(button_caps[i], expect_button_caps[i], "%d", BitField); + todo_wine_if(i >= 2) check_member(button_caps[i], expect_button_caps[i], "%d", LinkCollection); + todo_wine_if(i >= 3) check_member(button_caps[i], expect_button_caps[i], "%04x", LinkUsage); + todo_wine_if(i >= 3) check_member(button_caps[i], expect_button_caps[i], "%04x", LinkUsagePage); + todo_wine_if(i == 1) check_member(button_caps[i], expect_button_caps[i], "%d", IsRange); check_member(button_caps[i], expect_button_caps[i], "%d", IsStringRange); check_member(button_caps[i], expect_button_caps[i], "%d", IsDesignatorRange); + todo_wine_if(i >= 2) check_member(button_caps[i], expect_button_caps[i], "%d", IsAbsolute); + todo_wine_if(i >= 1) check_member(button_caps[i], expect_button_caps[i], "%04x", Range.UsageMin); + todo_wine_if(i >= 1) check_member(button_caps[i], expect_button_caps[i], "%04x", Range.UsageMax); check_member(button_caps[i], expect_button_caps[i], "%d", Range.StringMin); check_member(button_caps[i], expect_button_caps[i], "%d", Range.StringMax); check_member(button_caps[i], expect_button_caps[i], "%d", Range.DesignatorMin); check_member(button_caps[i], expect_button_caps[i], "%d", Range.DesignatorMax); + todo_wine_if(i >= 1) check_member(button_caps[i], expect_button_caps[i], "%d", Range.DataIndexMin); + todo_wine_if(i >= 1) check_member(button_caps[i], expect_button_caps[i], "%d", Range.DataIndexMax); winetest_pop_context(); } @@ -1886,6 +2008,7 @@ static void test_hidp(HANDLE file, int report_id) for (i = 0; i < ARRAY_SIZE(expect_value_caps); ++i) { winetest_push_context("value_caps[%d]", i); + todo_wine_if(i == 3) check_member(value_caps[i], expect_value_caps[i], "%04x", UsagePage); check_member(value_caps[i], expect_value_caps[i], "%d", ReportID); check_member(value_caps[i], expect_value_caps[i], "%d", IsAlias); @@ -1894,28 +2017,42 @@ static void test_hidp(HANDLE file, int report_id) check_member(value_caps[i], expect_value_caps[i], "%d", LinkCollection); check_member(value_caps[i], expect_value_caps[i], "%04x", LinkUsage); check_member(value_caps[i], expect_value_caps[i], "%04x", LinkUsagePage); + todo_wine_if(i == 3) check_member(value_caps[i], expect_value_caps[i], "%d", IsRange); check_member(value_caps[i], expect_value_caps[i], "%d", IsStringRange); check_member(value_caps[i], expect_value_caps[i], "%d", IsDesignatorRange); + todo_wine_if(i == 2) check_member(value_caps[i], expect_value_caps[i], "%d", IsAbsolute); + todo_wine_if(i == 2) check_member(value_caps[i], expect_value_caps[i], "%d", HasNull); + todo_wine_if(i >= 2) check_member(value_caps[i], expect_value_caps[i], "%d", BitSize); + todo_wine_if(i == 2) check_member(value_caps[i], expect_value_caps[i], "%d", ReportCount); check_member(value_caps[i], expect_value_caps[i], "%d", UnitsExp); check_member(value_caps[i], expect_value_caps[i], "%d", Units); + todo_wine_if(i >= 3) check_member(value_caps[i], expect_value_caps[i], "%d", LogicalMin); + todo_wine_if(i >= 2) check_member(value_caps[i], expect_value_caps[i], "%d", LogicalMax); check_member(value_caps[i], expect_value_caps[i], "%d", PhysicalMin); check_member(value_caps[i], expect_value_caps[i], "%d", PhysicalMax); - todo_wine_if(i != 2) - check_member(value_caps[i], expect_value_caps[i], "%04x", NotRange.Usage); - check_member(value_caps[i], expect_value_caps[i], "%d", NotRange.StringIndex); - check_member(value_caps[i], expect_value_caps[i], "%d", NotRange.DesignatorIndex); - check_member(value_caps[i], expect_value_caps[i], "%d", NotRange.DataIndex); + todo_wine + check_member(value_caps[i], expect_value_caps[i], "%04x", Range.UsageMin); + todo_wine + check_member(value_caps[i], expect_value_caps[i], "%04x", Range.UsageMax); + check_member(value_caps[i], expect_value_caps[i], "%d", Range.StringMin); + check_member(value_caps[i], expect_value_caps[i], "%d", Range.StringMax); + check_member(value_caps[i], expect_value_caps[i], "%d", Range.DesignatorMin); + check_member(value_caps[i], expect_value_caps[i], "%d", Range.DesignatorMax); + todo_wine_if(i >= 2) + check_member(value_caps[i], expect_value_caps[i], "%d", Range.DataIndexMin); + todo_wine_if(i >= 2) + check_member(value_caps[i], expect_value_caps[i], "%d", Range.DataIndexMax); winetest_pop_context(); } - count = ARRAY_SIZE(value_caps) - 3; + count = ARRAY_SIZE(value_caps) - 4; status = HidP_GetSpecificValueCaps(HidP_Output, 0, 0, 0, value_caps, &count, preparsed_data); todo_wine ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_GetSpecificValueCaps returned %#x\n", status); @@ -1928,24 +2065,61 @@ static void test_hidp(HANDLE file, int report_id) todo_wine ok(count == caps.NumberInputValueCaps, "HidP_GetSpecificValueCaps returned count %d, expected %d\n", count, caps.NumberInputValueCaps); - count = ARRAY_SIZE(value_caps) - 3; - status = HidP_GetSpecificValueCaps(HidP_Input, 0, 0, 0, value_caps + 3, &count, (PHIDP_PREPARSED_DATA)buffer); + count = ARRAY_SIZE(value_caps) - 4; + status = HidP_GetSpecificValueCaps(HidP_Input, 0, 0, 0, value_caps + 4, &count, (PHIDP_PREPARSED_DATA)buffer); ok(status == HIDP_STATUS_INVALID_PREPARSED_DATA, "HidP_GetSpecificValueCaps returned %#x\n", status); - status = HidP_GetSpecificValueCaps(HidP_Input, 0, 0, 0, value_caps + 3, &count, preparsed_data); + status = HidP_GetSpecificValueCaps(HidP_Input, 0, 0, 0, value_caps + 4, &count, preparsed_data); ok(status == HIDP_STATUS_SUCCESS, "HidP_GetSpecificValueCaps returned %#x\n", status); ok(count == caps.NumberInputValueCaps, "HidP_GetSpecificValueCaps returned count %d, expected %d\n", count, caps.NumberInputValueCaps); - check_hidp_value_caps(&value_caps[3], &value_caps[0]); - check_hidp_value_caps(&value_caps[4], &value_caps[1]); - check_hidp_value_caps(&value_caps[5], &value_caps[2]); + check_hidp_value_caps(&value_caps[4], &value_caps[0]); + check_hidp_value_caps(&value_caps[5], &value_caps[1]); + check_hidp_value_caps(&value_caps[6], &value_caps[2]); + check_hidp_value_caps(&value_caps[7], &value_caps[3]); count = 1; status = HidP_GetSpecificValueCaps(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_HATSWITCH, - value_caps + 3, &count, preparsed_data); + value_caps + 4, &count, preparsed_data); ok(status == HIDP_STATUS_SUCCESS, "HidP_GetSpecificValueCaps returned %#x\n", status); ok(count == 1, "HidP_GetSpecificValueCaps returned count %d, expected %d\n", count, 1); - check_hidp_value_caps(&value_caps[3], &value_caps[2]); + + todo_wine + check_member(value_caps[4], value_caps[3], "%04x", UsagePage); + check_member(value_caps[4], value_caps[3], "%d", ReportID); + check_member(value_caps[4], value_caps[3], "%d", IsAlias); + check_member(value_caps[4], value_caps[3], "%d", BitField); + check_member(value_caps[4], value_caps[3], "%d", LinkCollection); + check_member(value_caps[4], value_caps[3], "%04x", LinkUsage); + check_member(value_caps[4], value_caps[3], "%04x", LinkUsagePage); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", IsRange); + check_member(value_caps[4], value_caps[3], "%d", IsStringRange); + check_member(value_caps[4], value_caps[3], "%d", IsDesignatorRange); + check_member(value_caps[4], value_caps[3], "%d", IsAbsolute); + check_member(value_caps[4], value_caps[3], "%d", HasNull); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", BitSize); + check_member(value_caps[4], value_caps[3], "%d", ReportCount); + check_member(value_caps[4], value_caps[3], "%d", UnitsExp); + check_member(value_caps[4], value_caps[3], "%d", Units); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", LogicalMin); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", LogicalMax); + check_member(value_caps[4], value_caps[3], "%d", PhysicalMin); + check_member(value_caps[4], value_caps[3], "%d", PhysicalMax); + todo_wine + check_member(value_caps[4], value_caps[3], "%04x", Range.UsageMin); + check_member(value_caps[4], value_caps[3], "%04x", Range.UsageMax); + check_member(value_caps[4], value_caps[3], "%d", Range.StringMin); + check_member(value_caps[4], value_caps[3], "%d", Range.StringMax); + check_member(value_caps[4], value_caps[3], "%d", Range.DesignatorMin); + check_member(value_caps[4], value_caps[3], "%d", Range.DesignatorMax); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", Range.DataIndexMin); + todo_wine + check_member(value_caps[4], value_caps[3], "%d", Range.DataIndexMax); count = 0xdead; status = HidP_GetSpecificValueCaps(HidP_Input, 0xfffe, 0, 0, value_caps, &count, preparsed_data); @@ -1986,6 +2160,22 @@ static void test_hidp(HANDLE file, int report_id) todo_wine_if(report_id) ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); + memset(report, 0xcd, sizeof(report)); + status = HidP_InitializeReportForID(HidP_Feature, 3, preparsed_data, report, caps.FeatureReportByteLength); + todo_wine_if(!report_id) + ok(status == HIDP_STATUS_REPORT_DOES_NOT_EXIST, "HidP_InitializeReportForID returned %#x\n", status); + + memset(report, 0xcd, sizeof(report)); + status = HidP_InitializeReportForID(HidP_Feature, report_id, preparsed_data, report, caps.FeatureReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_InitializeReportForID returned %#x\n", status); + + memset(buffer, 0xcd, sizeof(buffer)); + memset(buffer, 0, caps.FeatureReportByteLength); + buffer[0] = report_id; + todo_wine_if(report_id) + ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); + HidD_FreePreparsedData(preparsed_data); CloseHandle(file); } -- 2.31.0
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=92615 Your paranoid android. === w7u_2qxl (32 bit report) === ntoskrnl.exe: ntoskrnl.c:1232: Test failed: got 0 bus arrival messages ntoskrnl.c:1248: Test failed: got 0 bus arrival messages
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/ntoskrnl.exe/tests/driver_hid.c | 33 +++- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 275 ++++++++++++++++++++++++++- 2 files changed, 298 insertions(+), 10 deletions(-) diff --git a/dlls/ntoskrnl.exe/tests/driver_hid.c b/dlls/ntoskrnl.exe/tests/driver_hid.c index 74e9029a476..91e3a29e1df 100644 --- a/dlls/ntoskrnl.exe/tests/driver_hid.c +++ b/dlls/ntoskrnl.exe/tests/driver_hid.c @@ -161,6 +161,35 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) REPORT_SIZE(1, 4), REPORT_COUNT(1, 2), INPUT(1, Data|Var|Abs), + + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_Z), + LOGICAL_MINIMUM(4, 0x00000000), + LOGICAL_MAXIMUM(4, 0x3fffffff), + PHYSICAL_MINIMUM(4, 0x80000000), + PHYSICAL_MAXIMUM(4, 0x7fffffff), + REPORT_SIZE(1, 32), + REPORT_COUNT(1, 1), + INPUT(1, Data|Var|Abs), + + /* reset physical range to its default interpretation */ + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_RX), + PHYSICAL_MINIMUM(4, 0), + PHYSICAL_MAXIMUM(4, 0), + REPORT_SIZE(1, 32), + REPORT_COUNT(1, 1), + INPUT(1, Data|Var|Abs), + + USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), + USAGE(1, HID_USAGE_GENERIC_RY), + LOGICAL_MINIMUM(4, 0x7fff), + LOGICAL_MAXIMUM(4, 0x0000), + PHYSICAL_MINIMUM(4, 0x0000), + PHYSICAL_MAXIMUM(4, 0x7fff), + REPORT_SIZE(1, 32), + REPORT_COUNT(1, 1), + INPUT(1, Data|Var|Abs), END_COLLECTION, USAGE_PAGE(1, HID_USAGE_PAGE_GENERIC), @@ -217,7 +246,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) PHYSICAL_MINIMUM(4, 0x00000000), PHYSICAL_MAXIMUM(4, 0xffffffff), REPORT_SIZE(1, 32), - REPORT_COUNT(1, 1), + REPORT_COUNT(1, 2), FEATURE(1, Data|Var|Abs), /* reset global items */ UNIT(1, 0), /* None */ @@ -318,7 +347,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) case IOCTL_HID_READ_REPORT: { - ULONG expected_size = 10; + ULONG expected_size = 22; ok(!in_size, "got input size %u\n", in_size); if (!test_failed) { diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index a800ac3b8ea..7d867779a20 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1642,12 +1642,12 @@ static void test_hidp(HANDLE file, int report_id) { .Usage = HID_USAGE_GENERIC_JOYSTICK, .UsagePage = HID_USAGE_PAGE_GENERIC, - .InputReportByteLength = 11, - .FeatureReportByteLength = 14, + .InputReportByteLength = 23, + .FeatureReportByteLength = 18, .NumberLinkCollectionNodes = 7, .NumberInputButtonCaps = 5, - .NumberInputValueCaps = 4, - .NumberInputDataIndices = 32, + .NumberInputValueCaps = 7, + .NumberInputDataIndices = 35, .NumberFeatureButtonCaps = 1, .NumberFeatureValueCaps = 5, .NumberFeatureDataIndices = 7, @@ -1656,12 +1656,12 @@ static void test_hidp(HANDLE file, int report_id) { .Usage = HID_USAGE_GENERIC_JOYSTICK, .UsagePage = HID_USAGE_PAGE_GENERIC, - .InputReportByteLength = 10, - .FeatureReportByteLength = 13, + .InputReportByteLength = 22, + .FeatureReportByteLength = 17, .NumberLinkCollectionNodes = 7, .NumberInputButtonCaps = 5, - .NumberInputValueCaps = 4, - .NumberInputDataIndices = 32, + .NumberInputValueCaps = 7, + .NumberInputDataIndices = 35, .NumberFeatureButtonCaps = 1, .NumberFeatureValueCaps = 5, .NumberFeatureDataIndices = 7, @@ -1816,10 +1816,12 @@ static void test_hidp(HANDLE file, int report_id) HIDP_VALUE_CAPS value_caps[16]; char buffer[200], report[200]; DWORD collection_count; + DWORD waveform_list; NTSTATUS status; HIDP_CAPS caps; unsigned int i; USHORT count; + ULONG value; BOOL ret; ret = HidD_GetPreparsedData(file, &preparsed_data); @@ -2160,6 +2162,151 @@ static void test_hidp(HANDLE file, int report_id) todo_wine_if(report_id) ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); + status = HidP_SetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, buffer, + sizeof(buffer), preparsed_data, report, caps.InputReportByteLength); + todo_wine + ok(status == HIDP_STATUS_NOT_VALUE_ARRAY, "HidP_SetUsageValueArray returned %#x\n", status); + memset(buffer, 0xcd, sizeof(buffer)); + status = HidP_SetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_HATSWITCH, buffer, + 0, preparsed_data, report, caps.InputReportByteLength); + todo_wine + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_SetUsageValueArray returned %#x\n", status); + status = HidP_SetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_HATSWITCH, buffer, + 8, preparsed_data, report, caps.InputReportByteLength); + ok(status == HIDP_STATUS_NOT_IMPLEMENTED, "HidP_SetUsageValueArray returned %#x\n", status); + + status = HidP_GetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, buffer, + sizeof(buffer), preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_NOT_VALUE_ARRAY, "HidP_GetUsageValueArray returned %#x\n", status); + memset(buffer, 0xcd, sizeof(buffer)); + status = HidP_GetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_HATSWITCH, buffer, + 0, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_GetUsageValueArray returned %#x\n", status); + status = HidP_GetUsageValueArray(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_HATSWITCH, buffer, + 8, preparsed_data, report, caps.InputReportByteLength); + todo_wine + ok(status == HIDP_STATUS_NOT_IMPLEMENTED, "HidP_GetUsageValueArray returned %#x\n", status); + + value = -128; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + &value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 0x80, "got value %x, expected %#x\n", value, 0x80); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == -128, "got value %x, expected %#x\n", value, -128); + + value = 127; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 127, "got value %x, expected %#x\n", value, 127); + + value = 0; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_X, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 0, "got value %x, expected %#x\n", value, 0); + + value = 0x7fffffff; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine + ok(status == HIDP_STATUS_VALUE_OUT_OF_RANGE, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine + ok(value == 0, "got value %x, expected %#x\n", value, 0); + value = 0xdeadbeef; + status = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + &value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsageValue returned %#x\n", status); + todo_wine + ok(value == 0x7fffffff, "got value %x, expected %#x\n", value, 0x7fffffff); + + value = 0x3fffffff; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine + ok(value == 0x7fffffff, "got value %x, expected %#x\n", value, 0x7fffffff); + + value = 0; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_Z, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 0x80000000, "got value %x, expected %#x\n", value, 0x80000000); + + value = 0; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_RX, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_RX, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 0, "got value %x, expected %#x\n", value, 0); + + value = 0xfeedcafe; + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_RY, + value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + value = 0xdeadbeef; + status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_RY, + (LONG *)&value, preparsed_data, report, caps.InputReportByteLength); + todo_wine + ok(status == HIDP_STATUS_BAD_LOG_PHY_VALUES, "HidP_GetScaledUsageValue returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 0, "got value %x, expected %#x\n", value, 0); + memset(report, 0xcd, sizeof(report)); status = HidP_InitializeReportForID(HidP_Feature, 3, preparsed_data, report, caps.FeatureReportByteLength); todo_wine_if(!report_id) @@ -2176,6 +2323,118 @@ static void test_hidp(HANDLE file, int report_id) todo_wine_if(report_id) ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); + for (i = 0; i < caps.NumberLinkCollectionNodes; ++i) + { + if (collections[i].LinkUsagePage != HID_USAGE_PAGE_HAPTICS) continue; + if (collections[i].LinkUsage == HID_USAGE_HAPTICS_WAVEFORM_LIST) break; + } + ok(i < caps.NumberLinkCollectionNodes, + "HID_USAGE_HAPTICS_WAVEFORM_LIST collection not found\n"); + waveform_list = i; + + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, (PHIDP_PREPARSED_DATA)buffer, + report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_INVALID_PREPARSED_DATA, "HidP_SetUsageValue returned %#x\n", status); + status = HidP_SetUsageValue(HidP_Feature + 1, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report, + caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_INVALID_REPORT_TYPE, "HidP_SetUsageValue returned %#x\n", status); + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report, + caps.FeatureReportByteLength + 1); + todo_wine + ok(status == HIDP_STATUS_INVALID_REPORT_LENGTH, "HidP_SetUsageValue returned %#x\n", status); + report[0] = 1 - report_id; + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report, + caps.FeatureReportByteLength); + todo_wine + ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID), + "HidP_SetUsageValue returned %#x\n", status); + report[0] = 2; + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report, + caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_SetUsageValue returned %#x\n", status); + report[0] = report_id; + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, + preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_SetUsageValue returned %#x\n", status); + + status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report, + caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValue returned %#x\n", status); + + memset(buffer, 0xcd, sizeof(buffer)); + memset(buffer, 0, caps.FeatureReportByteLength); + buffer[0] = report_id; + value = HID_USAGE_HAPTICS_WAVEFORM_RUMBLE; + memcpy(buffer + 1, &value, 2); + todo_wine + ok(!memcmp(buffer, report, sizeof(buffer)), "unexpected report data\n"); + + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value, + (PHIDP_PREPARSED_DATA)buffer, report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_INVALID_PREPARSED_DATA, "HidP_GetUsageValue returned %#x\n", status); + status = HidP_GetUsageValue(HidP_Feature + 1, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, + &value, preparsed_data, report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_INVALID_REPORT_TYPE, "HidP_GetUsageValue returned %#x\n", status); + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value, + preparsed_data, report, caps.FeatureReportByteLength + 1); + todo_wine + ok(status == HIDP_STATUS_INVALID_REPORT_LENGTH, "HidP_GetUsageValue returned %#x\n", status); + report[0] = 1 - report_id; + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value, + preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID), + "HidP_GetUsageValue returned %#x\n", status); + report[0] = 2; + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value, + preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_GetUsageValue returned %#x\n", status); + report[0] = report_id; + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, &value, + preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_GetUsageValue returned %#x\n", status); + + value = 0xdeadbeef; + status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value, + preparsed_data, report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsageValue returned %#x\n", status); + todo_wine + ok(value == HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, "got value %x, expected %#x\n", value, + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE); + + memset(buffer, 0xff, sizeof(buffer)); + status = HidP_SetUsageValueArray(HidP_Feature, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME, buffer, + 0, preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_SetUsageValueArray returned %#x\n", status); + status = HidP_SetUsageValueArray(HidP_Feature, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME, buffer, + 64, preparsed_data, report, caps.FeatureReportByteLength); + todo_wine + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsageValueArray returned %#x\n", status); + todo_wine + ok(!memcmp(report + 9, buffer, 8), "unexpected report data\n"); + + memset(buffer, 0, sizeof(buffer)); + status = HidP_GetUsageValueArray(HidP_Feature, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME, buffer, + 0, preparsed_data, report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_GetUsageValueArray returned %#x\n", status); + status = HidP_GetUsageValueArray(HidP_Feature, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME, buffer, + 64, preparsed_data, report, caps.FeatureReportByteLength); + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsageValueArray returned %#x\n", status); + memset(buffer + 16, 0xff, 8); + todo_wine + ok(!memcmp(buffer, buffer + 16, 16), "unexpected report value\n"); + HidD_FreePreparsedData(preparsed_data); CloseHandle(file); } -- 2.31.0
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=92616 Your paranoid android. === w7u_2qxl (32 bit report) === ntoskrnl.exe: ntoskrnl.c:1232: Test failed: got 0 bus arrival messages ntoskrnl.c:1248: Test failed: got 0 bus arrival messages === debiant2 (32 bit report) === ntoskrnl.exe: ntoskrnl: Timeout
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/ntoskrnl.exe/tests/driver_hid.c | 24 ++++- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 154 ++++++++++++++++++++++++--- 2 files changed, 162 insertions(+), 16 deletions(-) diff --git a/dlls/ntoskrnl.exe/tests/driver_hid.c b/dlls/ntoskrnl.exe/tests/driver_hid.c index 91e3a29e1df..acb51d99816 100644 --- a/dlls/ntoskrnl.exe/tests/driver_hid.c +++ b/dlls/ntoskrnl.exe/tests/driver_hid.c @@ -206,6 +206,28 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) INPUT(1, Data|Var|Abs), END_COLLECTION, + USAGE_PAGE(1, HID_USAGE_PAGE_LED), + USAGE(1, HID_USAGE_LED_GREEN), + COLLECTION(1, Report), + REPORT_ID_OR_USAGE_PAGE(1, report_id, 0), + USAGE_PAGE(1, HID_USAGE_PAGE_LED), + USAGE(1, 1), + USAGE(1, 2), + USAGE(1, 3), + USAGE(1, 4), + USAGE(1, 5), + USAGE(1, 6), + USAGE(1, 7), + USAGE(1, 8), + LOGICAL_MINIMUM(1, 0), + LOGICAL_MAXIMUM(1, 1), + PHYSICAL_MINIMUM(1, 0), + PHYSICAL_MAXIMUM(1, 1), + REPORT_COUNT(1, 8), + REPORT_SIZE(1, 1), + INPUT(1, Data|Var|Abs), + END_COLLECTION, + USAGE_PAGE(2, HID_USAGE_PAGE_HAPTICS), USAGE(1, HID_USAGE_HAPTICS_SIMPLE_CONTROLLER), COLLECTION(1, Logical), @@ -347,7 +369,7 @@ static NTSTATUS WINAPI driver_internal_ioctl(DEVICE_OBJECT *device, IRP *irp) case IOCTL_HID_READ_REPORT: { - ULONG expected_size = 22; + ULONG expected_size = 23; ok(!in_size, "got input size %u\n", in_size); if (!test_failed) { diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index 7d867779a20..44bf7b38c3a 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1642,12 +1642,12 @@ static void test_hidp(HANDLE file, int report_id) { .Usage = HID_USAGE_GENERIC_JOYSTICK, .UsagePage = HID_USAGE_PAGE_GENERIC, - .InputReportByteLength = 23, + .InputReportByteLength = 24, .FeatureReportByteLength = 18, - .NumberLinkCollectionNodes = 7, - .NumberInputButtonCaps = 5, + .NumberLinkCollectionNodes = 8, + .NumberInputButtonCaps = 13, .NumberInputValueCaps = 7, - .NumberInputDataIndices = 35, + .NumberInputDataIndices = 43, .NumberFeatureButtonCaps = 1, .NumberFeatureValueCaps = 5, .NumberFeatureDataIndices = 7, @@ -1656,12 +1656,12 @@ static void test_hidp(HANDLE file, int report_id) { .Usage = HID_USAGE_GENERIC_JOYSTICK, .UsagePage = HID_USAGE_PAGE_GENERIC, - .InputReportByteLength = 22, + .InputReportByteLength = 23, .FeatureReportByteLength = 17, - .NumberLinkCollectionNodes = 7, - .NumberInputButtonCaps = 5, + .NumberLinkCollectionNodes = 8, + .NumberInputButtonCaps = 13, .NumberInputValueCaps = 7, - .NumberInputDataIndices = 35, + .NumberInputDataIndices = 43, .NumberFeatureButtonCaps = 1, .NumberFeatureValueCaps = 5, .NumberFeatureDataIndices = 7, @@ -1800,8 +1800,8 @@ static void test_hidp(HANDLE file, int report_id) .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, .LinkUsagePage = HID_USAGE_PAGE_GENERIC, .CollectionType = 1, - .NumberOfChildren = 4, - .FirstChild = 6, + .NumberOfChildren = 5, + .FirstChild = 7, }, { .LinkUsage = HID_USAGE_GENERIC_JOYSTICK, @@ -1812,11 +1812,13 @@ static void test_hidp(HANDLE file, int report_id) HIDP_LINK_COLLECTION_NODE collections[16]; PHIDP_PREPARSED_DATA preparsed_data; + USAGE_AND_PAGE usage_and_pages[16]; HIDP_BUTTON_CAPS button_caps[16]; HIDP_VALUE_CAPS value_caps[16]; char buffer[200], report[200]; DWORD collection_count; DWORD waveform_list; + USAGE usages[16]; NTSTATUS status; HIDP_CAPS caps; unsigned int i; @@ -1909,22 +1911,21 @@ static void test_hidp(HANDLE file, int report_id) winetest_push_context("button_caps[%d]", i); todo_wine_if(i >= 2) check_member(button_caps[i], expect_button_caps[i], "%04x", UsagePage); - todo_wine_if(i >= 2 && report_id) check_member(button_caps[i], expect_button_caps[i], "%d", ReportID); check_member(button_caps[i], expect_button_caps[i], "%d", IsAlias); todo_wine check_member(button_caps[i], expect_button_caps[i], "%d", BitField); todo_wine_if(i >= 2) check_member(button_caps[i], expect_button_caps[i], "%d", LinkCollection); - todo_wine_if(i >= 3) + todo_wine_if(i >= (report_id ? 2 : 3)) check_member(button_caps[i], expect_button_caps[i], "%04x", LinkUsage); - todo_wine_if(i >= 3) + todo_wine_if(i >= (report_id ? 2 : 3)) check_member(button_caps[i], expect_button_caps[i], "%04x", LinkUsagePage); - todo_wine_if(i == 1) + todo_wine_if(i >= 1 && i <= (report_id ? 2 : 1)) check_member(button_caps[i], expect_button_caps[i], "%d", IsRange); check_member(button_caps[i], expect_button_caps[i], "%d", IsStringRange); check_member(button_caps[i], expect_button_caps[i], "%d", IsDesignatorRange); - todo_wine_if(i >= 2) + todo_wine_if(i == 2) check_member(button_caps[i], expect_button_caps[i], "%d", IsAbsolute); todo_wine_if(i >= 1) check_member(button_caps[i], expect_button_caps[i], "%04x", Range.UsageMin); @@ -2307,6 +2308,129 @@ static void test_hidp(HANDLE file, int report_id) todo_wine_if(report_id) ok(value == 0, "got value %x, expected %#x\n", value, 0); + value = HidP_MaxUsageListLength(HidP_Feature + 1, 0, preparsed_data); + todo_wine + ok(value == 0, "HidP_MaxUsageListLength(HidP_Feature + 1, 0) returned %d, expected %d\n", value, 0); + value = HidP_MaxUsageListLength(HidP_Input, 0, preparsed_data); + todo_wine + ok(value == 42, "HidP_MaxUsageListLength(HidP_Input, 0) returned %d, expected %d\n", value, 42); + value = HidP_MaxUsageListLength(HidP_Input, HID_USAGE_PAGE_BUTTON, preparsed_data); + todo_wine + ok(value == 32, "HidP_MaxUsageListLength(HidP_Input, HID_USAGE_PAGE_BUTTON) returned %d, expected %d\n", value, 32); + value = HidP_MaxUsageListLength(HidP_Input, HID_USAGE_PAGE_LED, preparsed_data); + ok(value == 8, "HidP_MaxUsageListLength(HidP_Input, HID_USAGE_PAGE_LED) returned %d, expected %d\n", value, 8); + value = HidP_MaxUsageListLength(HidP_Feature, HID_USAGE_PAGE_BUTTON, preparsed_data); + todo_wine + ok(value == 8, "HidP_MaxUsageListLength(HidP_Feature, HID_USAGE_PAGE_BUTTON) returned %d, expected %d\n", value, 8); + value = HidP_MaxUsageListLength(HidP_Feature, HID_USAGE_PAGE_LED, preparsed_data); + ok(value == 0, "HidP_MaxUsageListLength(HidP_Feature, HID_USAGE_PAGE_LED) returned %d, expected %d\n", value, 0); + + usages[0] = 0xff; + value = 1; + status = HidP_SetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usages, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_SetUsages returned %#x\n", status); + usages[1] = 2; + usages[2] = 0xff; + value = 3; + status = HidP_SetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usages, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_SetUsages returned %#x\n", status); + usages[0] = 4; + usages[1] = 6; + value = 2; + status = HidP_SetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usages, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsages returned %#x\n", status); + usages[0] = 4; + usages[1] = 6; + value = 2; + status = HidP_SetUsages(HidP_Input, HID_USAGE_PAGE_LED, 0, usages, &value, preparsed_data, + report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_SetUsages returned %#x\n", status); + + status = HidP_SetUsageValue(HidP_Input, HID_USAGE_PAGE_LED, 0, 6, 1, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_SetUsageValue returned %#x\n", status); + + value = 0xdeadbeef; + status = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_LED, 0, 6, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_USAGE_NOT_FOUND, "HidP_SetUsageValue returned %#x\n", status); + ok(value == 0xdeadbeef, "got value %x, expected %#x\n", value, 0xdeadbeef); + + value = 1; + status = HidP_GetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usages, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_GetUsages returned %#x\n", status); + todo_wine + ok(value == 2, "got usage count %d, expected %d\n", value, 2); + value = ARRAY_SIZE(usages); + memset(usages, 0xcd, sizeof(usages)); + status = HidP_GetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usages, &value, + preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsages returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 2, "got usage count %d, expected %d\n", value, 2); + todo_wine_if(report_id) + ok(usages[0] == 4, "got usages[0] %x, expected %x\n", usages[0], 4); + todo_wine_if(report_id) + ok(usages[1] == 6, "got usages[1] %x, expected %x\n", usages[1], 6); + + value = ARRAY_SIZE(usages); + memset(usages, 0xcd, sizeof(usages)); + status = HidP_GetUsages(HidP_Input, HID_USAGE_PAGE_LED, 0, usages, &value, preparsed_data, + report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsages returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 2, "got usage count %d, expected %d\n", value, 2); + todo_wine + ok(usages[0] == 6, "got usages[0] %x, expected %x\n", usages[0], 6); + todo_wine + ok(usages[1] == 4, "got usages[1] %x, expected %x\n", usages[1], 4); + + value = ARRAY_SIZE(usage_and_pages); + memset(usage_and_pages, 0xcd, sizeof(usage_and_pages)); + status = HidP_GetUsagesEx(HidP_Input, 0, usage_and_pages, &value, preparsed_data, report, + caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetUsagesEx returned %#x\n", status); + todo_wine_if(report_id) + ok(value == 4, "got usage count %d, expected %d\n", value, 4); + todo_wine_if(report_id) + ok(usage_and_pages[0].UsagePage == HID_USAGE_PAGE_BUTTON, "got usage_and_pages[0] UsagePage %x, expected %x\n", + usage_and_pages[0].UsagePage, HID_USAGE_PAGE_BUTTON); + todo_wine_if(report_id) + ok(usage_and_pages[1].UsagePage == HID_USAGE_PAGE_BUTTON, "got usage_and_pages[1] UsagePage %x, expected %x\n", + usage_and_pages[1].UsagePage, HID_USAGE_PAGE_BUTTON); + todo_wine_if(report_id) + ok(usage_and_pages[2].UsagePage == HID_USAGE_PAGE_LED, "got usage_and_pages[2] UsagePage %x, expected %x\n", + usage_and_pages[2].UsagePage, HID_USAGE_PAGE_LED); + todo_wine_if(report_id) + ok(usage_and_pages[3].UsagePage == HID_USAGE_PAGE_LED, "got usage_and_pages[3] UsagePage %x, expected %x\n", + usage_and_pages[3].UsagePage, HID_USAGE_PAGE_LED); + todo_wine_if(report_id) + ok(usage_and_pages[0].Usage == 4, "got usage_and_pages[0] Usage %x, expected %x\n", + usage_and_pages[0].Usage, 4); + todo_wine_if(report_id) + ok(usage_and_pages[1].Usage == 6, "got usage_and_pages[1] Usage %x, expected %x\n", + usage_and_pages[1].Usage, 6); + todo_wine + ok(usage_and_pages[2].Usage == 6, "got usage_and_pages[2] Usage %x, expected %x\n", + usage_and_pages[2].Usage, 6); + todo_wine + ok(usage_and_pages[3].Usage == 4, "got usage_and_pages[3] Usage %x, expected %x\n", + usage_and_pages[3].Usage, 4); + memset(report, 0xcd, sizeof(report)); status = HidP_InitializeReportForID(HidP_Feature, 3, preparsed_data, report, caps.FeatureReportByteLength); todo_wine_if(!report_id) -- 2.31.0
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=92617 Your paranoid android. === w7u_2qxl (32 bit report) === ntoskrnl.exe: ntoskrnl.c:1232: Test failed: got 0 bus arrival messages ntoskrnl.c:1248: Test failed: got 0 bus arrival messages
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index 44bf7b38c3a..af26638e305 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1809,6 +1809,18 @@ static void test_hidp(HANDLE file, int report_id) .CollectionType = 2, }, }; + static const HIDP_DATA expect_data[] = + { + { .DataIndex = 0, }, + { .DataIndex = 1, }, + { .DataIndex = 5, .RawValue = 1, }, + { .DataIndex = 7, .RawValue = 1, }, + { .DataIndex = 30, }, + { .DataIndex = 31, }, + { .DataIndex = 32, .RawValue = 0xfeedcafe, }, + { .DataIndex = 37, .RawValue = 1, }, + { .DataIndex = 39, .RawValue = 1, }, + }; HIDP_LINK_COLLECTION_NODE collections[16]; PHIDP_PREPARSED_DATA preparsed_data; @@ -1818,6 +1830,7 @@ static void test_hidp(HANDLE file, int report_id) char buffer[200], report[200]; DWORD collection_count; DWORD waveform_list; + HIDP_DATA data[32]; USAGE usages[16]; NTSTATUS status; HIDP_CAPS caps; @@ -2431,6 +2444,36 @@ static void test_hidp(HANDLE file, int report_id) ok(usage_and_pages[3].Usage == 4, "got usage_and_pages[3] Usage %x, expected %x\n", usage_and_pages[3].Usage, 4); + value = HidP_MaxDataListLength(HidP_Feature + 1, preparsed_data); + ok(value == 0, "HidP_MaxDataListLength(HidP_Feature + 1) returned %d, expected %d\n", value, 0); + value = HidP_MaxDataListLength(HidP_Input, preparsed_data); + todo_wine + ok(value == 50, "HidP_MaxDataListLength(HidP_Input) returned %d, expected %d\n", value, 50); + value = HidP_MaxDataListLength(HidP_Output, preparsed_data); + ok(value == 0, "HidP_MaxDataListLength(HidP_Output) returned %d, expected %d\n", value, 0); + value = HidP_MaxDataListLength(HidP_Feature, preparsed_data); + ok(value == 13, "HidP_MaxDataListLength(HidP_Feature) returned %d, expected %d\n", value, 13); + + value = 1; + status = HidP_GetData(HidP_Input, data, &value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_BUFFER_TOO_SMALL, "HidP_GetData returned %#x\n", status); + todo_wine + ok(value == 9, "got data count %d, expected %d\n", value, 9); + memset(data, 0, sizeof(data)); + status = HidP_GetData(HidP_Input, data, &value, preparsed_data, report, caps.InputReportByteLength); + todo_wine_if(report_id) + ok(status == HIDP_STATUS_SUCCESS, "HidP_GetData returned %#x\n", status); + if (status == HIDP_STATUS_SUCCESS) for (i = 0; i < ARRAY_SIZE(expect_data); ++i) + { + winetest_push_context("data[%d]", i); + todo_wine_if(i >= 4) + check_member(data[i], expect_data[i], "%d", DataIndex); + todo_wine_if(i == 6 || i == 7 || i == 8) + check_member(data[i], expect_data[i], "%d", RawValue); + winetest_pop_context(); + } + memset(report, 0xcd, sizeof(report)); status = HidP_InitializeReportForID(HidP_Feature, 3, preparsed_data, report, caps.FeatureReportByteLength); todo_wine_if(!report_id) -- 2.31.0
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=92614 Your paranoid android. === w7u_2qxl (32 bit report) === ntoskrnl.exe: ntoskrnl.c:1232: Test failed: got 0 bus arrival messages ntoskrnl.c:1248: Test failed: got 0 bus arrival messages ntoskrnl.c:1274: Test failed: got 0 child arrival messages ntoskrnl.c:1281: Test failed: failed to get device, error 0x103 ntoskrnl.c:1282: Test failed: wrong class {4d36e97d-e325-11ce-bfc1-08002be10318} ntoskrnl.c:1285: Test failed: failed to get device ID, error 0x57 ntoskrnl.c:1286: Test failed: got ID "\x05" ntoskrnl.c:1290: Test failed: got error 0x57 ntoskrnl.c:1307: Test failed: got error 0x57 ntoskrnl.c:1312: Test failed: got error 0x57 ntoskrnl.c:1316: Test failed: got error 0x57 ntoskrnl.c:1317: Test failed: got type 6357104 ntoskrnl.c:1318: Test failed: got size 0 ntoskrnl.c:1323: Test failed: got error 0x57 ntoskrnl.c:1324: Test failed: got type 6357104 ntoskrnl.c:1325: Test failed: got size 0 ntoskrnl.c:1330: Test failed: got error 0x57 ntoskrnl.c:1357: Test failed: got 0 child arrival messages ntoskrnl.c:1358: Test failed: got 0 child removal messages ntoskrnl.c:1361: Test failed: got 0 ntoskrnl.c:1460: Test failed: failed to get device list, error 0xd ntoskrnl.c:290: Test failed: expected SERVICE_STOPPED, got 4 ntoskrnl.c:2119: Test failed: failed to install device, error 0x430 ntoskrnl.c:2034: Test failed: report 0: didn't find device ntoskrnl.c:2038: Test failed: report 0: got error 123 ntoskrnl.c:1743: Test failed: report 0: HidD_GetPreparsedData failed with error 6 ntoskrnl.c:1749: Test failed: report 0: HidP_GetCaps returned 0xc0110001 ntoskrnl.c:1750: Test failed: report 0: got Usage 0000, expected 0004 ntoskrnl.c:1750: Test failed: report 0: got UsagePage 002a, expected 0001 ntoskrnl.c:1750: Test failed: report 0: got InputReportByteLength 15088, expected 5 ntoskrnl.c:1750: Test failed: report 0: got OutputReportByteLength 47, expected 0 ntoskrnl.c:1750: Test failed: report 0: got FeatureReportByteLength 336, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberLinkCollectionNodes 0, expected 2 ntoskrnl.c:1750: Test failed: report 0: got NumberInputButtonCaps 42, expected 1 ntoskrnl.c:1750: Test failed: report 0: got NumberInputValueCaps 336, expected 3 ntoskrnl.c:1750: Test failed: report 0: got NumberInputDataIndices 42, expected 11 ntoskrnl.c:1750: Test failed: report 0: got NumberOutputDataIndices 79, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberFeatureValueCaps 336, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberFeatureDataIndices 42, expected 0 ntoskrnl.c:1754: Test failed: report 0: HidP_GetLinkCollectionNodes returned 0xc0110001 ntoskrnl.c:1762: Test failed: report 0: HidP_GetLinkCollectionNodes returned 0xc0110001 ntoskrnl.c:1763: Test failed: report 0: got 16 collection nodes, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got LinkUsage 77d5, expected 0004 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got LinkUsagePage 76c7, expected 0001 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got Parent 99, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got NumberOfChildren 0, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got NextSibling 63371, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got FirstChild 30408, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got CollectionType 64, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got IsAlias 1, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got LinkUsage 0000, expected 0004 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got Parent 19396, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got NumberOfChildren 55, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got CollectionType 160, expected 2 ntoskrnl.c:1776: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1778: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1782: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1784: Test failed: report 0: HidP_GetButtonCaps returned count 0, expected 42 ntoskrnl.c:1790: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1791: Test failed: report 0: HidP_GetButtonCaps returned count 16, expected 42 ntoskrnl.c:1797: Test failed: report 0: button_caps[0]: got UsagePage 0001, expected 0009 ntoskrnl.c:1801: Test failed: report 0: button_caps[0]: got BitField 61460, expected 2 ntoskrnl.c:1802: Test failed: report 0: button_caps[0]: got LinkCollection 34, expected 1 ntoskrnl.c:1803: Test failed: report 0: button_caps[0]: got LinkUsage 0002, expected 0004 ntoskrnl.c:1804: Test failed: report 0: button_caps[0]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1805: Test failed: report 0: button_caps[0]: got IsRange 0, expected 1 ntoskrnl.c:1808: Test failed: report 0: button_caps[0]: got IsAbsolute 0, expected 1 ntoskrnl.c:1809: Test failed: report 0: button_caps[0]: got Range.UsageMin 0000, expected 0001 ntoskrnl.c:1810: Test failed: report 0: button_caps[0]: got Range.UsageMax 0000, expected 0008 ntoskrnl.c:1815: Test failed: report 0: button_caps[0]: got Range.DataIndexMin 0, expected 2 ntoskrnl.c:1816: Test failed: report 0: button_caps[0]: got Range.DataIndexMax 0, expected 9 ntoskrnl.c:1823: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1825: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1829: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1831: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 0, expected 42 ntoskrnl.c:1838: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1839: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 15, expected 42 ntoskrnl.c:1841: Test failed: report 0: got UsagePage 0000, expected 0001 ntoskrnl.c:1841: Test failed: report 0: got BitField 0, expected 61460 ntoskrnl.c:1841: Test failed: report 0: got LinkCollection 0, expected 34 ntoskrnl.c:1841: Test failed: report 0: got LinkUsage 0000, expected 0002 ntoskrnl.c:1845: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1846: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 15, expected 1 ntoskrnl.c:1847: Test failed: report 0: got UsagePage 0000, expected 0001 ntoskrnl.c:1847: Test failed: report 0: got BitField 0, expected 61460 ntoskrnl.c:1847: Test failed: report 0: got LinkCollection 0, expected 34 ntoskrnl.c:1847: Test failed: report 0: got LinkUsage 0000, expected 0002 ntoskrnl.c:1852: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1853: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1857: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1858: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1862: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1863: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1868: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1870: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1874: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1876: Test failed: report 0: HidP_GetValueCaps returned count 0, expected 336 ntoskrnl.c:1882: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1883: Test failed: report 0: HidP_GetValueCaps returned count 16, expected 336 ntoskrnl.c:1889: Test failed: report 0: value_caps[0]: got UsagePage ef28, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[0]: got ReportID 34, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[0]: got BitField 31424, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[0]: got LinkCollection 30192, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[0]: got LinkUsage 17e6, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[0]: got LinkUsagePage 8c2e, expected 0001 ntoskrnl.c:1897: Test failed: report 0: value_caps[0]: got IsRange 254, expected 0 ntoskrnl.c:1898: Test failed: report 0: value_caps[0]: got IsStringRange 255, expected 0 ntoskrnl.c:1899: Test failed: report 0: value_caps[0]: got IsDesignatorRange 255, expected 0 ntoskrnl.c:1900: Test failed: report 0: value_caps[0]: got IsAbsolute 255, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[0]: got HasNull 40, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[0]: got BitSize 30183, expected 8 ntoskrnl.c:1903: Test failed: report 0: value_caps[0]: got ReportCount 0, expected 1 ntoskrnl.c:1904: Test failed: report 0: value_caps[0]: got UnitsExp 2289376, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[0]: got Units 42, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[0]: got LogicalMin 7012358, expected -128 ntoskrnl.c:1907: Test failed: report 0: value_caps[0]: got LogicalMax 1136, expected 127 ntoskrnl.c:1908: Test failed: report 0: value_caps[0]: got PhysicalMin -522186479, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[0]: got PhysicalMax -1030437350, expected 0 ntoskrnl.c:1911: Test failed: report 0: value_caps[0]: got NotRange.Usage 98b8, expected 0031 ntoskrnl.c:1912: Test failed: report 0: value_caps[0]: got NotRange.StringIndex 37544, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[0]: got NotRange.DesignatorIndex 1, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[0]: got NotRange.DataIndex 38472, expected 0 ntoskrnl.c:1889: Test failed: report 0: value_caps[1]: got UsagePage ef10, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[1]: got ReportID 34, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[1]: got BitField 10360, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[1]: got LinkCollection 30661, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[1]: got LinkUsage 9650, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[1]: got LinkUsagePage 0034, expected 0001 ntoskrnl.c:1900: Test failed: report 0: value_caps[1]: got IsAbsolute 0, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[1]: got HasNull 136, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[1]: got BitSize 34, expected 8 ntoskrnl.c:1903: Test failed: report 0: value_caps[1]: got ReportCount 38472, expected 1 ntoskrnl.c:1904: Test failed: report 0: value_caps[1]: got UnitsExp 2752512, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[1]: got Units 2009410423, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[1]: got LogicalMin 2012191579, expected -128 ntoskrnl.c:1907: Test failed: report 0: value_caps[1]: got LogicalMax 2290424, expected 127 ntoskrnl.c:1908: Test failed: report 0: value_caps[1]: got PhysicalMin 2753452, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[1]: got PhysicalMax 2752512, expected 0 ntoskrnl.c:1911: Test failed: report 0: value_caps[1]: got NotRange.Usage b670, expected 0030 ntoskrnl.c:1912: Test failed: report 0: value_caps[1]: got NotRange.StringIndex 11127, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[1]: got NotRange.DesignatorIndex 39747, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[1]: got NotRange.DataIndex 0, expected 1 ntoskrnl.c:1889: Test failed: report 0: value_caps[2]: got UsagePage 03ac, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[2]: got ReportID 42, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[2]: got BitField 0, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[2]: got LinkCollection 42, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[2]: got LinkUsage 0002, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[2]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1897: Test failed: report 0: value_caps[2]: got IsRange 104, expected 0 ntoskrnl.c:1898: Test failed: report 0: value_caps[2]: got IsStringRange 239, expected 0 ntoskrnl.c:1899: Test failed: report 0: value_caps[2]: got IsDesignatorRange 34, expected 0 ntoskrnl.c:1900: Test failed: report 0: value_caps[2]: got IsAbsolute 0, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[2]: got HasNull 36, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[2]: got BitSize 0, expected 4 ntoskrnl.c:1903: Test failed: report 0: value_caps[2]: got ReportCount 2580, expected 2 ntoskrnl.c:1904: Test failed: report 0: value_caps[2]: got UnitsExp 2, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[2]: got Units 36, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[2]: got LogicalMin 6294036, expected 1 ntoskrnl.c:1907: Test failed: report 0: value_caps[2]: got LogicalMax 1996288655, expected 8 ntoskrnl.c:1908: Test failed: report 0: value_caps[2]: got PhysicalMin -102027431, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[2]: got PhysicalMax 0, expected 8 ntoskrnl.c:1911: Test failed: report 0: value_caps[2]: got NotRange.Usage efb0, expected 0039 ntoskrnl.c:1912: Test failed: report 0: value_caps[2]: got NotRange.StringIndex 62087, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[2]: got NotRange.DesignatorIndex 62095, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[2]: got NotRange.DataIndex 12149, expected 10 ntoskrnl.c:1921: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1923: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1927: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1929: Test failed: report 0: HidP_GetSpecificValueCaps returned count 0, expected 336 ntoskrnl.c:1936: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1937: Test failed: report 0: HidP_GetSpecificValueCaps returned count 13, expected 336 ntoskrnl.c:1939: Test failed: report 0: got UsagePage 0000, expected ef28 ntoskrnl.c:1939: Test failed: report 0: got ReportID 0, expected 34 ntoskrnl.c:1939: Test failed: report 0: got BitField 36, expected 31424 ntoskrnl.c:1939: Test failed: report 0: got LinkCollection 0, expected 30192 ntoskrnl.c:1939: Test failed: report 0: got LinkUsage 1280, expected 6118 ntoskrnl.c:1939: Test failed: report 0: got LinkUsagePage 30470, expected 35886 ntoskrnl.c:1939: Test failed: report 0: got IsRange 0, expected 254 ntoskrnl.c:1939: Test failed: report 0: got IsStringRange 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got IsDesignatorRange 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got IsAbsolute 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got HasNull 0, expected 40 ntoskrnl.c:1939: Test failed: report 0: got BitSize 30470, expected 30183 ntoskrnl.c:1939: Test failed: report 0: got ReportCount 36, expected 0 ntoskrnl.c:1939: Test failed: report 0: got UnitsExp 6294048, expected 2289376 ntoskrnl.c:1939: Test failed: report 0: got Units 2289644, expected 42 ntoskrnl.c:1939: Test failed: report 0: got LogicalMin 1996308785, expected 7012358 ntoskrnl.c:1939: Test failed: report 0: got LogicalMax 1, expected 1136 ntoskrnl.c:1939: Test failed: report 0: got PhysicalMin 1996308741, expected -522186479 ntoskrnl.c:1939: Test failed: report 0: got PhysicalMax -102027479, expected -1030437350 ntoskrnl.c:1940: Test failed: report 0: got UsagePage 0001, expected ef10 ntoskrnl.c:1940: Test failed: report 0: got ReportID 0, expected 34 ntoskrnl.c:1940: Test failed: report 0: got BitField 61372, expected 10360 ntoskrnl.c:1940: Test failed: report 0: got LinkCollection 34, expected 30661 ntoskrnl.c:1940: Test failed: report 0: got LinkUsage 16645, expected 38480 ntoskrnl.c:1940: Test failed: report 0: got LinkUsagePage 30461, expected 52 ntoskrnl.c:1940: Test failed: report 0: got IsRange 224, expected 0 ntoskrnl.c:1940: Test failed: report 0: got IsStringRange 242, expected 0 ntoskrnl.c:1940: Test failed: report 0: got IsDesignatorRange 34, expected 0 ntoskrnl.c:1940: Test failed: report 0: got HasNull 213, expected 136 ntoskrnl.c:1940: Test failed: report 0: got BitSize 30462, expected 34 ntoskrnl.c:1940: Test failed: report 0: got ReportCount 33229, expected 38472 ntoskrnl.c:1940: Test failed: report 0: got UnitsExp 1996323026, expected 2752512 ntoskrnl.c:1940: Test failed: report 0: got Units 1, expected 2009410423 ntoskrnl.c:1940: Test failed: report 0: got LogicalMin 2289684, expected 2012191579 ntoskrnl.c:1940: Test failed: report 0: got LogicalMax 1, expected 2290424 ntoskrnl.c:1940: Test failed: report 0: got PhysicalMin 2290488, expected 2753452 ntoskrnl.c:1940: Test failed: report 0: got PhysicalMax 1996892448, expected 2752512 ntoskrnl.c:1941: Test failed: report 0: got UsagePage 0001, expected 03ac ntoskrnl.c:1941: Test failed: report 0: got ReportID 0, expected 42 ntoskrnl.c:1941: Test failed: report 0: got BitField 53874, expected 0 ntoskrnl.c:1941: Test failed: report 0: got LinkCollection 30460, expected 42 ntoskrnl.c:1941: Test failed: report 0: got LinkUsage 0, expected 2 ntoskrnl.c:1941: Test failed: report 0: got IsRange 32, expected 104 ntoskrnl.c:1941: Test failed: report 0: got IsStringRange 41, expected 239 ntoskrnl.c:1941: Test failed: report 0: got IsDesignatorRange 6, expected 34 ntoskrnl.c:1941: Test failed: report 0: got IsAbsolute 119, expected 0 ntoskrnl.c:1941: Test failed: report 0: got HasNull 24, expected 36 ntoskrnl.c:1941: Test failed: report 0: got BitSize 30460, expected 0 ntoskrnl.c:1941: Test failed: report 0: got ReportCount 51253, expected 2580 ntoskrnl.c:1941: Test failed: report 0: got UnitsExp 1996280434, expected 2 ntoskrnl.c:1941: Test failed: report 0: got Units 0, expected 36 ntoskrnl.c:1941: Test failed: report 0: got LogicalMin 1996892448, expected 6294036 ntoskrnl.c:1941: Test failed: report 0: got LogicalMax 0, expected 1996288655 ntoskrnl.c:1941: Test failed: report 0: got PhysicalMin 1996892448, expected -102027431 ntoskrnl.c:1941: Test failed: report 0: got Range.UsageMin 0000, expected efb0 ntoskrnl.c:1941: Test failed: report 0: got Range.UsageMax 0000, expected 0022 ntoskrnl.c:1941: Test failed: report 0: got Range.DataIndexMin 4800, expected 12149 ntoskrnl.c:1941: Test failed: report 0: got Range.DataIndexMax 96, expected 63979 ntoskrnl.c:1941: Test failed: report 0: got Range.StringMin 0, expected 62087 ntoskrnl.c:1941: Test failed: report 0: got Range.StringMax 0, expected 30460 ntoskrnl.c:1941: Test failed: report 0: got Range.DesignatorMin 11216, expected 62095 ntoskrnl.c:1941: Test failed: report 0: got Range.DesignatorMax 30470, expected 30460 ntoskrnl.c:1946: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1948: Test failed: report 0: got UsagePage 0000, expected 03ac ntoskrnl.c:1948: Test failed: report 0: got ReportID 0, expected 42 ntoskrnl.c:1948: Test failed: report 0: got BitField 36, expected 0 ntoskrnl.c:1948: Test failed: report 0: got LinkCollection 0, expected 42 ntoskrnl.c:1948: Test failed: report 0: got LinkUsage 1280, expected 2 ntoskrnl.c:1948: Test failed: report 0: got LinkUsagePage 30470, expected 0 ntoskrnl.c:1948: Test failed: report 0: got IsRange 0, expected 104 ntoskrnl.c:1948: Test failed: report 0: got IsStringRange 0, expected 239 ntoskrnl.c:1948: Test failed: report 0: got IsDesignatorRange 0, expected 34 ntoskrnl.c:1948: Test failed: report 0: got HasNull 0, expected 36 ntoskrnl.c:1948: Test failed: report 0: got BitSize 30470, expected 0 ntoskrnl.c:1948: Test failed: report 0: got ReportCount 36, expected 2580 ntoskrnl.c:1948: Test failed: report 0: got UnitsExp 6294048, expected 2 ntoskrnl.c:1948: Test failed: report 0: got Units 2289644, expected 36 ntoskrnl.c:1948: Test failed: report 0: got LogicalMin 1996308785, expected 6294036 ntoskrnl.c:1948: Test failed: report 0: got LogicalMax 1, expected 1996288655 ntoskrnl.c:1948: Test failed: report 0: got PhysicalMin 1996308741, expected -102027431 ntoskrnl.c:1948: Test failed: report 0: got PhysicalMax -102027479, expected 0 ntoskrnl.c:1953: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1954: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1958: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1959: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1963: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1964: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1969: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1971: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1973: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1976: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1981: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 Report validation errors: ntoskrnl.exe:ntoskrnl crashed (c0000005)
On 6/16/21 11:29 AM, Marvin wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=92614
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
ntoskrnl.exe: ntoskrnl.c:1232: Test failed: got 0 bus arrival messages ntoskrnl.c:1248: Test failed: got 0 bus arrival messages ntoskrnl.c:1274: Test failed: got 0 child arrival messages ntoskrnl.c:1281: Test failed: failed to get device, error 0x103 ntoskrnl.c:1282: Test failed: wrong class {4d36e97d-e325-11ce-bfc1-08002be10318} ntoskrnl.c:1285: Test failed: failed to get device ID, error 0x57 ntoskrnl.c:1286: Test failed: got ID "\x05" ntoskrnl.c:1290: Test failed: got error 0x57 ntoskrnl.c:1307: Test failed: got error 0x57 ntoskrnl.c:1312: Test failed: got error 0x57 ntoskrnl.c:1316: Test failed: got error 0x57 ntoskrnl.c:1317: Test failed: got type 6357104 ntoskrnl.c:1318: Test failed: got size 0 ntoskrnl.c:1323: Test failed: got error 0x57 ntoskrnl.c:1324: Test failed: got type 6357104 ntoskrnl.c:1325: Test failed: got size 0 ntoskrnl.c:1330: Test failed: got error 0x57 ntoskrnl.c:1357: Test failed: got 0 child arrival messages ntoskrnl.c:1358: Test failed: got 0 child removal messages ntoskrnl.c:1361: Test failed: got 0 ntoskrnl.c:1460: Test failed: failed to get device list, error 0xd ntoskrnl.c:290: Test failed: expected SERVICE_STOPPED, got 4 ntoskrnl.c:2119: Test failed: failed to install device, error 0x430 ntoskrnl.c:2034: Test failed: report 0: didn't find device ntoskrnl.c:2038: Test failed: report 0: got error 123 ntoskrnl.c:1743: Test failed: report 0: HidD_GetPreparsedData failed with error 6 ntoskrnl.c:1749: Test failed: report 0: HidP_GetCaps returned 0xc0110001 ntoskrnl.c:1750: Test failed: report 0: got Usage 0000, expected 0004 ntoskrnl.c:1750: Test failed: report 0: got UsagePage 002a, expected 0001 ntoskrnl.c:1750: Test failed: report 0: got InputReportByteLength 15088, expected 5 ntoskrnl.c:1750: Test failed: report 0: got OutputReportByteLength 47, expected 0 ntoskrnl.c:1750: Test failed: report 0: got FeatureReportByteLength 336, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberLinkCollectionNodes 0, expected 2 ntoskrnl.c:1750: Test failed: report 0: got NumberInputButtonCaps 42, expected 1 ntoskrnl.c:1750: Test failed: report 0: got NumberInputValueCaps 336, expected 3 ntoskrnl.c:1750: Test failed: report 0: got NumberInputDataIndices 42, expected 11 ntoskrnl.c:1750: Test failed: report 0: got NumberOutputDataIndices 79, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberFeatureValueCaps 336, expected 0 ntoskrnl.c:1750: Test failed: report 0: got NumberFeatureDataIndices 42, expected 0 ntoskrnl.c:1754: Test failed: report 0: HidP_GetLinkCollectionNodes returned 0xc0110001 ntoskrnl.c:1762: Test failed: report 0: HidP_GetLinkCollectionNodes returned 0xc0110001 ntoskrnl.c:1763: Test failed: report 0: got 16 collection nodes, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got LinkUsage 77d5, expected 0004 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got LinkUsagePage 76c7, expected 0001 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got Parent 99, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got NumberOfChildren 0, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got NextSibling 63371, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got FirstChild 30408, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got CollectionType 64, expected 1 ntoskrnl.c:1769: Test failed: report 0: collections[0]: got IsAlias 1, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got LinkUsage 0000, expected 0004 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got Parent 19396, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got NumberOfChildren 55, expected 0 ntoskrnl.c:1769: Test failed: report 0: collections[1]: got CollectionType 160, expected 2 ntoskrnl.c:1776: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1778: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1782: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1784: Test failed: report 0: HidP_GetButtonCaps returned count 0, expected 42 ntoskrnl.c:1790: Test failed: report 0: HidP_GetButtonCaps returned 0xc0110001 ntoskrnl.c:1791: Test failed: report 0: HidP_GetButtonCaps returned count 16, expected 42 ntoskrnl.c:1797: Test failed: report 0: button_caps[0]: got UsagePage 0001, expected 0009 ntoskrnl.c:1801: Test failed: report 0: button_caps[0]: got BitField 61460, expected 2 ntoskrnl.c:1802: Test failed: report 0: button_caps[0]: got LinkCollection 34, expected 1 ntoskrnl.c:1803: Test failed: report 0: button_caps[0]: got LinkUsage 0002, expected 0004 ntoskrnl.c:1804: Test failed: report 0: button_caps[0]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1805: Test failed: report 0: button_caps[0]: got IsRange 0, expected 1 ntoskrnl.c:1808: Test failed: report 0: button_caps[0]: got IsAbsolute 0, expected 1 ntoskrnl.c:1809: Test failed: report 0: button_caps[0]: got Range.UsageMin 0000, expected 0001 ntoskrnl.c:1810: Test failed: report 0: button_caps[0]: got Range.UsageMax 0000, expected 0008 ntoskrnl.c:1815: Test failed: report 0: button_caps[0]: got Range.DataIndexMin 0, expected 2 ntoskrnl.c:1816: Test failed: report 0: button_caps[0]: got Range.DataIndexMax 0, expected 9 ntoskrnl.c:1823: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1825: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1829: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1831: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 0, expected 42 ntoskrnl.c:1838: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1839: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 15, expected 42 ntoskrnl.c:1841: Test failed: report 0: got UsagePage 0000, expected 0001 ntoskrnl.c:1841: Test failed: report 0: got BitField 0, expected 61460 ntoskrnl.c:1841: Test failed: report 0: got LinkCollection 0, expected 34 ntoskrnl.c:1841: Test failed: report 0: got LinkUsage 0000, expected 0002 ntoskrnl.c:1845: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1846: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 15, expected 1 ntoskrnl.c:1847: Test failed: report 0: got UsagePage 0000, expected 0001 ntoskrnl.c:1847: Test failed: report 0: got BitField 0, expected 61460 ntoskrnl.c:1847: Test failed: report 0: got LinkCollection 0, expected 34 ntoskrnl.c:1847: Test failed: report 0: got LinkUsage 0000, expected 0002 ntoskrnl.c:1852: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1853: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1857: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1858: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1862: Test failed: report 0: HidP_GetSpecificButtonCaps returned 0xc0110001 ntoskrnl.c:1863: Test failed: report 0: HidP_GetSpecificButtonCaps returned count 48879, expected 0 ntoskrnl.c:1868: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1870: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1874: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1876: Test failed: report 0: HidP_GetValueCaps returned count 0, expected 336 ntoskrnl.c:1882: Test failed: report 0: HidP_GetValueCaps returned 0xc0110001 ntoskrnl.c:1883: Test failed: report 0: HidP_GetValueCaps returned count 16, expected 336 ntoskrnl.c:1889: Test failed: report 0: value_caps[0]: got UsagePage ef28, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[0]: got ReportID 34, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[0]: got BitField 31424, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[0]: got LinkCollection 30192, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[0]: got LinkUsage 17e6, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[0]: got LinkUsagePage 8c2e, expected 0001 ntoskrnl.c:1897: Test failed: report 0: value_caps[0]: got IsRange 254, expected 0 ntoskrnl.c:1898: Test failed: report 0: value_caps[0]: got IsStringRange 255, expected 0 ntoskrnl.c:1899: Test failed: report 0: value_caps[0]: got IsDesignatorRange 255, expected 0 ntoskrnl.c:1900: Test failed: report 0: value_caps[0]: got IsAbsolute 255, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[0]: got HasNull 40, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[0]: got BitSize 30183, expected 8 ntoskrnl.c:1903: Test failed: report 0: value_caps[0]: got ReportCount 0, expected 1 ntoskrnl.c:1904: Test failed: report 0: value_caps[0]: got UnitsExp 2289376, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[0]: got Units 42, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[0]: got LogicalMin 7012358, expected -128 ntoskrnl.c:1907: Test failed: report 0: value_caps[0]: got LogicalMax 1136, expected 127 ntoskrnl.c:1908: Test failed: report 0: value_caps[0]: got PhysicalMin -522186479, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[0]: got PhysicalMax -1030437350, expected 0 ntoskrnl.c:1911: Test failed: report 0: value_caps[0]: got NotRange.Usage 98b8, expected 0031 ntoskrnl.c:1912: Test failed: report 0: value_caps[0]: got NotRange.StringIndex 37544, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[0]: got NotRange.DesignatorIndex 1, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[0]: got NotRange.DataIndex 38472, expected 0 ntoskrnl.c:1889: Test failed: report 0: value_caps[1]: got UsagePage ef10, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[1]: got ReportID 34, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[1]: got BitField 10360, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[1]: got LinkCollection 30661, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[1]: got LinkUsage 9650, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[1]: got LinkUsagePage 0034, expected 0001 ntoskrnl.c:1900: Test failed: report 0: value_caps[1]: got IsAbsolute 0, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[1]: got HasNull 136, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[1]: got BitSize 34, expected 8 ntoskrnl.c:1903: Test failed: report 0: value_caps[1]: got ReportCount 38472, expected 1 ntoskrnl.c:1904: Test failed: report 0: value_caps[1]: got UnitsExp 2752512, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[1]: got Units 2009410423, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[1]: got LogicalMin 2012191579, expected -128 ntoskrnl.c:1907: Test failed: report 0: value_caps[1]: got LogicalMax 2290424, expected 127 ntoskrnl.c:1908: Test failed: report 0: value_caps[1]: got PhysicalMin 2753452, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[1]: got PhysicalMax 2752512, expected 0 ntoskrnl.c:1911: Test failed: report 0: value_caps[1]: got NotRange.Usage b670, expected 0030 ntoskrnl.c:1912: Test failed: report 0: value_caps[1]: got NotRange.StringIndex 11127, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[1]: got NotRange.DesignatorIndex 39747, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[1]: got NotRange.DataIndex 0, expected 1 ntoskrnl.c:1889: Test failed: report 0: value_caps[2]: got UsagePage 03ac, expected 0001 ntoskrnl.c:1890: Test failed: report 0: value_caps[2]: got ReportID 42, expected 0 ntoskrnl.c:1893: Test failed: report 0: value_caps[2]: got BitField 0, expected 2 ntoskrnl.c:1894: Test failed: report 0: value_caps[2]: got LinkCollection 42, expected 1 ntoskrnl.c:1895: Test failed: report 0: value_caps[2]: got LinkUsage 0002, expected 0004 ntoskrnl.c:1896: Test failed: report 0: value_caps[2]: got LinkUsagePage 0000, expected 0001 ntoskrnl.c:1897: Test failed: report 0: value_caps[2]: got IsRange 104, expected 0 ntoskrnl.c:1898: Test failed: report 0: value_caps[2]: got IsStringRange 239, expected 0 ntoskrnl.c:1899: Test failed: report 0: value_caps[2]: got IsDesignatorRange 34, expected 0 ntoskrnl.c:1900: Test failed: report 0: value_caps[2]: got IsAbsolute 0, expected 1 ntoskrnl.c:1901: Test failed: report 0: value_caps[2]: got HasNull 36, expected 0 ntoskrnl.c:1902: Test failed: report 0: value_caps[2]: got BitSize 0, expected 4 ntoskrnl.c:1903: Test failed: report 0: value_caps[2]: got ReportCount 2580, expected 2 ntoskrnl.c:1904: Test failed: report 0: value_caps[2]: got UnitsExp 2, expected 0 ntoskrnl.c:1905: Test failed: report 0: value_caps[2]: got Units 36, expected 0 ntoskrnl.c:1906: Test failed: report 0: value_caps[2]: got LogicalMin 6294036, expected 1 ntoskrnl.c:1907: Test failed: report 0: value_caps[2]: got LogicalMax 1996288655, expected 8 ntoskrnl.c:1908: Test failed: report 0: value_caps[2]: got PhysicalMin -102027431, expected 0 ntoskrnl.c:1909: Test failed: report 0: value_caps[2]: got PhysicalMax 0, expected 8 ntoskrnl.c:1911: Test failed: report 0: value_caps[2]: got NotRange.Usage efb0, expected 0039 ntoskrnl.c:1912: Test failed: report 0: value_caps[2]: got NotRange.StringIndex 62087, expected 0 ntoskrnl.c:1913: Test failed: report 0: value_caps[2]: got NotRange.DesignatorIndex 62095, expected 0 ntoskrnl.c:1914: Test failed: report 0: value_caps[2]: got NotRange.DataIndex 12149, expected 10 ntoskrnl.c:1921: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1923: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1927: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1929: Test failed: report 0: HidP_GetSpecificValueCaps returned count 0, expected 336 ntoskrnl.c:1936: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1937: Test failed: report 0: HidP_GetSpecificValueCaps returned count 13, expected 336 ntoskrnl.c:1939: Test failed: report 0: got UsagePage 0000, expected ef28 ntoskrnl.c:1939: Test failed: report 0: got ReportID 0, expected 34 ntoskrnl.c:1939: Test failed: report 0: got BitField 36, expected 31424 ntoskrnl.c:1939: Test failed: report 0: got LinkCollection 0, expected 30192 ntoskrnl.c:1939: Test failed: report 0: got LinkUsage 1280, expected 6118 ntoskrnl.c:1939: Test failed: report 0: got LinkUsagePage 30470, expected 35886 ntoskrnl.c:1939: Test failed: report 0: got IsRange 0, expected 254 ntoskrnl.c:1939: Test failed: report 0: got IsStringRange 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got IsDesignatorRange 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got IsAbsolute 0, expected 255 ntoskrnl.c:1939: Test failed: report 0: got HasNull 0, expected 40 ntoskrnl.c:1939: Test failed: report 0: got BitSize 30470, expected 30183 ntoskrnl.c:1939: Test failed: report 0: got ReportCount 36, expected 0 ntoskrnl.c:1939: Test failed: report 0: got UnitsExp 6294048, expected 2289376 ntoskrnl.c:1939: Test failed: report 0: got Units 2289644, expected 42 ntoskrnl.c:1939: Test failed: report 0: got LogicalMin 1996308785, expected 7012358 ntoskrnl.c:1939: Test failed: report 0: got LogicalMax 1, expected 1136 ntoskrnl.c:1939: Test failed: report 0: got PhysicalMin 1996308741, expected -522186479 ntoskrnl.c:1939: Test failed: report 0: got PhysicalMax -102027479, expected -1030437350 ntoskrnl.c:1940: Test failed: report 0: got UsagePage 0001, expected ef10 ntoskrnl.c:1940: Test failed: report 0: got ReportID 0, expected 34 ntoskrnl.c:1940: Test failed: report 0: got BitField 61372, expected 10360 ntoskrnl.c:1940: Test failed: report 0: got LinkCollection 34, expected 30661 ntoskrnl.c:1940: Test failed: report 0: got LinkUsage 16645, expected 38480 ntoskrnl.c:1940: Test failed: report 0: got LinkUsagePage 30461, expected 52 ntoskrnl.c:1940: Test failed: report 0: got IsRange 224, expected 0 ntoskrnl.c:1940: Test failed: report 0: got IsStringRange 242, expected 0 ntoskrnl.c:1940: Test failed: report 0: got IsDesignatorRange 34, expected 0 ntoskrnl.c:1940: Test failed: report 0: got HasNull 213, expected 136 ntoskrnl.c:1940: Test failed: report 0: got BitSize 30462, expected 34 ntoskrnl.c:1940: Test failed: report 0: got ReportCount 33229, expected 38472 ntoskrnl.c:1940: Test failed: report 0: got UnitsExp 1996323026, expected 2752512 ntoskrnl.c:1940: Test failed: report 0: got Units 1, expected 2009410423 ntoskrnl.c:1940: Test failed: report 0: got LogicalMin 2289684, expected 2012191579 ntoskrnl.c:1940: Test failed: report 0: got LogicalMax 1, expected 2290424 ntoskrnl.c:1940: Test failed: report 0: got PhysicalMin 2290488, expected 2753452 ntoskrnl.c:1940: Test failed: report 0: got PhysicalMax 1996892448, expected 2752512 ntoskrnl.c:1941: Test failed: report 0: got UsagePage 0001, expected 03ac ntoskrnl.c:1941: Test failed: report 0: got ReportID 0, expected 42 ntoskrnl.c:1941: Test failed: report 0: got BitField 53874, expected 0 ntoskrnl.c:1941: Test failed: report 0: got LinkCollection 30460, expected 42 ntoskrnl.c:1941: Test failed: report 0: got LinkUsage 0, expected 2 ntoskrnl.c:1941: Test failed: report 0: got IsRange 32, expected 104 ntoskrnl.c:1941: Test failed: report 0: got IsStringRange 41, expected 239 ntoskrnl.c:1941: Test failed: report 0: got IsDesignatorRange 6, expected 34 ntoskrnl.c:1941: Test failed: report 0: got IsAbsolute 119, expected 0 ntoskrnl.c:1941: Test failed: report 0: got HasNull 24, expected 36 ntoskrnl.c:1941: Test failed: report 0: got BitSize 30460, expected 0 ntoskrnl.c:1941: Test failed: report 0: got ReportCount 51253, expected 2580 ntoskrnl.c:1941: Test failed: report 0: got UnitsExp 1996280434, expected 2 ntoskrnl.c:1941: Test failed: report 0: got Units 0, expected 36 ntoskrnl.c:1941: Test failed: report 0: got LogicalMin 1996892448, expected 6294036 ntoskrnl.c:1941: Test failed: report 0: got LogicalMax 0, expected 1996288655 ntoskrnl.c:1941: Test failed: report 0: got PhysicalMin 1996892448, expected -102027431 ntoskrnl.c:1941: Test failed: report 0: got Range.UsageMin 0000, expected efb0 ntoskrnl.c:1941: Test failed: report 0: got Range.UsageMax 0000, expected 0022 ntoskrnl.c:1941: Test failed: report 0: got Range.DataIndexMin 4800, expected 12149 ntoskrnl.c:1941: Test failed: report 0: got Range.DataIndexMax 96, expected 63979 ntoskrnl.c:1941: Test failed: report 0: got Range.StringMin 0, expected 62087 ntoskrnl.c:1941: Test failed: report 0: got Range.StringMax 0, expected 30460 ntoskrnl.c:1941: Test failed: report 0: got Range.DesignatorMin 11216, expected 62095 ntoskrnl.c:1941: Test failed: report 0: got Range.DesignatorMax 30470, expected 30460 ntoskrnl.c:1946: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1948: Test failed: report 0: got UsagePage 0000, expected 03ac ntoskrnl.c:1948: Test failed: report 0: got ReportID 0, expected 42 ntoskrnl.c:1948: Test failed: report 0: got BitField 36, expected 0 ntoskrnl.c:1948: Test failed: report 0: got LinkCollection 0, expected 42 ntoskrnl.c:1948: Test failed: report 0: got LinkUsage 1280, expected 2 ntoskrnl.c:1948: Test failed: report 0: got LinkUsagePage 30470, expected 0 ntoskrnl.c:1948: Test failed: report 0: got IsRange 0, expected 104 ntoskrnl.c:1948: Test failed: report 0: got IsStringRange 0, expected 239 ntoskrnl.c:1948: Test failed: report 0: got IsDesignatorRange 0, expected 34 ntoskrnl.c:1948: Test failed: report 0: got HasNull 0, expected 36 ntoskrnl.c:1948: Test failed: report 0: got BitSize 30470, expected 0 ntoskrnl.c:1948: Test failed: report 0: got ReportCount 36, expected 2580 ntoskrnl.c:1948: Test failed: report 0: got UnitsExp 6294048, expected 2 ntoskrnl.c:1948: Test failed: report 0: got Units 2289644, expected 36 ntoskrnl.c:1948: Test failed: report 0: got LogicalMin 1996308785, expected 6294036 ntoskrnl.c:1948: Test failed: report 0: got LogicalMax 1, expected 1996288655 ntoskrnl.c:1948: Test failed: report 0: got PhysicalMin 1996308741, expected -102027431 ntoskrnl.c:1948: Test failed: report 0: got PhysicalMax -102027479, expected 0 ntoskrnl.c:1953: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1954: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1958: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1959: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1963: Test failed: report 0: HidP_GetSpecificValueCaps returned 0xc0110001 ntoskrnl.c:1964: Test failed: report 0: HidP_GetSpecificValueCaps returned count 57005, expected 0 ntoskrnl.c:1969: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1971: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1973: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1976: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001 ntoskrnl.c:1981: Test failed: report 0: HidP_InitializeReportForID returned 0xc0110001
Report validation errors: ntoskrnl.exe:ntoskrnl crashed (c0000005)
Well, not so less frequent I guess, but this is still caused by some failure to add the devices and it happens already now. Next patch succeeds there for instance (except for the bus arrival messages like I said): https://testbot.winehq.org/JobDetails.pl?Key=92615 -- Rémi Bernon <rbernon(a)codeweavers.com>
On 6/16/21 4:37 AM, Rémi Bernon wrote:
Well, not so less frequent I guess, but this is still caused by some failure to add the devices and it happens already now.
Next patch succeeds there for instance (except for the bus arrival messages like I said):
I think the problem may just be that Windows sometimes takes a *long* time to install PnP drivers. Not sure what it's spending all that time doing, but we may have to increase some timeouts...
On 6/16/21 4:42 PM, Zebediah Figura (she/her) wrote:
On 6/16/21 4:37 AM, Rémi Bernon wrote:
Well, not so less frequent I guess, but this is still caused by some failure to add the devices and it happens already now.
Next patch succeeds there for instance (except for the bus arrival messages like I said):
I think the problem may just be that Windows sometimes takes a *long* time to install PnP drivers. Not sure what it's spending all that time doing, but we may have to increase some timeouts...
I've tried increasing the timeouts to things like 1s, and it didn't help. Maybe it's still too low though. -- Rémi Bernon <rbernon(a)codeweavers.com>
On 6/16/21 10:20 AM, Rémi Bernon wrote:
On 6/16/21 4:42 PM, Zebediah Figura (she/her) wrote:
On 6/16/21 4:37 AM, Rémi Bernon wrote:
Well, not so less frequent I guess, but this is still caused by some failure to add the devices and it happens already now.
Next patch succeeds there for instance (except for the bus arrival messages like I said):
I think the problem may just be that Windows sometimes takes a *long* time to install PnP drivers. Not sure what it's spending all that time doing, but we may have to increase some timeouts...
I've tried increasing the timeouts to things like 1s, and it didn't help. Maybe it's still too low though.
1s is probably not even close to enough. I'd try 30s for a start. Though measuring the actual time is probably a good idea too. (Yes, it's a long time, and that sucks, but I think the benefits far outweigh the costs. Plus most of the test VMs don't seem to take nearly that long.)
participants (3)
-
Marvin -
Rémi Bernon -
Zebediah Figura (she/her)