winebus.sys: Add a repeat count value to haptics output report.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c2c730a330
commit
b65a76de53
|
@ -314,6 +314,7 @@ struct hid_haptics_waveform
|
|||
{
|
||||
UINT16 intensity;
|
||||
BYTE manual_trigger;
|
||||
BYTE repeat_count;
|
||||
};
|
||||
#include "poppack.h"
|
||||
|
||||
|
@ -373,6 +374,13 @@ BOOL hid_device_add_haptics(struct unix_device *iface)
|
|||
REPORT_SIZE(1, 8),
|
||||
REPORT_COUNT(1, 1),
|
||||
OUTPUT(1, Data|Var|Abs),
|
||||
|
||||
USAGE(1, HID_USAGE_HAPTICS_REPEAT_COUNT),
|
||||
LOGICAL_MINIMUM(1, 0),
|
||||
LOGICAL_MAXIMUM(1, 1),
|
||||
REPORT_SIZE(1, 8),
|
||||
REPORT_COUNT(1, 1),
|
||||
OUTPUT(1, Data|Var|Abs),
|
||||
END_COLLECTION,
|
||||
};
|
||||
|
||||
|
@ -1066,7 +1074,8 @@ static void hid_device_set_output_report(struct unix_device *iface, HID_XFER_PAC
|
|||
{
|
||||
haptics->waveform_intensity[report->manual_trigger] = report->intensity;
|
||||
duration_ms = haptics->features.waveform_cutoff_time_ms;
|
||||
io->Status = iface->hid_vtbl->haptics_start(iface, duration_ms, *rumble_intensity, *buzz_intensity);
|
||||
if (!report->repeat_count) io->Status = STATUS_SUCCESS;
|
||||
else io->Status = iface->hid_vtbl->haptics_start(iface, duration_ms, *rumble_intensity, *buzz_intensity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -320,6 +320,9 @@ static DWORD HID_set_state(struct xinput_controller *controller, XINPUT_VIBRATIO
|
|||
status = HidP_SetUsageValue(HidP_Output, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_MANUAL_TRIGGER,
|
||||
controller->hid.haptics_rumble_ordinal, preparsed, report_buf, report_len);
|
||||
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_SetUsageValue MANUAL_TRIGGER returned %#lx\n", status);
|
||||
status = HidP_SetUsageValue(HidP_Output, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_REPEAT_COUNT,
|
||||
1, preparsed, report_buf, report_len);
|
||||
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_SetUsageValue REPEAT_COUNT returned %#lx\n", status);
|
||||
if (!HidD_SetOutputReport(controller->device, report_buf, report_len))
|
||||
{
|
||||
WARN("HidD_SetOutputReport failed with error %lu\n", GetLastError());
|
||||
|
@ -335,6 +338,9 @@ static DWORD HID_set_state(struct xinput_controller *controller, XINPUT_VIBRATIO
|
|||
status = HidP_SetUsageValue(HidP_Output, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_MANUAL_TRIGGER,
|
||||
controller->hid.haptics_buzz_ordinal, preparsed, report_buf, report_len);
|
||||
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_SetUsageValue MANUAL_TRIGGER returned %#lx\n", status);
|
||||
status = HidP_SetUsageValue(HidP_Output, HID_USAGE_PAGE_HAPTICS, 0, HID_USAGE_HAPTICS_REPEAT_COUNT,
|
||||
1, preparsed, report_buf, report_len);
|
||||
if (status != HIDP_STATUS_SUCCESS) WARN("HidP_SetUsageValue REPEAT_COUNT returned %#lx\n", status);
|
||||
if (!HidD_SetOutputReport(controller->device, report_buf, report_len))
|
||||
{
|
||||
WARN("HidD_SetOutputReport failed with error %lu\n", GetLastError());
|
||||
|
|
Loading…
Reference in New Issue