From 6717a3d38d9bd1b9d83d45c8acfa2ff74bb6be3b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 31 Jan 2017 12:23:29 -0800 Subject: [PATCH] Added support for the HOTAS Warthog throttle --- include/SDL_joystick.h | 3 ++- src/joystick/SDL_joystick.c | 27 +++++++++++++++++++++++---- test/testjoystick.c | 3 +++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/SDL_joystick.h b/include/SDL_joystick.h index fb402738685ef..d9ee57329f59f 100644 --- a/include/SDL_joystick.h +++ b/include/SDL_joystick.h @@ -83,7 +83,8 @@ typedef enum SDL_JOYSTICK_TYPE_DANCE_PAD, SDL_JOYSTICK_TYPE_GUITAR, SDL_JOYSTICK_TYPE_DRUM_KIT, - SDL_JOYSTICK_TYPE_ARCADE_PAD + SDL_JOYSTICK_TYPE_ARCADE_PAD, + SDL_JOYSTICK_TYPE_THROTTLE, } SDL_JoystickType; typedef enum diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index af019324d5a13..9b1968d6f8f7b 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -966,7 +966,7 @@ static void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint1 } } -static SDL_bool SDL_IsJoystickGUIDWheel(Uint32 vidpid) +static SDL_bool SDL_IsJoystickProductWheel(Uint32 vidpid) { static Uint32 wheel_joysticks[] = { MAKE_VIDPID(0x046d, 0xc294), /* Logitech generic wheel */ @@ -993,7 +993,7 @@ static SDL_bool SDL_IsJoystickGUIDWheel(Uint32 vidpid) return SDL_FALSE; } -static SDL_bool SDL_IsJoystickGUIDFlightStick(Uint32 vidpid) +static SDL_bool SDL_IsJoystickProductFlightStick(Uint32 vidpid) { static Uint32 flightstick_joysticks[] = { MAKE_VIDPID(0x044f, 0x0402), /* HOTAS Warthog */ @@ -1008,6 +1008,21 @@ static SDL_bool SDL_IsJoystickGUIDFlightStick(Uint32 vidpid) return SDL_FALSE; } +static SDL_bool SDL_IsJoystickProductThrottle(Uint32 vidpid) +{ + static Uint32 throttle_joysticks[] = { + MAKE_VIDPID(0x044f, 0x0404), /* HOTAS Warthog */ + }; + int i; + + for (i = 0; i < SDL_arraysize(throttle_joysticks); ++i) { + if (vidpid == throttle_joysticks[i]) { + return SDL_TRUE; + } + } + return SDL_FALSE; +} + static SDL_JoystickType SDL_GetJoystickGUIDType(SDL_JoystickGUID guid) { Uint16 vendor; @@ -1043,14 +1058,18 @@ static SDL_JoystickType SDL_GetJoystickGUIDType(SDL_JoystickGUID guid) SDL_GetJoystickGUIDInfo(guid, &vendor, &product, NULL); vidpid = MAKE_VIDPID(vendor, product); - if (SDL_IsJoystickGUIDWheel(vidpid)) { + if (SDL_IsJoystickProductWheel(vidpid)) { return SDL_JOYSTICK_TYPE_WHEEL; } - if (SDL_IsJoystickGUIDFlightStick(vidpid)) { + if (SDL_IsJoystickProductFlightStick(vidpid)) { return SDL_JOYSTICK_TYPE_FLIGHT_STICK; } + if (SDL_IsJoystickProductThrottle(vidpid)) { + return SDL_JOYSTICK_TYPE_THROTTLE; + } + return SDL_JOYSTICK_TYPE_UNKNOWN; } diff --git a/test/testjoystick.c b/test/testjoystick.c index ce3a222144c06..50e5cc96ef176 100644 --- a/test/testjoystick.c +++ b/test/testjoystick.c @@ -293,6 +293,9 @@ main(int argc, char *argv[]) case SDL_JOYSTICK_TYPE_ARCADE_PAD: type = "Arcade Pad"; break; + case SDL_JOYSTICK_TYPE_THROTTLE: + type = "Throttle"; + break; default: type = "Unknown"; break;