diff options
| author | ayuanx <ayuanx@gmail.com> | 2010-01-29 04:42:19 +0000 |
|---|---|---|
| committer | ayuanx <ayuanx@gmail.com> | 2010-01-29 04:42:19 +0000 |
| commit | fdaa0e8d4cd0801ba94f711d2a8c37f1211f37da (patch) | |
| tree | 451e51dd01d44f4d9dc9ad586073bd70042172aa /Source/Core/InputCommon/Src/XInput_Util.cpp | |
| parent | f9dd509459630e2f933bcf04dcea59b3e031f05d (diff) | |
Fixes Issue 2164
Conflicts are due to same file name when omitting full path
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4982 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/XInput_Util.cpp')
| -rw-r--r-- | Source/Core/InputCommon/Src/XInput_Util.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/Src/XInput_Util.cpp b/Source/Core/InputCommon/Src/XInput_Util.cpp new file mode 100644 index 0000000000..e022c2d96a --- /dev/null +++ b/Source/Core/InputCommon/Src/XInput_Util.cpp @@ -0,0 +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 <windows.h>
+#include <XInput.h> // 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 |
