From fdaa0e8d4cd0801ba94f711d2a8c37f1211f37da Mon Sep 17 00:00:00 2001 From: ayuanx Date: Fri, 29 Jan 2010 04:42:19 +0000 Subject: 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 --- Source/Core/InputCommon/Src/XInput_Util.cpp | 124 ++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 Source/Core/InputCommon/Src/XInput_Util.cpp (limited to 'Source/Core/InputCommon/Src/XInput_Util.cpp') 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 +#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 -- cgit v1.2.3