diff src/joystick/darwin/SDL_sysjoystick.c @ 495:4503f9475cf2

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.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 16 Sep 2002 06:50:26 +0000
parents 429fe382fe4f
children a71ce390adeb
line wrap: on
line diff
--- a/src/joystick/darwin/SDL_sysjoystick.c	Mon Sep 16 06:26:22 2002 +0000
+++ b/src/joystick/darwin/SDL_sysjoystick.c	Mon Sep 16 06:50:26 2002 +0000
@@ -571,8 +571,6 @@
 	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 @@
 
 	/* 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 @@
 		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;