Andrew Eikum : winebus.sys: Report hatswitch values correctly.
Alexandre Julliard
julliard at winehq.org
Tue May 7 17:32:47 CDT 2019
Module: wine
Branch: master
Commit: 2239aae97f274d21c92857a4561bb10e483556f2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2239aae97f274d21c92857a4561bb10e483556f2
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Tue May 7 09:01:13 2019 -0500
winebus.sys: Report hatswitch values correctly.
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winebus.sys/bus_sdl.c | 21 ++++++++++++---------
dlls/winebus.sys/bus_udev.c | 21 ++++++++++++---------
dlls/winebus.sys/controller.h | 2 +-
3 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 701d5a5..21f4aed 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -303,15 +303,18 @@ static void set_hat_value(struct platform_private *ext, int index, int value)
offset = ext->hat_start + index;
switch (value)
{
- case SDL_HAT_CENTERED: ext->report_buffer[offset] = 8; break;
- case SDL_HAT_UP: ext->report_buffer[offset] = 0; break;
- case SDL_HAT_RIGHTUP: ext->report_buffer[offset] = 1; break;
- case SDL_HAT_RIGHT: ext->report_buffer[offset] = 2; break;
- case SDL_HAT_RIGHTDOWN: ext->report_buffer[offset] = 3; break;
- case SDL_HAT_DOWN: ext->report_buffer[offset] = 4; break;
- case SDL_HAT_LEFTDOWN: ext->report_buffer[offset] = 5; break;
- case SDL_HAT_LEFT: ext->report_buffer[offset] = 6; break;
- case SDL_HAT_LEFTUP: ext->report_buffer[offset] = 7; break;
+ /* 8 1 2
+ * 7 0 3
+ * 6 5 4 */
+ case SDL_HAT_CENTERED: ext->report_buffer[offset] = 0; break;
+ case SDL_HAT_UP: ext->report_buffer[offset] = 1; break;
+ case SDL_HAT_RIGHTUP: ext->report_buffer[offset] = 2; break;
+ case SDL_HAT_RIGHT: ext->report_buffer[offset] = 3; break;
+ case SDL_HAT_RIGHTDOWN: ext->report_buffer[offset] = 4; break;
+ case SDL_HAT_DOWN: ext->report_buffer[offset] = 5; break;
+ case SDL_HAT_LEFTDOWN: ext->report_buffer[offset] = 6; break;
+ case SDL_HAT_LEFT: ext->report_buffer[offset] = 7; break;
+ case SDL_HAT_LEFTUP: ext->report_buffer[offset] = 8; break;
}
}
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index 9baccf6..ddda78d 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -303,32 +303,35 @@ static void set_abs_axis_value(struct wine_input_private *ext, int code, int val
ext->hat_values[index] = value;
if ((code - ABS_HAT0X) % 2)
index--;
+ /* 8 1 2
+ * 7 0 3
+ * 6 5 4 */
if (ext->hat_values[index] == 0)
{
if (ext->hat_values[index+1] == 0)
- value = 8;
- else if (ext->hat_values[index+1] < 0)
value = 0;
+ else if (ext->hat_values[index+1] < 0)
+ value = 1;
else
- value = 4;
+ value = 5;
}
else if (ext->hat_values[index] > 0)
{
if (ext->hat_values[index+1] == 0)
- value = 2;
+ value = 3;
else if (ext->hat_values[index+1] < 0)
- value = 1;
+ value = 2;
else
- value = 3;
+ value = 4;
}
else
{
if (ext->hat_values[index+1] == 0)
- value = 6;
- else if (ext->hat_values[index+1] < 0)
value = 7;
+ else if (ext->hat_values[index+1] < 0)
+ value = 8;
else
- value = 5;
+ value = 6;
}
ext->current_report_buffer[ext->hat_map[index]] = value;
}
diff --git a/dlls/winebus.sys/controller.h b/dlls/winebus.sys/controller.h
index d443d6c..5fce16b 100644
--- a/dlls/winebus.sys/controller.h
+++ b/dlls/winebus.sys/controller.h
@@ -75,7 +75,7 @@ static const BYTE REPORT_REL_AXIS_TAIL[] = {
static const BYTE REPORT_HATSWITCH[] = {
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x39, /* USAGE (Hatswitch) */
- 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
+ 0x15, 0x01, /* LOGICAL_MINIMUM (1) */
0x25, 0x08, /* LOGICAL_MAXIMUM (0x08) */
0x35, 0x00, /* PHYSICAL_MINIMUM (0) */
0x45, 0x08, /* PHYSICAL_MAXIMUM (8) */
More information about the wine-cvs
mailing list