Mercurial > sdl-ios-xcode
comparison 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 |
comparison
equal
deleted
inserted
replaced
494:95aa4041e7f9 | 495:4503f9475cf2 |
---|---|
569 mach_port_t masterPort = NULL; | 569 mach_port_t masterPort = NULL; |
570 io_iterator_t hidObjectIterator = NULL; | 570 io_iterator_t hidObjectIterator = NULL; |
571 CFMutableDictionaryRef hidMatchDictionary = NULL; | 571 CFMutableDictionaryRef hidMatchDictionary = NULL; |
572 recDevice *device, *lastDevice; | 572 recDevice *device, *lastDevice; |
573 io_object_t ioHIDDeviceObject = NULL; | 573 io_object_t ioHIDDeviceObject = NULL; |
574 UInt32 usagePage = kHIDPage_GenericDesktop; | |
575 UInt32 usage = kHIDUsage_GD_Joystick; /* We probably also should check for gamepads? */ | |
576 | 574 |
577 SDL_numjoysticks = 0; | 575 SDL_numjoysticks = 0; |
578 | 576 |
579 if (NULL != gpDeviceList) | 577 if (NULL != gpDeviceList) |
580 { | 578 { |
589 return -1; | 587 return -1; |
590 } | 588 } |
591 | 589 |
592 /* Set up a matching dictionary to search I/O Registry by class name for all HID class devices. */ | 590 /* Set up a matching dictionary to search I/O Registry by class name for all HID class devices. */ |
593 hidMatchDictionary = IOServiceMatching (kIOHIDDeviceKey); | 591 hidMatchDictionary = IOServiceMatching (kIOHIDDeviceKey); |
594 if ((hidMatchDictionary != NULL) && (usagePage) && (usage)) | 592 if ((hidMatchDictionary != NULL)) |
595 { | 593 { |
596 /* Add key for device type (joystick, in this case) to refine the matching dictionary. */ | 594 /* Add key for device type (joystick, in this case) to refine the matching dictionary. */ |
595 | |
596 /* NOTE: we now perform this filtering later | |
597 UInt32 usagePage = kHIDPage_GenericDesktop; | |
598 UInt32 usage = kHIDUsage_GD_Joystick; | |
597 CFNumberRef refUsage = NULL, refUsagePage = NULL; | 599 CFNumberRef refUsage = NULL, refUsagePage = NULL; |
598 | 600 |
599 refUsage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usage); | 601 refUsage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usage); |
600 CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsageKey), refUsage); | 602 CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsageKey), refUsage); |
601 refUsagePage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usagePage); | 603 refUsagePage = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &usagePage); |
602 CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsagePageKey), refUsagePage); | 604 CFDictionarySetValue (hidMatchDictionary, CFSTR (kIOHIDPrimaryUsagePageKey), refUsagePage); |
605 */ | |
603 } | 606 } |
604 else | 607 else |
605 { | 608 { |
606 SDL_SetError("Joystick: Failed to get HID CFMutableDictionaryRef via IOServiceMatching."); | 609 SDL_SetError("Joystick: Failed to get HID CFMutableDictionaryRef via IOServiceMatching."); |
607 return -1; | 610 return -1; |
636 | 639 |
637 /* dump device object, it is no longer needed */ | 640 /* dump device object, it is no longer needed */ |
638 result = IOObjectRelease (ioHIDDeviceObject); | 641 result = IOObjectRelease (ioHIDDeviceObject); |
639 // if (KERN_SUCCESS != result) | 642 // if (KERN_SUCCESS != result) |
640 // HIDReportErrorNum ("IOObjectRelease error with ioHIDDeviceObject.", result); | 643 // HIDReportErrorNum ("IOObjectRelease error with ioHIDDeviceObject.", result); |
644 | |
645 /* Filter device list to non-keyboard/mouse stuff */ | |
646 if ( device->usagePage == kHIDPage_GenericDesktop && | |
647 (device->usage == kHIDUsage_GD_Keyboard || | |
648 device->usage == kHIDUsage_GD_Mouse)) { | |
649 | |
650 /* release memory for the device */ | |
651 HIDDisposeDevice (&device); | |
652 DisposePtr((Ptr)device); | |
653 continue; | |
654 } | |
655 | |
641 /* Add device to the end of the list */ | 656 /* Add device to the end of the list */ |
642 if (lastDevice) | 657 if (lastDevice) |
643 lastDevice->pNext = device; | 658 lastDevice->pNext = device; |
644 else | 659 else |
645 gpDeviceList = device; | 660 gpDeviceList = device; |