Rémi Bernon : winebus.sys: Pack the HID haptics waveform report struct.
Alexandre Julliard
julliard at winehq.org
Tue Feb 15 16:07:20 CST 2022
Module: wine
Branch: master
Commit: c2c730a3302d1b0e1e559a7c675ffa2446be4180
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c2c730a3302d1b0e1e559a7c675ffa2446be4180
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Tue Feb 15 09:03:39 2022 +0100
winebus.sys: Pack the HID haptics waveform report struct.
And only keep previously set waveform intensity in the device state.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winebus.sys/hid.c | 40 ++++++++++++++++++++++++----------------
dlls/winebus.sys/unix_private.h | 8 +-------
2 files changed, 25 insertions(+), 23 deletions(-)
diff --git a/dlls/winebus.sys/hid.c b/dlls/winebus.sys/hid.c
index 529ca97aa7a..d308e7f276b 100644
--- a/dlls/winebus.sys/hid.c
+++ b/dlls/winebus.sys/hid.c
@@ -309,6 +309,14 @@ BOOL hid_device_add_axes(struct unix_device *iface, BYTE count, USAGE usage_page
return TRUE;
}
+#include "pshpack1.h"
+struct hid_haptics_waveform
+{
+ UINT16 intensity;
+ BYTE manual_trigger;
+};
+#include "poppack.h"
+
BOOL hid_device_add_haptics(struct unix_device *iface)
{
struct hid_report_descriptor *desc = &iface->hid_report_descriptor;
@@ -352,19 +360,19 @@ BOOL hid_device_add_haptics(struct unix_device *iface)
UNIT_EXPONENT(1, 0),
REPORT_ID(1, haptics_waveform_report),
- USAGE(1, HID_USAGE_HAPTICS_MANUAL_TRIGGER),
- LOGICAL_MINIMUM(1, 1),
- LOGICAL_MAXIMUM(1, 4),
- REPORT_SIZE(1, 16),
- REPORT_COUNT(1, 1),
- OUTPUT(1, Data|Var|Abs),
-
USAGE(1, HID_USAGE_HAPTICS_INTENSITY),
LOGICAL_MINIMUM(4, 0x00000000),
LOGICAL_MAXIMUM(4, 0x0000ffff),
REPORT_SIZE(1, 16),
REPORT_COUNT(1, 1),
OUTPUT(1, Data|Var|Abs),
+
+ USAGE(1, HID_USAGE_HAPTICS_MANUAL_TRIGGER),
+ LOGICAL_MINIMUM(1, HAPTICS_WAVEFORM_NONE_ORDINAL),
+ LOGICAL_MAXIMUM(1, HAPTICS_WAVEFORM_LAST_ORDINAL),
+ REPORT_SIZE(1, 8),
+ REPORT_COUNT(1, 1),
+ OUTPUT(1, Data|Var|Abs),
END_COLLECTION,
};
@@ -1037,28 +1045,28 @@ static void hid_device_set_output_report(struct unix_device *iface, HID_XFER_PAC
if (packet->reportId == haptics->waveform_report)
{
- struct hid_haptics_waveform *waveform = (struct hid_haptics_waveform *)(packet->reportBuffer + 1);
- struct hid_haptics_waveform *rumble = haptics->waveforms + HAPTICS_WAVEFORM_RUMBLE_ORDINAL;
- struct hid_haptics_waveform *buzz = haptics->waveforms + HAPTICS_WAVEFORM_BUZZ_ORDINAL;
+ struct hid_haptics_waveform *report = (struct hid_haptics_waveform *)(packet->reportBuffer + 1);
+ UINT16 *rumble_intensity = haptics->waveform_intensity + HAPTICS_WAVEFORM_RUMBLE_ORDINAL;
+ UINT16 *buzz_intensity = haptics->waveform_intensity + HAPTICS_WAVEFORM_BUZZ_ORDINAL;
ULONG duration_ms;
- io->Information = sizeof(*waveform) + 1;
+ io->Information = sizeof(*report) + 1;
assert(packet->reportBufferLen == io->Information);
- if (waveform->manual_trigger == 0 || waveform->manual_trigger > HAPTICS_WAVEFORM_LAST_ORDINAL)
+ if (report->manual_trigger == 0 || report->manual_trigger > HAPTICS_WAVEFORM_LAST_ORDINAL)
io->Status = STATUS_INVALID_PARAMETER;
else
{
- if (waveform->manual_trigger == HAPTICS_WAVEFORM_STOP_ORDINAL)
+ if (report->manual_trigger == HAPTICS_WAVEFORM_STOP_ORDINAL)
{
- memset(haptics->waveforms, 0, sizeof(haptics->waveforms));
+ memset(haptics->waveform_intensity, 0, sizeof(haptics->waveform_intensity));
io->Status = iface->hid_vtbl->haptics_stop(iface);
}
else
{
- haptics->waveforms[waveform->manual_trigger] = *waveform;
+ 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);
+ io->Status = iface->hid_vtbl->haptics_start(iface, duration_ms, *rumble_intensity, *buzz_intensity);
}
}
}
diff --git a/dlls/winebus.sys/unix_private.h b/dlls/winebus.sys/unix_private.h
index 6b498c46ad7..04545b7eb98 100644
--- a/dlls/winebus.sys/unix_private.h
+++ b/dlls/winebus.sys/unix_private.h
@@ -144,16 +144,10 @@ struct hid_haptics_features
UINT waveform_cutoff_time_ms;
};
-struct hid_haptics_waveform
-{
- WORD manual_trigger;
- WORD intensity;
-};
-
struct hid_haptics
{
struct hid_haptics_features features;
- struct hid_haptics_waveform waveforms[HAPTICS_WAVEFORM_LAST_ORDINAL + 1];
+ UINT16 waveform_intensity[HAPTICS_WAVEFORM_LAST_ORDINAL + 1];
BYTE features_report;
BYTE waveform_report;
};
More information about the wine-cvs
mailing list