Commit 6717a3d38d9bd1b9d83d45c8acfa2ff74bb6be3b

Sam Lantinga 2017-01-31T12:23:29

Added support for the HOTAS Warthog throttle

diff --git a/include/SDL_joystick.h b/include/SDL_joystick.h
index fb40273..d9ee573 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 af01932..9b1968d 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 ce3a222..50e5cc9 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;