diff --git a/Source/Core/InputCommon/InputCommon.vcproj b/Source/Core/InputCommon/InputCommon.vcproj
index aa67c3656a..b86cd2561d 100644
--- a/Source/Core/InputCommon/InputCommon.vcproj
+++ b/Source/Core/InputCommon/InputCommon.vcproj
@@ -441,23 +441,19 @@
>
-
-
diff --git a/Source/Core/InputCommon/Src/InputCommon.h b/Source/Core/InputCommon/Src/InputCommon.h
index d29ed674c6..5b930fb217 100644
--- a/Source/Core/InputCommon/Src/InputCommon.h
+++ b/Source/Core/InputCommon/Src/InputCommon.h
@@ -4,6 +4,26 @@
namespace InputCommon
{
+enum EButtonType
+{
+ CTL_AXIS = 0,
+ CTL_HAT,
+ CTL_BUTTON,
+ CTL_KEY,
+};
+
+enum ETriggerType
+{
+ CTL_TRIGGER_SDL = 0,
+ CTL_TRIGGER_XINPUT,
+};
+
+enum EXInputTrigger
+{
+ XI_TRIGGER_L = 0,
+ XI_TRIGGER_R,
+};
+
void Init();
void Shutdown();
}
diff --git a/Source/Core/InputCommon/Src/SConscript b/Source/Core/InputCommon/Src/SConscript
index 13ee418d0d..1df5cf64a3 100644
--- a/Source/Core/InputCommon/Src/SConscript
+++ b/Source/Core/InputCommon/Src/SConscript
@@ -6,7 +6,7 @@ files = [
'Configuration.cpp',
'EventHandler.cpp',
'InputCommon.cpp',
- 'SDL.cpp',
+ 'SDL_Util.cpp',
]
if env['HAVE_X11']:
diff --git a/Source/Core/InputCommon/Src/SDL.cpp b/Source/Core/InputCommon/Src/SDL_Util.cpp
similarity index 94%
rename from Source/Core/InputCommon/Src/SDL.cpp
rename to Source/Core/InputCommon/Src/SDL_Util.cpp
index 572d68d407..3ca4a834e6 100644
--- a/Source/Core/InputCommon/Src/SDL.cpp
+++ b/Source/Core/InputCommon/Src/SDL_Util.cpp
@@ -1,219 +1,222 @@
-
-// Project description
-// -------------------
-// Name: SDL Input
-// Description: Common SDL Input Functions
-//
-// Author: Falcon4ever (nJoy@falcon4ever.com, www.multigesture.net), JPeterson etc
-// Copyright (C) 2003 Dolphin Project.
-//
-
-//
-// Licensetype: GNU General Public License (GPL)
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-//
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-//
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-//
-
-
-#define _SDL_MAIN_ // Avoid certain declarations in SDL.h
-#include "SDL.h" // Local
-#include "XInput.h"
-
-namespace InputCommon
-{
-
-
-// Search attached devices. Populate joyinfo for all attached physical devices.
-// -----------------------
-bool SearchDevices(std::vector &_joyinfo, int &_NumPads, int &_NumGoodPads)
-{
- if (!SDL_WasInit(0))
-#if SDL_VERSION_ATLEAST(1, 3, 0)
- if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC) < 0)
-#else
- if (SDL_Init(SDL_INIT_JOYSTICK) < 0)
-#endif
- {
- PanicAlert("Could not initialize SDL: %s", SDL_GetError());
- return false;
- }
-
- // Get device status
- int numjoy = SDL_NumJoysticks();
- for (int i = 0; i < numjoy; i++ )
- {
- CONTROLLER_INFO Tmp;
-
- Tmp.joy = SDL_JoystickOpen(i);
- Tmp.ID = i;
- Tmp.NumAxes = SDL_JoystickNumAxes(Tmp.joy);
- Tmp.NumButtons = SDL_JoystickNumButtons(Tmp.joy);
- Tmp.NumBalls = SDL_JoystickNumBalls(Tmp.joy);
- Tmp.NumHats = SDL_JoystickNumHats(Tmp.joy);
- Tmp.Name = SDL_JoystickName(i);
-
- // Check if the device is okay
- if ( Tmp.NumAxes == 0
- && Tmp.NumBalls == 0
- && Tmp.NumButtons == 0
- && Tmp.NumHats == 0
- )
- {
- Tmp.Good = false;
- }
- else
- {
- _NumGoodPads++;
- Tmp.Good = true;
- }
-
- _joyinfo.push_back(Tmp);
-
- // We have now read the values we need so we close the device
-// if (SDL_JoystickOpened(i)) SDL_JoystickClose(_joyinfo[i].joy);
- }
-
- _NumPads = (int)_joyinfo.size();
-
- return true;
-}
-
-
-// Avoid extreme axis values
-// ---------------------
-/* Function: We have to avoid very big values to becuse some triggers are -0x8000 in the
- unpressed state (and then go from -0x8000 to 0x8000 as they are fully pressed) */
-bool AvoidValues(int value, bool NoTriggerFilter)
-{
- // Avoid detecting very small or very big (for triggers) values
- if( (value > -0x2000 && value < 0x2000) // Small values
- || ((value < -0x6000 || value > 0x6000) && !NoTriggerFilter)) // Big values
- return true; // Avoid
- else
- return false; // Keep
-}
-
-
-// Detect a pressed button
-// ---------------------
-void GetButton(SDL_Joystick *joy, int ControllerID, int buttons, int axes, int hats,
- int &KeyboardKey, int &value, int &type, int &pressed, bool &Succeed, bool &Stop,
- bool LeftRight, bool Axis, bool XInput, bool Button, bool Hat, bool NoTriggerFilter)
-{
- // It needs the wxWidgets excape keycode
- static const int WXK_ESCAPE = 27;
-
- // Update the internal status
- SDL_JoystickUpdate();
-
- // For the triggers we accept both a digital or an analog button
- if(Axis)
- {
- for(int i = 0; i < axes; i++)
- {
- value = SDL_JoystickGetAxis(joy, i);
-
- if(AvoidValues(value, NoTriggerFilter)) continue; // Avoid values
-
- pressed = i + (LeftRight ? 1000 : 0); // Identify the analog triggers
- type = InputCommon::CTL_AXIS;
- Succeed = true;
- }
- }
-
- // Check for a hat
- if(Hat)
- {
- for(int i = 0; i < hats; i++)
- {
- value = SDL_JoystickGetHat(joy, i);
- if(value)
- {
- pressed = i;
- type = InputCommon::CTL_HAT;
- Succeed = true;
- }
- }
- }
-
- // Check for a button
- if(Button)
- {
- for(int i = 0; i < buttons; i++)
- {
- // Some kind of bug in SDL 1.3 would give button 9 and 10 (nonexistent) the value 48 on the 360 pad
- if (SDL_JoystickGetButton(joy, i) > 1) continue;
-
- if(SDL_JoystickGetButton(joy, i))
- {
- pressed = i;
- type = InputCommon::CTL_BUTTON;
- Succeed = true;
- }
- }
- }
-
- // Check for a XInput trigger
- #ifdef _WIN32
- if(XInput && LeftRight)
- {
- for(int i = 0; i <= InputCommon::XI_TRIGGER_R; i++)
- {
- if(XInput::GetXI(ControllerID, i))
- {
- pressed = i + 1000;
- type = InputCommon::CTL_AXIS;
- Succeed = true;
- }
- }
- }
- #endif
-
- // Check for keyboard action
- if (KeyboardKey)
- {
- if(Button)
- {
- // Todo: Add a separate keyboard vector to remove this restriction
- if(KeyboardKey >= buttons)
- {
- pressed = KeyboardKey;
- type = InputCommon::CTL_BUTTON;
- Succeed = true;
- KeyboardKey = 0;
- if(pressed == WXK_ESCAPE) pressed = -1; // Check for the escape key
- }
- // Else show the error message
- else
- {
- pressed = KeyboardKey;
- KeyboardKey = -1;
- Stop = true;
- }
- }
- // Only accept the escape key
- else if (KeyboardKey == WXK_ESCAPE)
- {
- Succeed = true;
- KeyboardKey = 0;
- pressed = -1;
- }
- }
-}
-
-
-} // InputCommon
-
+
+// Project description
+// -------------------
+// Name: SDL Input
+// Description: Common SDL Input Functions
+//
+// Author: Falcon4ever (nJoy@falcon4ever.com, www.multigesture.net), JPeterson etc
+// Copyright (C) 2003 Dolphin Project.
+//
+
+//
+// Licensetype: GNU General Public License (GPL)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+//
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+//
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+//
+
+
+#define _SDL_MAIN_ // Avoid certain declarations in SDL.h
+#include "InputCommon.h"
+#include "SDL_Util.h" // Local
+#ifdef _WIN32
+#include "XInput_Util.h"
+#endif
+
+namespace InputCommon
+{
+
+
+// Search attached devices. Populate joyinfo for all attached physical devices.
+// -----------------------
+bool SearchDevices(std::vector &_joyinfo, int &_NumPads, int &_NumGoodPads)
+{
+ if (!SDL_WasInit(0))
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC) < 0)
+#else
+ if (SDL_Init(SDL_INIT_JOYSTICK) < 0)
+#endif
+ {
+ PanicAlert("Could not initialize SDL: %s", SDL_GetError());
+ return false;
+ }
+
+ // Get device status
+ int numjoy = SDL_NumJoysticks();
+ for (int i = 0; i < numjoy; i++ )
+ {
+ CONTROLLER_INFO Tmp;
+
+ Tmp.joy = SDL_JoystickOpen(i);
+ Tmp.ID = i;
+ Tmp.NumAxes = SDL_JoystickNumAxes(Tmp.joy);
+ Tmp.NumButtons = SDL_JoystickNumButtons(Tmp.joy);
+ Tmp.NumBalls = SDL_JoystickNumBalls(Tmp.joy);
+ Tmp.NumHats = SDL_JoystickNumHats(Tmp.joy);
+ Tmp.Name = SDL_JoystickName(i);
+
+ // Check if the device is okay
+ if ( Tmp.NumAxes == 0
+ && Tmp.NumBalls == 0
+ && Tmp.NumButtons == 0
+ && Tmp.NumHats == 0
+ )
+ {
+ Tmp.Good = false;
+ }
+ else
+ {
+ _NumGoodPads++;
+ Tmp.Good = true;
+ }
+
+ _joyinfo.push_back(Tmp);
+
+ // We have now read the values we need so we close the device
+// if (SDL_JoystickOpened(i)) SDL_JoystickClose(_joyinfo[i].joy);
+ }
+
+ _NumPads = (int)_joyinfo.size();
+
+ return true;
+}
+
+
+// Avoid extreme axis values
+// ---------------------
+/* Function: We have to avoid very big values to becuse some triggers are -0x8000 in the
+ unpressed state (and then go from -0x8000 to 0x8000 as they are fully pressed) */
+bool AvoidValues(int value, bool NoTriggerFilter)
+{
+ // Avoid detecting very small or very big (for triggers) values
+ if( (value > -0x2000 && value < 0x2000) // Small values
+ || ((value < -0x6000 || value > 0x6000) && !NoTriggerFilter)) // Big values
+ return true; // Avoid
+ else
+ return false; // Keep
+}
+
+
+// Detect a pressed button
+// ---------------------
+void GetButton(SDL_Joystick *joy, int ControllerID, int buttons, int axes, int hats,
+ int &KeyboardKey, int &value, int &type, int &pressed, bool &Succeed, bool &Stop,
+ bool LeftRight, bool Axis, bool XInput, bool Button, bool Hat, bool NoTriggerFilter)
+{
+ // It needs the wxWidgets excape keycode
+ static const int WXK_ESCAPE = 27;
+
+ // Update the internal status
+ SDL_JoystickUpdate();
+
+ // For the triggers we accept both a digital or an analog button
+ if(Axis)
+ {
+ for(int i = 0; i < axes; i++)
+ {
+ value = SDL_JoystickGetAxis(joy, i);
+
+ if(AvoidValues(value, NoTriggerFilter)) continue; // Avoid values
+
+ pressed = i + (LeftRight ? 1000 : 0); // Identify the analog triggers
+ type = InputCommon::CTL_AXIS;
+ Succeed = true;
+ }
+ }
+
+ // Check for a hat
+ if(Hat)
+ {
+ for(int i = 0; i < hats; i++)
+ {
+ value = SDL_JoystickGetHat(joy, i);
+ if(value)
+ {
+ pressed = i;
+ type = InputCommon::CTL_HAT;
+ Succeed = true;
+ }
+ }
+ }
+
+ // Check for a button
+ if(Button)
+ {
+ for(int i = 0; i < buttons; i++)
+ {
+ // Some kind of bug in SDL 1.3 would give button 9 and 10 (nonexistent) the value 48 on the 360 pad
+ if (SDL_JoystickGetButton(joy, i) > 1) continue;
+
+ if(SDL_JoystickGetButton(joy, i))
+ {
+ pressed = i;
+ type = InputCommon::CTL_BUTTON;
+ Succeed = true;
+ }
+ }
+ }
+
+ // Check for a XInput trigger
+ #ifdef _WIN32
+ if(XInput && LeftRight)
+ {
+ for(int i = 0; i <= InputCommon::XI_TRIGGER_R; i++)
+ {
+ if(XInput::GetXI(ControllerID, i))
+ {
+ pressed = i + 1000;
+ type = InputCommon::CTL_AXIS;
+ Succeed = true;
+ }
+ }
+ }
+ #endif
+
+ // Check for keyboard action
+ if (KeyboardKey)
+ {
+ if(Button)
+ {
+ // Todo: Add a separate keyboard vector to remove this restriction
+ if(KeyboardKey >= buttons)
+ {
+ pressed = KeyboardKey;
+ type = InputCommon::CTL_BUTTON;
+ Succeed = true;
+ KeyboardKey = 0;
+ if(pressed == WXK_ESCAPE) pressed = -1; // Check for the escape key
+ }
+ // Else show the error message
+ else
+ {
+ pressed = KeyboardKey;
+ KeyboardKey = -1;
+ Stop = true;
+ }
+ }
+ // Only accept the escape key
+ else if (KeyboardKey == WXK_ESCAPE)
+ {
+ Succeed = true;
+ KeyboardKey = 0;
+ pressed = -1;
+ }
+ }
+}
+
+
+} // InputCommon
+
diff --git a/Source/Core/InputCommon/Src/SDL.h b/Source/Core/InputCommon/Src/SDL_Util.h
similarity index 91%
rename from Source/Core/InputCommon/Src/SDL.h
rename to Source/Core/InputCommon/Src/SDL_Util.h
index 8495deae6d..1dcebb8186 100644
--- a/Source/Core/InputCommon/Src/SDL.h
+++ b/Source/Core/InputCommon/Src/SDL_Util.h
@@ -1,98 +1,78 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _SDL_h
-#define _SDL_h
-
-
-#include // System
-#include
-#include
-
-#ifdef _WIN32
-#include // Externals
-#include
-#if SDL_VERSION_ATLEAST(1, 3, 0)
- #include
-#endif
-#else
-#include
-#include
-#if SDL_VERSION_ATLEAST(1, 3, 0)
- #include
-#endif
-#endif
-
-#include "Common.h" // Common
-
-
-namespace InputCommon
-{
-
-enum EButtonType
-{
- CTL_AXIS = 0,
- CTL_HAT,
- CTL_BUTTON,
- CTL_KEY,
-};
-
-enum ETriggerType
-{
- CTL_TRIGGER_SDL = 0,
- CTL_TRIGGER_XINPUT,
-};
-
-enum EXInputTrigger
-{
- XI_TRIGGER_L = 0,
- XI_TRIGGER_R,
-};
-
-struct CONTROLLER_INFO // CONNECTED WINDOWS DEVICES INFO
-{
- int NumAxes; // Amount of Axes
- int NumButtons; // Amount of Buttons
- int NumBalls; // Amount of Balls
- int NumHats; // Amount of Hats (POV)
- std::string Name; // Joypad/stickname
- int ID; // SDL joystick device ID
- bool Good; // Pad is good (it has at least one button or axis)
- SDL_Joystick *joy; // SDL joystick device
-};
-
-
-// General functions
-bool SearchDevices(std::vector &_joyinfo, int &NumPads, int &NumGoodPads);
-void GetButton(SDL_Joystick*, int,int,int,int, int&,int&,int&,int&,bool&,bool&, bool,bool,bool,bool,bool,bool);
-
-// Value conversion
-float Deg2Rad(float Deg);
-float Rad2Deg(float Rad);
-int Pad_Convert(int _val);
-float SquareDistance(float deg);
-bool IsDeadZone(float DeadZone, int x, int y);
-void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square = false);
-void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius);
-// Input configuration
-std::string VKToString(int keycode);
-
-
-} // InputCommon
-
-
-#endif // _SDL_h
+// Copyright (C) 2003 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#ifndef _SDL_h
+#define _SDL_h
+
+
+#include // System
+#include
+#include
+
+#ifdef _WIN32
+#include // Externals
+#include
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ #include
+#endif
+#else
+#include
+#include
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ #include
+#endif
+#endif
+
+#include "Common.h" // Common
+
+
+namespace InputCommon
+{
+
+struct CONTROLLER_INFO // CONNECTED WINDOWS DEVICES INFO
+{
+ int NumAxes; // Amount of Axes
+ int NumButtons; // Amount of Buttons
+ int NumBalls; // Amount of Balls
+ int NumHats; // Amount of Hats (POV)
+ std::string Name; // Joypad/stickname
+ int ID; // SDL joystick device ID
+ bool Good; // Pad is good (it has at least one button or axis)
+ SDL_Joystick *joy; // SDL joystick device
+};
+
+
+// General functions
+bool SearchDevices(std::vector &_joyinfo, int &NumPads, int &NumGoodPads);
+void GetButton(SDL_Joystick*, int,int,int,int, int&,int&,int&,int&,bool&,bool&, bool,bool,bool,bool,bool,bool);
+
+// Value conversion
+float Deg2Rad(float Deg);
+float Rad2Deg(float Rad);
+int Pad_Convert(int _val);
+float SquareDistance(float deg);
+bool IsDeadZone(float DeadZone, int x, int y);
+void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square = false);
+void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius);
+// Input configuration
+std::string VKToString(int keycode);
+
+
+} // InputCommon
+
+
+#endif // _SDL_h
diff --git a/Source/Core/InputCommon/Src/XInput.cpp b/Source/Core/InputCommon/Src/XInput_Util.cpp
similarity index 95%
rename from Source/Core/InputCommon/Src/XInput.cpp
rename to Source/Core/InputCommon/Src/XInput_Util.cpp
index 3ba09c3aa2..e022c2d96a 100644
--- a/Source/Core/InputCommon/Src/XInput.cpp
+++ b/Source/Core/InputCommon/Src/XInput_Util.cpp
@@ -1,136 +1,124 @@
-
-//
-// Licensetype: GNU General Public License (GPL)
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-//
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-//
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-//
-
-
-
-
-// File description
-/* -------------------
- Function: This file will get the status of the analog triggers of any connected XInput device.
- This code was made with the help of SimpleController.cpp in the June 2008 Microsoft DirectX SDK
- Samples.
-
-///////////////////////////////////////////////////// */
-
-#ifdef _WIN32
-
-
-// Includes
-// -------------------
-#include
-#include // XInput API
-
-#include "SDL.h" // Local
-
-
-
-namespace XInput
-{
-
-
-
-// Declarations
-// -------------------
-
-#define MAX_CONTROLLERS 4 // XInput handles up to 4 controllers
-
-struct CONTROLER_STATE
-{
- XINPUT_STATE state;
- bool bConnected;
-};
-CONTROLER_STATE g_Controllers[MAX_CONTROLLERS];
-
-
-
-
-// Init
-// -------------------
-/* Function: Calculate the number of connected XInput devices
- Todo: Implement this to figure out if there are multiple XInput controllers connected,
- we currently only try to connect to XInput device 0 */
-void Init()
-{
- // Init state
- //ZeroMemory( g_Controllers, sizeof( CONTROLER_STATE ) * MAX_CONTROLLERS );
-
- // Declaration
- DWORD dwResult;
-
- // Calculate the number of connected XInput devices
- for( DWORD i = 0; i < MAX_CONTROLLERS; i++ )
- {
- // Simply get the state of the controller from XInput.
- dwResult = XInputGetState( i, &g_Controllers[i].state );
-
- if( dwResult == ERROR_SUCCESS )
- g_Controllers[i].bConnected = true;
- else
- g_Controllers[i].bConnected = false;
- }
-
-}
-
-
-
-
-// Get the trigger status
-// -------------------
-int GetXI(int Controller, int Button)
-{
- // Update the internal status
- DWORD dwResult;
- dwResult = XInputGetState(Controller, &g_Controllers[Controller].state);
-
- if (dwResult != ERROR_SUCCESS) return -1;
-
- switch (Button)
- {
- case InputCommon::XI_TRIGGER_L:
- return g_Controllers[Controller].state.Gamepad.bLeftTrigger;
-
- case InputCommon::XI_TRIGGER_R:
- return g_Controllers[Controller].state.Gamepad.bRightTrigger;
-
- default:
- return 0;
- }
-}
-
-
-
-
-// Check if a certain controller is connected
-// -------------------
-bool IsConnected(int Controller)
-{
- DWORD dwResult = XInputGetState( Controller, &g_Controllers[Controller].state );
-
- // Update the connected status
- if( dwResult == ERROR_SUCCESS )
- return true;
- else
- return false;
-}
-
-
-} // XInput
-
+
+//
+// Licensetype: GNU General Public License (GPL)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+//
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+//
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+//
+
+
+
+
+// File description
+/* -------------------
+ Function: This file will get the status of the analog triggers of any connected XInput device.
+ This code was made with the help of SimpleController.cpp in the June 2008 Microsoft DirectX SDK
+ Samples.
+
+///////////////////////////////////////////////////// */
+
+#ifdef _WIN32
+
+
+// Includes
+// -------------------
+#include
+#include // XInput API
+#include "InputCommon.h"
+
+namespace XInput
+{
+
+// Declarations
+// -------------------
+
+#define MAX_CONTROLLERS 4 // XInput handles up to 4 controllers
+
+struct CONTROLER_STATE
+{
+ XINPUT_STATE state;
+ bool bConnected;
+};
+CONTROLER_STATE g_Controllers[MAX_CONTROLLERS];
+
+
+// Init
+// -------------------
+/* Function: Calculate the number of connected XInput devices
+ Todo: Implement this to figure out if there are multiple XInput controllers connected,
+ we currently only try to connect to XInput device 0 */
+void Init()
+{
+ // Init state
+ //ZeroMemory( g_Controllers, sizeof( CONTROLER_STATE ) * MAX_CONTROLLERS );
+
+ // Declaration
+ DWORD dwResult;
+
+ // Calculate the number of connected XInput devices
+ for( DWORD i = 0; i < MAX_CONTROLLERS; i++ )
+ {
+ // Simply get the state of the controller from XInput.
+ dwResult = XInputGetState( i, &g_Controllers[i].state );
+
+ if( dwResult == ERROR_SUCCESS )
+ g_Controllers[i].bConnected = true;
+ else
+ g_Controllers[i].bConnected = false;
+ }
+
+}
+
+
+// Get the trigger status
+// -------------------
+int GetXI(int Controller, int Button)
+{
+ // Update the internal status
+ DWORD dwResult;
+ dwResult = XInputGetState(Controller, &g_Controllers[Controller].state);
+
+ if (dwResult != ERROR_SUCCESS) return -1;
+
+ switch (Button)
+ {
+ case InputCommon::XI_TRIGGER_L:
+ return g_Controllers[Controller].state.Gamepad.bLeftTrigger;
+
+ case InputCommon::XI_TRIGGER_R:
+ return g_Controllers[Controller].state.Gamepad.bRightTrigger;
+
+ default:
+ return 0;
+ }
+}
+
+
+// Check if a certain controller is connected
+// -------------------
+bool IsConnected(int Controller)
+{
+ DWORD dwResult = XInputGetState( Controller, &g_Controllers[Controller].state );
+
+ // Update the connected status
+ if( dwResult == ERROR_SUCCESS )
+ return true;
+ else
+ return false;
+}
+
+} // XInput
+
#endif
\ No newline at end of file
diff --git a/Source/Core/InputCommon/Src/XInput.h b/Source/Core/InputCommon/Src/XInput_Util.h
similarity index 95%
rename from Source/Core/InputCommon/Src/XInput.h
rename to Source/Core/InputCommon/Src/XInput_Util.h
index 30ba93c79e..fd4b23bb98 100644
--- a/Source/Core/InputCommon/Src/XInput.h
+++ b/Source/Core/InputCommon/Src/XInput_Util.h
@@ -1,46 +1,43 @@
-
-//
-// Licensetype: GNU General Public License (GPL)
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-//
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-//
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-//
-
-
-#ifdef _WIN32
-
-
-// Includes
-// ----------
-#include
-
-
-
-
-namespace XInput
-{
-
-
-// Declarations
-// ----------
-void Init();
-int GetXI(int Controller, int Button);
-bool IsConnected(int Controller);
-
-
-} // XInput
-
-#endif
-
+
+//
+// Licensetype: GNU General Public License (GPL)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+//
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+//
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+//
+
+
+#ifdef _WIN32
+
+
+// Includes
+// ----------
+#include
+
+
+namespace XInput
+{
+
+// Declarations
+// ----------
+void Init();
+int GetXI(int Controller, int Button);
+bool IsConnected(int Controller);
+
+
+} // XInput
+
+#endif
+
diff --git a/Source/Plugins/Plugin_GCPad/Src/GCPad.h b/Source/Plugins/Plugin_GCPad/Src/GCPad.h
index 625e653bb2..b9ec787b36 100644
--- a/Source/Plugins/Plugin_GCPad/Src/GCPad.h
+++ b/Source/Plugins/Plugin_GCPad/Src/GCPad.h
@@ -22,9 +22,10 @@
#include // System
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
+#include "../../../Core/InputCommon/Src/InputCommon.h" // Core
+#include "../../../Core/InputCommon/Src/SDL_Util.h"
#ifdef _WIN32
- #include "../../../Core/InputCommon/Src/XInput.h"
+ #include "../../../Core/InputCommon/Src/XInput_Util.h"
#elif defined(HAVE_X11) && HAVE_X11
#include
#include
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigPadDlg.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigPadDlg.cpp
index 1d62de21f4..0b6e85ee19 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/ConfigPadDlg.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigPadDlg.cpp
@@ -23,12 +23,6 @@
#include "Config.h"
#include "EmuDefinitions.h" // for joyinfo
-enum TriggerType
-{
- CTL_TRIGGER_SDL = 0,
- CTL_TRIGGER_XINPUT
-};
-
BEGIN_EVENT_TABLE(WiimotePadConfigDialog,wxDialog)
EVT_CLOSE(WiimotePadConfigDialog::OnClose)
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h
index 7f17c6996e..64709be80e 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h
@@ -21,8 +21,11 @@
#include
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
-#include "../../../Core/InputCommon/Src/XInput.h"
+#include "../../../Core/InputCommon/Src/InputCommon.h" // Core
+#include "../../../Core/InputCommon/Src/SDL_Util.h"
+#ifdef _WIN32
+#include "../../../Core/InputCommon/Src/XInput_Util.h"
+#endif
#include "Common.h"
#include "pluginspecs_wiimote.h"
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuDynamics.cpp b/Source/Plugins/Plugin_Wiimote/Src/EmuDynamics.cpp
index d04a3178b9..36c0597db4 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuDynamics.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuDynamics.cpp
@@ -18,8 +18,6 @@
#include
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
-#include "../../../Core/InputCommon/Src/XInput.h"
#include "Common.h" // Common
#include "MathUtil.h"
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp
index 2f5e411361..b7c10c4afb 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp
@@ -18,9 +18,6 @@
#include
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
-#include "../../../Core/InputCommon/Src/XInput.h"
-
#include "Common.h" // Common
#include "StringUtil.h" // for ArrayToString()
#include "IniFile.h"
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.h b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.h
index e18cdaa05d..3afca7ec3c 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.h
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.h
@@ -21,8 +21,6 @@
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
-
#include "wiimote_hid.h"
#include "EmuDefinitions.h"
#include "ChunkFile.h"
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp b/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
index 23629ec90b..ad6d306341 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
@@ -19,9 +19,6 @@
#include
#include
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
-#include "../../../Core/InputCommon/Src/XInput.h"
-
#include "Common.h" // Common
#include "StringUtil.h" // for ArrayToString()
#include "IniFile.h"
diff --git a/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp b/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp
index 42818dfa79..6d4195fb91 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp
@@ -16,10 +16,7 @@
// http://code.google.com/p/dolphin-emu/
//
-
-#include "../../../Core/InputCommon/Src/SDL.h" // Core
#include "EmuDefinitions.h"
-
#ifdef _WIN32
#include "XInput.h"
#endif