From 34692ab826abc8f8faa61bdb2280b742424528f1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 7 Dec 2013 15:14:29 -0500 Subject: Remove unnecessary Src/ folders --- .../ControllerInterface/XInput/XInput.cpp | 251 +++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp new file mode 100644 index 0000000000..0aa639aae8 --- /dev/null +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -0,0 +1,251 @@ + +#include "XInput.h" + +namespace ciface +{ +namespace XInput +{ + +static const struct +{ + const char* const name; + const WORD bitmask; +} named_buttons[] = +{ + { "Button A", XINPUT_GAMEPAD_A }, + { "Button B", XINPUT_GAMEPAD_B }, + { "Button X", XINPUT_GAMEPAD_X }, + { "Button Y", XINPUT_GAMEPAD_Y }, + { "Pad N", XINPUT_GAMEPAD_DPAD_UP }, + { "Pad S", XINPUT_GAMEPAD_DPAD_DOWN }, + { "Pad W", XINPUT_GAMEPAD_DPAD_LEFT }, + { "Pad E", XINPUT_GAMEPAD_DPAD_RIGHT }, + { "Start", XINPUT_GAMEPAD_START }, + { "Back", XINPUT_GAMEPAD_BACK }, + { "Shoulder L", XINPUT_GAMEPAD_LEFT_SHOULDER }, + { "Shoulder R", XINPUT_GAMEPAD_RIGHT_SHOULDER }, + { "Thumb L", XINPUT_GAMEPAD_LEFT_THUMB }, + { "Thumb R", XINPUT_GAMEPAD_RIGHT_THUMB } +}; + +static const char* const named_triggers[] = +{ + "Trigger L", + "Trigger R" +}; + +static const char* const named_axes[] = +{ + "Left X", + "Left Y", + "Right X", + "Right Y" +}; + +static const char* const named_motors[] = +{ + "Motor L", + "Motor R" +}; + +static HMODULE hXInput = nullptr; + +typedef decltype(&XInputGetCapabilities) XInputGetCapabilities_t; +typedef decltype(&XInputSetState) XInputSetState_t; +typedef decltype(&XInputGetState) XInputGetState_t; + +static XInputGetCapabilities_t PXInputGetCapabilities = nullptr; +static XInputSetState_t PXInputSetState = nullptr; +static XInputGetState_t PXInputGetState = nullptr; + +void Init(std::vector& devices) +{ + if (!hXInput) + { + // Try for the most recent version we were compiled against (will only work if running on Win8+) + hXInput = ::LoadLibrary(XINPUT_DLL); + if (!hXInput) + { + // Drop back to DXSDK June 2010 version. Requires DX June 2010 redist. + hXInput = ::LoadLibrary(TEXT("xinput1_3.dll")); + if (!hXInput) + { + return; + } + } + + PXInputGetCapabilities = (XInputGetCapabilities_t)::GetProcAddress(hXInput, "XInputGetCapabilities"); + PXInputSetState = (XInputSetState_t)::GetProcAddress(hXInput, "XInputSetState"); + PXInputGetState = (XInputGetState_t)::GetProcAddress(hXInput, "XInputGetState"); + if (!PXInputGetCapabilities || + !PXInputSetState || + !PXInputGetState) + { + ::FreeLibrary(hXInput); + hXInput = nullptr; + return; + } + } + + XINPUT_CAPABILITIES caps; + for (int i = 0; i != 4; ++i) + if (ERROR_SUCCESS == PXInputGetCapabilities(i, 0, &caps)) + devices.push_back(new Device(caps, i)); +} + +void DeInit() +{ + if (hXInput) + { + ::FreeLibrary(hXInput); + hXInput = nullptr; + } +} + +Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) + : m_index(index), m_subtype(caps.SubType) +{ + ZeroMemory(&m_state_out, sizeof(m_state_out)); + ZeroMemory(&m_current_state_out, sizeof(m_current_state_out)); + + // XInputGetCaps seems to always claim all capabilities are supported + // but I will leave all this stuff in, incase m$ fixes xinput up a bit + + // get supported buttons + for (int i = 0; i != sizeof(named_buttons)/sizeof(*named_buttons); ++i) + { + if (named_buttons[i].bitmask & caps.Gamepad.wButtons) + AddInput(new Button(i, m_state_in.Gamepad.wButtons)); + } + + // get supported triggers + for (int i = 0; i != sizeof(named_triggers)/sizeof(*named_triggers); ++i) + { + //BYTE val = (&caps.Gamepad.bLeftTrigger)[i]; // should be max value / MSDN lies + if ((&caps.Gamepad.bLeftTrigger)[i]) + AddInput(new Trigger(i, (&m_state_in.Gamepad.bLeftTrigger)[i], 255 )); + } + + // get supported axes + for (int i = 0; i != sizeof(named_axes)/sizeof(*named_axes); ++i) + { + //SHORT val = (&caps.Gamepad.sThumbLX)[i]; // xinput doesn't give the range / MSDN is a liar + if ((&caps.Gamepad.sThumbLX)[i]) + { + const SHORT& ax = (&m_state_in.Gamepad.sThumbLX)[i]; + + // each axis gets a negative and a positive input instance associated with it + AddInput(new Axis(i, ax, -32768)); + AddInput(new Axis(i, ax, 32767)); + } + } + + // get supported motors + for (int i = 0; i != sizeof(named_motors)/sizeof(*named_motors); ++i) + { + //WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies + if ((&caps.Vibration.wLeftMotorSpeed)[i]) + AddOutput(new Motor(i, (&m_state_out.wLeftMotorSpeed)[i], 65535)); + } + + ClearInputState(); +} + +void Device::ClearInputState() +{ + ZeroMemory(&m_state_in, sizeof(m_state_in)); +} + +std::string Device::GetName() const +{ + switch (m_subtype) + { + case XINPUT_DEVSUBTYPE_GAMEPAD: return "Gamepad"; break; + case XINPUT_DEVSUBTYPE_WHEEL: return "Wheel"; break; + case XINPUT_DEVSUBTYPE_ARCADE_STICK: return "Arcade Stick"; break; + case XINPUT_DEVSUBTYPE_FLIGHT_STICK: return "Flight Stick"; break; + case XINPUT_DEVSUBTYPE_DANCE_PAD: return "Dance Pad"; break; + case XINPUT_DEVSUBTYPE_GUITAR: return "Guitar"; break; + case XINPUT_DEVSUBTYPE_DRUM_KIT: return "Drum Kit"; break; + default: return "Device"; break; + } +} + +int Device::GetId() const +{ + return m_index; +} + +std::string Device::GetSource() const +{ + return "XInput"; +} + +// Update I/O + +bool Device::UpdateInput() +{ + return (ERROR_SUCCESS == PXInputGetState(m_index, &m_state_in)); +} + +bool Device::UpdateOutput() +{ + // this if statement is to make rumble work better when multiple ControllerInterfaces are using the device + // only calls XInputSetState if the state changed + if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out))) + { + m_current_state_out = m_state_out; + return (ERROR_SUCCESS == PXInputSetState(m_index, &m_state_out)); + } + else + { + return true; + } +} + +// GET name/source/id + +std::string Device::Button::GetName() const +{ + return named_buttons[m_index].name; +} + +std::string Device::Axis::GetName() const +{ + return std::string(named_axes[m_index]) + (m_range<0 ? '-' : '+'); +} + +std::string Device::Trigger::GetName() const +{ + return named_triggers[m_index]; +} + +std::string Device::Motor::GetName() const +{ + return named_motors[m_index]; +} + +// GET / SET STATES + +ControlState Device::Button::GetState() const +{ + return (m_buttons & named_buttons[m_index].bitmask) > 0; +} + +ControlState Device::Trigger::GetState() const +{ + return ControlState(m_trigger) / m_range; +} + +ControlState Device::Axis::GetState() const +{ + return std::max( 0.0f, ControlState(m_axis) / m_range ); +} + +void Device::Motor::SetState(ControlState state) +{ + m_motor = (WORD)(state * m_range); +} + +} +} -- cgit v1.2.3 From 3fd87a7636ff434118a5d7f7334550be8db55c0b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 16 Feb 2014 23:51:41 -0500 Subject: Second and final pass of clearing out tabs. --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 0aa639aae8..a5b382e1ff 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -121,7 +121,7 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) // get supported triggers for (int i = 0; i != sizeof(named_triggers)/sizeof(*named_triggers); ++i) { - //BYTE val = (&caps.Gamepad.bLeftTrigger)[i]; // should be max value / MSDN lies + //BYTE val = (&caps.Gamepad.bLeftTrigger)[i]; // should be max value / MSDN lies if ((&caps.Gamepad.bLeftTrigger)[i]) AddInput(new Trigger(i, (&m_state_in.Gamepad.bLeftTrigger)[i], 255 )); } @@ -143,7 +143,7 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) // get supported motors for (int i = 0; i != sizeof(named_motors)/sizeof(*named_motors); ++i) { - //WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies + //WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies if ((&caps.Vibration.wLeftMotorSpeed)[i]) AddOutput(new Motor(i, (&m_state_out.wLeftMotorSpeed)[i], 65535)); } -- cgit v1.2.3 From 2afe2152712981e21d6bda6f029292ed2b1cf91e Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Feb 2014 05:18:15 -0500 Subject: Convert all includes to relative paths. --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index a5b382e1ff..7574641258 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -1,5 +1,5 @@ -#include "XInput.h" +#include "InputCommon/ControllerInterface/XInput/XInput.h" namespace ciface { -- cgit v1.2.3 From 664c8d30a055f4762a2a60be77c1c8eaec1a5d85 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sat, 29 Mar 2014 11:05:44 +0100 Subject: Remove all trailing whitespaces from our codebase. --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 7574641258..860e12e46c 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -86,7 +86,7 @@ void Init(std::vector& devices) return; } } - + XINPUT_CAPABILITIES caps; for (int i = 0; i != 4; ++i) if (ERROR_SUCCESS == PXInputGetCapabilities(i, 0, &caps)) -- cgit v1.2.3 From a84bb7eb88c2620f71113c046400caeed3f51cc5 Mon Sep 17 00:00:00 2001 From: pinumbernumber <1337rz@gmail.com> Date: Thu, 17 Apr 2014 12:03:44 +0100 Subject: Add support for the guide button to XInput --- .../ControllerInterface/XInput/XInput.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 860e12e46c..8b68fa80bc 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -1,6 +1,10 @@ #include "InputCommon/ControllerInterface/XInput/XInput.h" +#ifndef XINPUT_GAMEPAD_GUIDE +#define XINPUT_GAMEPAD_GUIDE 0x0400 +#endif + namespace ciface { namespace XInput @@ -24,6 +28,7 @@ static const struct { "Back", XINPUT_GAMEPAD_BACK }, { "Shoulder L", XINPUT_GAMEPAD_LEFT_SHOULDER }, { "Shoulder R", XINPUT_GAMEPAD_RIGHT_SHOULDER }, + { "Guide", XINPUT_GAMEPAD_GUIDE }, { "Thumb L", XINPUT_GAMEPAD_LEFT_THUMB }, { "Thumb R", XINPUT_GAMEPAD_RIGHT_THUMB } }; @@ -58,6 +63,8 @@ static XInputGetCapabilities_t PXInputGetCapabilities = nullptr; static XInputSetState_t PXInputSetState = nullptr; static XInputGetState_t PXInputGetState = nullptr; +static bool haveGuideButton = false; + void Init(std::vector& devices) { if (!hXInput) @@ -76,7 +83,15 @@ void Init(std::vector& devices) PXInputGetCapabilities = (XInputGetCapabilities_t)::GetProcAddress(hXInput, "XInputGetCapabilities"); PXInputSetState = (XInputSetState_t)::GetProcAddress(hXInput, "XInputSetState"); - PXInputGetState = (XInputGetState_t)::GetProcAddress(hXInput, "XInputGetState"); + + // Ordinal 100 is the same as XInputGetState, except it doesn't dummy out the guide + // button info. Try loading it and fall back if needed. + PXInputGetState = (XInputGetState_t)::GetProcAddress(hXInput, (LPCSTR)100); + if (PXInputGetState) + haveGuideButton = true; + else + PXInputGetState = (XInputGetState_t)::GetProcAddress(hXInput, "XInputGetState"); + if (!PXInputGetCapabilities || !PXInputSetState || !PXInputGetState) @@ -114,7 +129,9 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) // get supported buttons for (int i = 0; i != sizeof(named_buttons)/sizeof(*named_buttons); ++i) { - if (named_buttons[i].bitmask & caps.Gamepad.wButtons) + // Guide button is never reported in caps + if ((named_buttons[i].bitmask & caps.Gamepad.wButtons) || + ((named_buttons[i].bitmask & XINPUT_GAMEPAD_GUIDE) && haveGuideButton)) AddInput(new Button(i, m_state_in.Gamepad.wButtons)); } -- cgit v1.2.3 From 5adbc83453d14b23818442f545ceede0e4548196 Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Mon, 11 Aug 2014 13:43:26 -0400 Subject: Change ControlState typedef to double, and change all related floats/doubles to use it. Fixes an off by 1 issue related to double->float->double conversion, and eliminates numerous warnings. --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 8b68fa80bc..b58c1c81a5 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -256,7 +256,7 @@ ControlState Device::Trigger::GetState() const ControlState Device::Axis::GetState() const { - return std::max( 0.0f, ControlState(m_axis) / m_range ); + return std::max( 0.0, ControlState(m_axis) / m_range ); } void Device::Motor::SetState(ControlState state) -- cgit v1.2.3 From c2578d066828145a7abb67c46d912ebdc68ef9d9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 8 Sep 2014 21:36:04 -0400 Subject: InputCommon: Remove unnecessary breaks in XInput's GetName function --- .../ControllerInterface/XInput/XInput.cpp | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index b58c1c81a5..37949e03ac 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -177,14 +177,22 @@ std::string Device::GetName() const { switch (m_subtype) { - case XINPUT_DEVSUBTYPE_GAMEPAD: return "Gamepad"; break; - case XINPUT_DEVSUBTYPE_WHEEL: return "Wheel"; break; - case XINPUT_DEVSUBTYPE_ARCADE_STICK: return "Arcade Stick"; break; - case XINPUT_DEVSUBTYPE_FLIGHT_STICK: return "Flight Stick"; break; - case XINPUT_DEVSUBTYPE_DANCE_PAD: return "Dance Pad"; break; - case XINPUT_DEVSUBTYPE_GUITAR: return "Guitar"; break; - case XINPUT_DEVSUBTYPE_DRUM_KIT: return "Drum Kit"; break; - default: return "Device"; break; + case XINPUT_DEVSUBTYPE_GAMEPAD: + return "Gamepad"; + case XINPUT_DEVSUBTYPE_WHEEL: + return "Wheel"; + case XINPUT_DEVSUBTYPE_ARCADE_STICK: + return "Arcade Stick"; + case XINPUT_DEVSUBTYPE_FLIGHT_STICK: + return "Flight Stick"; + case XINPUT_DEVSUBTYPE_DANCE_PAD: + return "Dance Pad"; + case XINPUT_DEVSUBTYPE_GUITAR: + return "Guitar"; + case XINPUT_DEVSUBTYPE_DRUM_KIT: + return "Drum Kit"; + default: + return "Device"; } } -- cgit v1.2.3 From 61fcfc4bf2058d971af6882af2765ad34d935fcb Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 13 Nov 2014 00:56:32 -0800 Subject: ControllerInterface: Remove unused ClearInputState --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 37949e03ac..961b92270b 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -165,11 +165,6 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) AddOutput(new Motor(i, (&m_state_out.wLeftMotorSpeed)[i], 65535)); } - ClearInputState(); -} - -void Device::ClearInputState() -{ ZeroMemory(&m_state_in, sizeof(m_state_in)); } -- cgit v1.2.3 From f2787f620eebbbfb746f59cfbd0318210297061b Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 13 Nov 2014 00:55:14 -0800 Subject: ControllerInterface: Make UpdateInput / UpdateOutput return void The return values here have never been checked, so it doesn't make sense to return a value to begin with. --- .../Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 961b92270b..68d7eeb479 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -203,23 +203,19 @@ std::string Device::GetSource() const // Update I/O -bool Device::UpdateInput() +void Device::UpdateInput() { - return (ERROR_SUCCESS == PXInputGetState(m_index, &m_state_in)); + PXInputGetState(m_index, &m_state_in); } -bool Device::UpdateOutput() +void Device::UpdateOutput() { // this if statement is to make rumble work better when multiple ControllerInterfaces are using the device // only calls XInputSetState if the state changed if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out))) { m_current_state_out = m_state_out; - return (ERROR_SUCCESS == PXInputSetState(m_index, &m_state_out)); - } - else - { - return true; + PXInputSetState(m_index, &m_state_out); } } -- cgit v1.2.3 From 1958a10b6f5ba8348268b077f6410dadb2a20c8f Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 13 Nov 2014 01:10:55 -0800 Subject: XInput: Apply immediately as well --- .../Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 68d7eeb479..2bf98bb0b3 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -121,7 +121,6 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) : m_index(index), m_subtype(caps.SubType) { ZeroMemory(&m_state_out, sizeof(m_state_out)); - ZeroMemory(&m_current_state_out, sizeof(m_current_state_out)); // XInputGetCaps seems to always claim all capabilities are supported // but I will leave all this stuff in, incase m$ fixes xinput up a bit @@ -162,7 +161,7 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) { //WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies if ((&caps.Vibration.wLeftMotorSpeed)[i]) - AddOutput(new Motor(i, (&m_state_out.wLeftMotorSpeed)[i], 65535)); + AddOutput(new Motor(i, this, (&m_state_out.wLeftMotorSpeed)[i], 65535)); } ZeroMemory(&m_state_in, sizeof(m_state_in)); @@ -208,15 +207,9 @@ void Device::UpdateInput() PXInputGetState(m_index, &m_state_in); } -void Device::UpdateOutput() +void Device::UpdateMotors() { - // this if statement is to make rumble work better when multiple ControllerInterfaces are using the device - // only calls XInputSetState if the state changed - if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out))) - { - m_current_state_out = m_state_out; - PXInputSetState(m_index, &m_state_out); - } + PXInputSetState(m_index, &m_state_out); } // GET name/source/id @@ -261,6 +254,7 @@ ControlState Device::Axis::GetState() const void Device::Motor::SetState(ControlState state) { m_motor = (WORD)(state * m_range); + m_parent->UpdateMotors(); } } -- cgit v1.2.3 From 268f52e05479dc8e0f2cbf550472ca8d4867cf22 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sun, 24 May 2015 06:32:32 +0200 Subject: Add missing license headers --- Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp') diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 2bf98bb0b3..0e2c0bcad3 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -1,3 +1,7 @@ +// Copyright 2010 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + #include "InputCommon/ControllerInterface/XInput/XInput.h" -- cgit v1.2.3