summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2019-01-05 17:16:35 -0500
committerGitHub <noreply@github.com>2019-01-05 17:16:35 -0500
commit0ca9accd8b9f92a2f6e4fa600136a9e51f543b5f (patch)
treeeb2f8eb6eeb0c05f52515578704ba809a08442d0 /Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
parentd75e9b2d5d6e8075edad15da00cb10e32996890f (diff)
parenta995e2f5ba3bb55b4245675428bbdc3d34cb7355 (diff)
Merge pull request #7640 from jordan-woyak/input-fixes
ControllerInterface: Output/Rumble fixes
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
index 9968bc798f..a01ae6c75a 100644
--- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
@@ -6,6 +6,7 @@
#include <map>
#include <sstream>
+#include "Common/Logging/Log.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/ControllerInterface/DInput/DInput.h"
#include "InputCommon/ControllerInterface/DInput/DInputJoystick.h"
@@ -40,8 +41,10 @@ void InitJoystick(IDirectInput8* const idi8, HWND hwnd)
if (FAILED(js_device->SetCooperativeLevel(GetAncestor(hwnd, GA_ROOT),
DISCL_BACKGROUND | DISCL_EXCLUSIVE)))
{
- // PanicAlert("SetCooperativeLevel(DISCL_EXCLUSIVE) failed!");
- // fall back to non-exclusive mode, with no rumble
+ WARN_LOG(
+ PAD,
+ "DInput: Failed to acquire device exclusively. Force feedback will be unavailable.");
+ // Fall back to non-exclusive mode, with no rumble
if (FAILED(
js_device->SetCooperativeLevel(nullptr, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE)))
{
@@ -136,20 +139,27 @@ Joystick::Joystick(/*const LPCDIDEVICEINSTANCE lpddi, */ const LPDIRECTINPUTDEVI
}
}
- // force feedback
+ // Force feedback:
std::list<DIDEVICEOBJECTINSTANCE> objects;
if (SUCCEEDED(m_device->EnumObjects(DIEnumDeviceObjectsCallback, (LPVOID)&objects, DIDFT_AXIS)))
{
- InitForceFeedback(m_device, (int)objects.size());
+ const int num_ff_axes =
+ std::count_if(std::begin(objects), std::end(objects), [](DIDEVICEOBJECTINSTANCE& pdidoi) {
+ return pdidoi.dwFlags && DIDOI_FFACTUATOR;
+ });
+ InitForceFeedback(m_device, num_ff_axes);
}
- ZeroMemory(&m_state_in, sizeof(m_state_in));
- // set hats to center
- memset(m_state_in.rgdwPOV, 0xFF, sizeof(m_state_in.rgdwPOV));
+ // Zero inputs:
+ m_state_in = {};
+ // Set hats to center:
+ std::fill(std::begin(m_state_in.rgdwPOV), std::end(m_state_in.rgdwPOV), 0xFF);
}
Joystick::~Joystick()
{
+ DeInitForceFeedback();
+
m_device->Unacquire();
m_device->Release();
}
@@ -265,5 +275,5 @@ ControlState Joystick::Hat::GetState() const
return (abs((int)(m_hat / 4500 - m_direction * 2 + 8) % 8 - 4) > 2);
}
-}
-}
+} // namespace DInput
+} // namespace ciface