diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-07-01 00:37:26 +1200 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-07-01 10:13:05 +1200 |
| commit | 77183899e0526a343b8429cf04a1c07b31aafc34 (patch) | |
| tree | 3d84ec15e1b700d3ae5a6add3fcb9b44d8fd2dc8 /Source/Core/InputCommon/ControllerInterface/evdev | |
| parent | 0dc8763247051797bb4952206bfe6fc99164229b (diff) | |
evdev: Support axis with ranges which extend below zero.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/evdev')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp | 12 | ||||
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/evdev/evdev.h | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp index 2f4d53e234..9b31da73c4 100644 --- a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp +++ b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp @@ -164,7 +164,8 @@ ControlState evdevDevice::Button::GetState() const evdevDevice::Axis::Axis(u8 index, u16 code, bool upper, libevdev* dev) : m_code(code), m_index(index), m_upper(upper), m_dev(dev) { - m_range = libevdev_get_abs_maximum(m_dev, m_code); + m_min = libevdev_get_abs_minimum(m_dev, m_code); + m_range = libevdev_get_abs_maximum(m_dev, m_code) + abs(m_min); } std::string evdevDevice::Axis::GetName() const @@ -176,10 +177,15 @@ ControlState evdevDevice::Axis::GetState() const { int value = 0; libevdev_fetch_event_value(m_dev, EV_ABS, m_code, &value); + + // Value from 0.0 to 1.0 + ControlState fvalue = double(value - m_min) / double(m_range); + + // Split into two axis, each covering half the range from 0.0 to 1.0 if (m_upper) - return std::max(0.0, double(value) / double(m_range) - 0.5) * 2.0; + return std::max(0.0, fvalue - 0.5) * 2.0; else - return (0.5 - std::min(0.5, double(value) / double(m_range))) * 2.0; + return (0.5 - std::min(0.5, fvalue)) * 2.0; } std::string evdevDevice::ForceFeedback::GetName() const diff --git a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h index 7290fbc379..d1555c8cce 100644 --- a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h +++ b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h @@ -43,6 +43,7 @@ private: const u8 m_index; const bool m_upper; int m_range; + int m_min; libevdev* m_dev; }; |
