From 34a52528ff007668aa6d68e3decd55b8ba4fa06e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 16 Sep 2002 06:50:26 +0000 Subject: [PATCH] Date: Thu, 12 Sep 2002 20:35:51 -0400 From: Darrell Walisser Subject: Jag joystick fix (take 2) This patch enables all HID devices, not just joysticks. This quell complaints about gamepads not working, though I don't have I gamepad to verify this theory. Before, only joysticks were recognized. Now, all HID devices except the keyboard and mouse will be recognized. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40496 --- src/joystick/darwin/SDL_sysjoystick.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/joystick/darwin/SDL_sysjoystick.c b/src/joystick/darwin/SDL_sysjoystick.c index 88803f44a..c8984723a 100644 --- a/src/joystick/darwin/SDL_sysjoystick.c +++ b/src/joystick/darwin/SDL_sysjoystick.c @@ -571,8 +571,6 @@ int SDL_SYS_JoystickInit(void) CFMutableDictionaryRef hidMatchDictionary = NULL; recDevice *device, *lastDevice; io_object_t ioHIDDeviceObject = NULL; - UInt32 usagePage = kHIDPage_GenericDesktop; - UInt32 usage = kHIDUsage_GD_Joystick; /* We probably also should check for gamepads? */ SDL_numjoysticks = 0; @@ -591,15 +589,20 @@ int SDL_SYS_JoystickInit(void) /* Set up a matching dictionary to search I/O Registry by class name for all HID class devices. */ hidMatchDictionary = IOServiceMatching (kIOHIDDeviceKey); - if ((hidMatchDictionary != NULL) && (usagePage) && (usage)) + if ((hidMatchDictionary != NULL)) { /* Add key for device type (joystick, in this case) to refine the matching dictionary. */ + + /* NOTE: we now perform this filtering later + UInt32 usagePage = kHIDPage_GenericDesktop; + UInt32 usage = kHIDUsage_GD_Joystick; CFNumberRef refUsage = NULL, refUsagePage = NULL; refUsage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usage); CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsageKey), refUsage); refUsagePage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usagePage); CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsagePageKey), refUsagePage); + */ } else { @@ -638,6 +641,18 @@ int SDL_SYS_JoystickInit(void) result = IOObjectRelease (ioHIDDeviceObject); // if (KERN_SUCCESS != result) // HIDReportErrorNum ("IOObjectRelease error with ioHIDDeviceObject.", result); + + /* Filter device list to non-keyboard/mouse stuff */ + if ( device->usagePage == kHIDPage_GenericDesktop && + (device->usage == kHIDUsage_GD_Keyboard || + device->usage == kHIDUsage_GD_Mouse)) { + + /* release memory for the device */ + HIDDisposeDevice (&device); + DisposePtr((Ptr)device); + continue; + } + /* Add device to the end of the list */ if (lastDevice) lastDevice->pNext = device;