Fixed hanging on startup in native OS X backend when Xbox 360 gamepad is connected

Apple's HID Utilities has a issue with device elements enumeration while using unofficial drivers from here:
http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver
This commit is contained in:
alexey.lysiuk 2014-12-20 11:49:19 +02:00
parent 24f1bfae99
commit 08cd03dbb7

View file

@ -152,10 +152,20 @@ IOKitJoystick::IOKitJoystick( IOHIDDeviceRef device )
: m_device( device ) : m_device( device )
, m_sensitivity( DEFAULT_SENSITIVITY ) , m_sensitivity( DEFAULT_SENSITIVITY )
{ {
IOHIDElementRef element = HIDGetFirstDeviceElement( device, kHIDElementTypeInput ); assert(NULL != device);
assert(IOHIDDeviceGetTypeID() == CFGetTypeID(device));
while ( NULL != element ) CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone);
assert(NULL != elements);
assert(CFArrayGetTypeID() == CFGetTypeID(elements));
for (CFIndex i = 0, count = CFArrayGetCount(elements); i < count; ++i)
{ {
const IOHIDElementRef element =
static_cast<IOHIDElementRef>(const_cast<void*>(CFArrayGetValueAtIndex(elements, i)));
assert(NULL != element);
assert(IOHIDElementGetTypeID() == CFGetTypeID(element));
const uint32_t usagePage = IOHIDElementGetUsagePage( element ); const uint32_t usagePage = IOHIDElementGetUsagePage( element );
if ( kHIDPage_GenericDesktop == usagePage ) if ( kHIDPage_GenericDesktop == usagePage )
@ -200,10 +210,10 @@ IOKitJoystick::IOKitJoystick( IOHIDDeviceRef device )
HIDQueueElement( m_device, element ); HIDQueueElement( m_device, element );
} }
element = HIDGetNextDeviceElement( element, kHIDElementTypeInput );
} }
CFRelease(elements);
SetDefaultConfig(); SetDefaultConfig();
} }