Commit b65a76de authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

winebus.sys: Add a repeat count value to haptics output report.

parent c2c730a3
......@@ -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());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment