mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-09 23:59:27 +01:00
Prevent multiple HID elements of same usage type on OSX
On OSX, iterate the HID device's elements and only store the last of each type to accommodate for flaky hardware
This commit is contained in:
parent
2b4bf8662a
commit
79a646a67d
@ -2,6 +2,7 @@
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
@ -49,11 +50,26 @@ Joystick::Joystick(IOHIDDeviceRef device, std::string name)
|
||||
|
||||
if (axes)
|
||||
{
|
||||
std::vector<IOHIDElementRef> elems;
|
||||
for (int i = 0; i < CFArrayGetCount(axes); i++)
|
||||
{
|
||||
IOHIDElementRef e = (IOHIDElementRef)CFArrayGetValueAtIndex(axes, i);
|
||||
// DeviceElementDebugPrint(e, nullptr);
|
||||
uint32_t usage = IOHIDElementGetUsage(e);
|
||||
|
||||
// Check for any existing elements with the same usage
|
||||
auto it = std::find_if(elems.begin(), elems.end(), [usage](const auto& ref) {
|
||||
return usage == IOHIDElementGetUsage(ref);
|
||||
});
|
||||
|
||||
if (it == elems.end())
|
||||
elems.push_back(e);
|
||||
else
|
||||
*it = e;
|
||||
}
|
||||
|
||||
for (auto e : elems)
|
||||
{
|
||||
if (IOHIDElementGetUsage(e) == kHIDUsage_GD_Hatswitch)
|
||||
{
|
||||
AddInput(new Hat(e, m_device, Hat::up));
|
||||
@ -67,6 +83,7 @@ Joystick::Joystick(IOHIDDeviceRef device, std::string name)
|
||||
new Axis(e, m_device, Axis::positive));
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(axes);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user