Skip to content

Commit

Permalink
Date: Thu, 12 Sep 2002 20:35:51 -0400
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Sep 16, 2002
1 parent f84d8d4 commit cedf930
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/joystick/darwin/SDL_sysjoystick.c
Expand Up @@ -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;

Expand All @@ -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
{
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit cedf930

Please sign in to comment.