From c6b4f5c8191ca52c6f366e1e07baec557d032504 Mon Sep 17 00:00:00 2001 From: John Peterson Date: Sun, 8 Feb 2009 14:34:23 +0000 Subject: InputCommon and nJoy: Moved functions to InputCommon, to be shared with the Wiimote plugin git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2147 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/InputCommon/Src/XInput.cpp | 136 +++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Source/Core/InputCommon/Src/XInput.cpp (limited to 'Source/Core/InputCommon/Src/XInput.cpp') diff --git a/Source/Core/InputCommon/Src/XInput.cpp b/Source/Core/InputCommon/Src/XInput.cpp new file mode 100644 index 0000000000..6e0d4605a7 --- /dev/null +++ b/Source/Core/InputCommon/Src/XInput.cpp @@ -0,0 +1,136 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// +// 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[0].state.Gamepad.bLeftTrigger; + + case InputCommon::XI_TRIGGER_R: + return g_Controllers[0].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