summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2016-06-24 10:43:46 +0200
committerPierre Bourdon <delroth@gmail.com>2016-06-24 10:43:46 +0200
commit3570c7f03a2aa90aa634f96c0af1969af610f14d (patch)
tree4252e03c0e853ba7cffe022937698c854ad0eaa9 /Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
parent2115e8a4a6814e32107b5205ff5c95bbd3c6e99c (diff)
Reformat all the things. Have fun with merge conflicts.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp325
1 files changed, 152 insertions, 173 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
index c8438b488f..d7ed3343a0 100644
--- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
@@ -2,7 +2,6 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
-
#include "InputCommon/ControllerInterface/XInput/XInput.h"
#ifndef XINPUT_GAMEPAD_GUIDE
@@ -13,49 +12,31 @@ 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 },
- { "Guide", XINPUT_GAMEPAD_GUIDE },
- { "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"
-};
+ 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},
+ {"Guide", XINPUT_GAMEPAD_GUIDE},
+ {"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;
@@ -71,199 +52,197 @@ static bool haveGuideButton = false;
void Init(std::vector<Core::Device*>& 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");
-
- // 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)
- {
- ::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));
+ 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");
+
+ // 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)
+ {
+ ::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_subtype(caps.SubType), m_index(index)
-{
- // 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)
- {
- // 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));
- }
-
- // 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, this, (&m_state_out.wLeftMotorSpeed)[i], 65535));
- }
-
- ZeroMemory(&m_state_in, sizeof(m_state_in));
+ if (hXInput)
+ {
+ ::FreeLibrary(hXInput);
+ hXInput = nullptr;
+ }
+}
+
+Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) : m_subtype(caps.SubType), m_index(index)
+{
+ // 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)
+ {
+ // 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));
+ }
+
+ // 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, this, (&m_state_out.wLeftMotorSpeed)[i], 65535));
+ }
+
+ ZeroMemory(&m_state_in, sizeof(m_state_in));
}
std::string Device::GetName() const
{
- switch (m_subtype)
- {
- 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";
- }
+ switch (m_subtype)
+ {
+ 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";
+ }
}
int Device::GetId() const
{
- return m_index;
+ return m_index;
}
std::string Device::GetSource() const
{
- return "XInput";
+ return "XInput";
}
// Update I/O
void Device::UpdateInput()
{
- PXInputGetState(m_index, &m_state_in);
+ PXInputGetState(m_index, &m_state_in);
}
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);
- }
+ // 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);
+ }
}
// GET name/source/id
std::string Device::Button::GetName() const
{
- return named_buttons[m_index].name;
+ return named_buttons[m_index].name;
}
std::string Device::Axis::GetName() const
{
- return std::string(named_axes[m_index]) + (m_range<0 ? '-' : '+');
+ return std::string(named_axes[m_index]) + (m_range < 0 ? '-' : '+');
}
std::string Device::Trigger::GetName() const
{
- return named_triggers[m_index];
+ return named_triggers[m_index];
}
std::string Device::Motor::GetName() const
{
- return named_motors[m_index];
+ return named_motors[m_index];
}
// GET / SET STATES
ControlState Device::Button::GetState() const
{
- return (m_buttons & named_buttons[m_index].bitmask) > 0;
+ return (m_buttons & named_buttons[m_index].bitmask) > 0;
}
ControlState Device::Trigger::GetState() const
{
- return ControlState(m_trigger) / m_range;
+ return ControlState(m_trigger) / m_range;
}
ControlState Device::Axis::GetState() const
{
- return std::max( 0.0, ControlState(m_axis) / m_range );
+ return std::max(0.0, ControlState(m_axis) / m_range);
}
void Device::Motor::SetState(ControlState state)
{
- m_motor = (WORD)(state * m_range);
- m_parent->UpdateMotors();
+ m_motor = (WORD)(state * m_range);
+ m_parent->UpdateMotors();
}
-
}
}