summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2011-03-14 01:20:11 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2011-03-14 01:20:11 +0000
commit8fedc3db383b8a39f756f4d1f037e0e45662d41a (patch)
tree8e05259aab1988f18ef779c2e197a1d455521512 /Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp
parent37e31f2df60774a04627f12c157d000acfa6dd4b (diff)
Clean up "ControllerInterface" a bit.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7339 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp')
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp91
1 files changed, 39 insertions, 52 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp
index 0e39942396..7fe54d0d09 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp
@@ -51,64 +51,64 @@ static const char* const named_motors[] =
"Motor R"
};
-void Init( std::vector<ControllerInterface::Device*>& devices )
+void Init(DeviceList& devices)
{
XINPUT_CAPABILITIES caps;
- for ( int i = 0; i < 4; ++i )
- if ( ERROR_SUCCESS == XInputGetCapabilities( i, 0, &caps ) )
- devices.push_back( new Device( &caps, i ) );
-
+ for (int i = 0; i != 4; ++i)
+ if (ERROR_SUCCESS == XInputGetCapabilities(i, 0, &caps))
+ devices.push_back(new Device(caps, i));
}
-Device::Device( const XINPUT_CAPABILITIES* const caps, const unsigned int index )
-: m_index(index), m_subtype(caps->SubType)
+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) );
+ 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( /*xinput_named_buttons[i].bitmask, */i ) );
+ 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 )
+ 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, 255 ) );
+ //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 )
+ for (int i = 0; i != sizeof(named_axes)/sizeof(*named_axes); ++i)
{
- //SHORT val = (&caps->Gamepad.sThumbLX)[i]; // xinput doesnt give the range / msdn is lier
- if ( (&caps->Gamepad.sThumbLX)[i] )
+ //SHORT val = (&caps.Gamepad.sThumbLX)[i]; // xinput doesnt give the range / msdn is lier
+ 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, -32768 ) );
- AddInput( new Axis( i, 32767 ) );
+ 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 )
+ 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, 65535 ) );
+ //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) );
+ ZeroMemory(&m_state_in, sizeof(m_state_in));
}
std::string Device::GetName() const
@@ -117,7 +117,7 @@ std::string Device::GetName() const
// subtype doesn't seem to work, i tested with 2 diff arcade sticks, both were shown as gamepad
// ill leave it in anyway, maybe m$ will fix it
- switch ( m_subtype )
+ switch (m_subtype)
{
case XINPUT_DEVSUBTYPE_GAMEPAD : return "Gamepad"; break;
case 0x02 /*XINPUT_DEVSUBTYPE_WHEEL*/ : return "Wheel"; break;
@@ -144,17 +144,17 @@ std::string Device::GetSource() const
bool Device::UpdateInput()
{
- return ( ERROR_SUCCESS == XInputGetState( m_index, &m_state_in ) );
+ return (ERROR_SUCCESS == XInputGetState(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) ) )
+ if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out)))
{
m_current_state_out = m_state_out;
- return ( ERROR_SUCCESS == XInputSetState( m_index, &m_state_out ) );
+ return (ERROR_SUCCESS == XInputSetState(m_index, &m_state_out));
}
else
return true;
@@ -162,7 +162,6 @@ bool Device::UpdateOutput()
// GET name/source/id
-
std::string Device::Button::GetName() const
{
return named_buttons[m_index].name;
@@ -183,38 +182,26 @@ std::string Device::Motor::GetName() const
return named_motors[m_index];
}
-// get/set control state
-
-ControlState Device::GetInputState( const ControllerInterface::Device::Input* const input ) const
-{
- return ((Input*)input)->GetState( &m_state_in.Gamepad );
-}
-
-void Device::SetOutputState( const ControllerInterface::Device::Output* const output, const ControlState state )
-{
- return ((Output*)output)->SetState( state, &m_state_out );
-}
-
// GET / SET STATES
-ControlState Device::Button::GetState( const XINPUT_GAMEPAD* const gamepad ) const
+ControlState Device::Button::GetState() const
{
- return (gamepad->wButtons & named_buttons[m_index].bitmask) > 0;
+ return (m_buttons & named_buttons[m_index].bitmask) > 0;
}
-ControlState Device::Trigger::GetState( const XINPUT_GAMEPAD* const gamepad ) const
+ControlState Device::Trigger::GetState() const
{
- return ControlState((&gamepad->bLeftTrigger)[m_index]) / m_range;
+ return ControlState(m_trigger) / m_range;
}
-ControlState Device::Axis::GetState( const XINPUT_GAMEPAD* const gamepad ) const
+ControlState Device::Axis::GetState() const
{
- return std::max( 0.0f, ControlState((&gamepad->sThumbLX)[m_index]) / m_range );
+ return std::max( 0.0f, ControlState(m_axis) / m_range );
}
-void Device::Motor::SetState( const ControlState state, XINPUT_VIBRATION* const vibration )
+void Device::Motor::SetState(ControlState state)
{
- (&vibration->wLeftMotorSpeed)[m_index] = (WORD)(state * m_range);
+ m_motor = (WORD)(state * m_range);
}
}