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