mirror of https://github.com/encounter/SDL.git
mac: Fix gamepad detection
This commit is contained in:
parent
51e9e98451
commit
5346216368
|
@ -43,6 +43,7 @@
|
|||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <mach/mach.h>
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <IOKit/hid/IOHIDDevice.h>
|
||||
#include <IOKit/usb/USBSpec.h>
|
||||
#endif
|
||||
|
||||
|
@ -218,12 +219,15 @@ HIDAPI_InitializeDiscovery()
|
|||
SDL_HIDAPI_discovery.m_notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
|
||||
if (SDL_HIDAPI_discovery.m_notificationPort) {
|
||||
{
|
||||
CFMutableDictionaryRef matchingDict = IOServiceMatching("IOUSBDevice");
|
||||
|
||||
/* Note: IOServiceAddMatchingNotification consumes the reference to matchingDict */
|
||||
io_iterator_t portIterator = 0;
|
||||
io_object_t entry;
|
||||
if (IOServiceAddMatchingNotification(SDL_HIDAPI_discovery.m_notificationPort, kIOMatchedNotification, matchingDict, CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator) == 0) {
|
||||
IOReturn result = IOServiceAddMatchingNotification(
|
||||
SDL_HIDAPI_discovery.m_notificationPort,
|
||||
kIOFirstMatchNotification,
|
||||
IOServiceMatching(kIOHIDDeviceKey),
|
||||
CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator);
|
||||
|
||||
if (result == 0) {
|
||||
/* Must drain the existing iterator, or we won't receive new notifications */
|
||||
while ((entry = IOIteratorNext(portIterator)) != 0) {
|
||||
IOObjectRelease(entry);
|
||||
|
@ -234,12 +238,15 @@ HIDAPI_InitializeDiscovery()
|
|||
}
|
||||
}
|
||||
{
|
||||
CFMutableDictionaryRef matchingDict = IOServiceMatching("IOBluetoothDevice");
|
||||
|
||||
/* Note: IOServiceAddMatchingNotification consumes the reference to matchingDict */
|
||||
io_iterator_t portIterator = 0;
|
||||
io_object_t entry;
|
||||
if (IOServiceAddMatchingNotification(SDL_HIDAPI_discovery.m_notificationPort, kIOMatchedNotification, matchingDict, CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator) == 0) {
|
||||
IOReturn result = IOServiceAddMatchingNotification(
|
||||
SDL_HIDAPI_discovery.m_notificationPort,
|
||||
kIOTerminatedNotification,
|
||||
IOServiceMatching(kIOHIDDeviceKey),
|
||||
CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator);
|
||||
|
||||
if (result == 0) {
|
||||
/* Must drain the existing iterator, or we won't receive new notifications */
|
||||
while ((entry = IOIteratorNext(portIterator)) != 0) {
|
||||
IOObjectRelease(entry);
|
||||
|
|
Loading…
Reference in New Issue