hid: Return HIDP_STATUS_INCOMPATIBLE_REPORT_ID when id mismatches.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0d915de46d
commit
28bbaf6707
|
@ -96,13 +96,14 @@ static NTSTATUS enum_value_caps( WINE_HIDP_PREPARSED_DATA *preparsed, HIDP_REPOR
|
||||||
{
|
{
|
||||||
const struct hid_value_caps *caps, *caps_end;
|
const struct hid_value_caps *caps, *caps_end;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
|
BOOL incompatible = FALSE;
|
||||||
LONG remaining = *count;
|
LONG remaining = *count;
|
||||||
|
|
||||||
for (status = get_value_caps_range( preparsed, report_type, report_len, &caps, &caps_end );
|
for (status = get_value_caps_range( preparsed, report_type, report_len, &caps, &caps_end );
|
||||||
status == HIDP_STATUS_SUCCESS && caps != caps_end; caps++)
|
status == HIDP_STATUS_SUCCESS && caps != caps_end; caps++)
|
||||||
{
|
{
|
||||||
if (!match_value_caps( caps, filter )) continue;
|
if (!match_value_caps( caps, filter )) continue;
|
||||||
if (filter->report_id && caps->report_id != filter->report_id) continue;
|
if (filter->report_id && caps->report_id != filter->report_id) incompatible = TRUE;
|
||||||
else if (filter->array && (caps->is_range || caps->report_count <= 1)) return HIDP_STATUS_NOT_VALUE_ARRAY;
|
else if (filter->array && (caps->is_range || caps->report_count <= 1)) return HIDP_STATUS_NOT_VALUE_ARRAY;
|
||||||
else if (remaining-- > 0) status = callback( caps, user );
|
else if (remaining-- > 0) status = callback( caps, user );
|
||||||
}
|
}
|
||||||
|
@ -111,7 +112,7 @@ static NTSTATUS enum_value_caps( WINE_HIDP_PREPARSED_DATA *preparsed, HIDP_REPOR
|
||||||
if (status != HIDP_STATUS_SUCCESS) return status;
|
if (status != HIDP_STATUS_SUCCESS) return status;
|
||||||
|
|
||||||
*count -= remaining;
|
*count -= remaining;
|
||||||
if (*count == 0) return HIDP_STATUS_USAGE_NOT_FOUND;
|
if (*count == 0) return incompatible ? HIDP_STATUS_INCOMPATIBLE_REPORT_ID : HIDP_STATUS_USAGE_NOT_FOUND;
|
||||||
if (remaining < 0) return HIDP_STATUS_BUFFER_TOO_SMALL;
|
if (remaining < 0) return HIDP_STATUS_BUFFER_TOO_SMALL;
|
||||||
return HIDP_STATUS_SUCCESS;
|
return HIDP_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2292,14 +2292,12 @@ static void test_hidp(HANDLE file, int report_id)
|
||||||
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3,
|
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3,
|
||||||
HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report,
|
HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report,
|
||||||
caps.FeatureReportByteLength);
|
caps.FeatureReportByteLength);
|
||||||
todo_wine_if(!report_id)
|
|
||||||
ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID),
|
ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID),
|
||||||
"HidP_SetUsageValue returned %#x\n", status);
|
"HidP_SetUsageValue returned %#x\n", status);
|
||||||
report[0] = 2;
|
report[0] = 2;
|
||||||
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3,
|
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3,
|
||||||
HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report,
|
HID_USAGE_HAPTICS_WAVEFORM_RUMBLE, preparsed_data, report,
|
||||||
caps.FeatureReportByteLength);
|
caps.FeatureReportByteLength);
|
||||||
todo_wine
|
|
||||||
ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_SetUsageValue returned %#x\n", status);
|
ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_SetUsageValue returned %#x\n", status);
|
||||||
report[0] = report_id;
|
report[0] = report_id;
|
||||||
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, HID_USAGE_HAPTICS_WAVEFORM_RUMBLE,
|
status = HidP_SetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, HID_USAGE_HAPTICS_WAVEFORM_RUMBLE,
|
||||||
|
@ -2330,13 +2328,11 @@ static void test_hidp(HANDLE file, int report_id)
|
||||||
report[0] = 1 - report_id;
|
report[0] = 1 - report_id;
|
||||||
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value,
|
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value,
|
||||||
preparsed_data, report, caps.FeatureReportByteLength);
|
preparsed_data, report, caps.FeatureReportByteLength);
|
||||||
todo_wine_if(!report_id)
|
|
||||||
ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID),
|
ok(status == (report_id ? HIDP_STATUS_SUCCESS : HIDP_STATUS_INCOMPATIBLE_REPORT_ID),
|
||||||
"HidP_GetUsageValue returned %#x\n", status);
|
"HidP_GetUsageValue returned %#x\n", status);
|
||||||
report[0] = 2;
|
report[0] = 2;
|
||||||
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value,
|
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, waveform_list, 3, &value,
|
||||||
preparsed_data, report, caps.FeatureReportByteLength);
|
preparsed_data, report, caps.FeatureReportByteLength);
|
||||||
todo_wine
|
|
||||||
ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_GetUsageValue returned %#x\n", status);
|
ok(status == HIDP_STATUS_INCOMPATIBLE_REPORT_ID, "HidP_GetUsageValue returned %#x\n", status);
|
||||||
report[0] = report_id;
|
report[0] = report_id;
|
||||||
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, &value,
|
status = HidP_GetUsageValue(HidP_Feature, HID_USAGE_PAGE_ORDINAL, 0xdead, 3, &value,
|
||||||
|
|
Loading…
Reference in New Issue