[PATCH 2/5] winebus.sys: Report hatswitch values correctly

Aric Stewart aric at codeweavers.com
Wed May 8 16:43:03 CDT 2019


Signed-off-by: Aric Stewart <aric at codeweavers.com>

On 5/7/19 9:01 AM, Andrew Eikum wrote:
> Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
> ---
>   dlls/winebus.sys/bus_sdl.c    | 21 ++++++++++++---------
>   dlls/winebus.sys/bus_udev.c   | 27 +++++++++++++++------------
>   dlls/winebus.sys/controller.h |  2 +-
>   3 files changed, 28 insertions(+), 22 deletions(-)
> 
> diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
> index 701d5a53825..21f4aedc95e 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 9baccf6a24b..ddda78d5694 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
> -                value = 4;
> -        }
> -        else if (ext->hat_values[index] > 0)
> -        {
> -            if (ext->hat_values[index+1] == 0)
> -                value = 2;
>               else if (ext->hat_values[index+1] < 0)
>                   value = 1;
>               else
> +                value = 5;
> +        }
> +        else if (ext->hat_values[index] > 0)
> +        {
> +            if (ext->hat_values[index+1] == 0)
>                   value = 3;
> +            else if (ext->hat_values[index+1] < 0)
> +                value = 2;
> +            else
> +                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 d443d6ca178..5fce16b1f6f 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-devel mailing list