From 565d8f22c23c7c6c6817d11ef1ca02e70ba5d2ae Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 20 Apr 2016 20:27:47 -0400 Subject: [PATCH] libaltos: Fix for Mac OS X El Capitan USB enumeration for serial devices changed Signed-off-by: Keith Packard --- libaltos/Makefile-standalone | 6 +-- libaltos/libaltos.dylib | Bin 41596 -> 46228 bytes libaltos/libaltos_darwin.c | 82 ++++++++++++++++++++++++++++++----- 3 files changed, 75 insertions(+), 13 deletions(-) diff --git a/libaltos/Makefile-standalone b/libaltos/Makefile-standalone index 9a44b8e0..1430aacb 100644 --- a/libaltos/Makefile-standalone +++ b/libaltos/Makefile-standalone @@ -33,8 +33,8 @@ OS_SRCS=libaltos_posix.c libaltos_darwin.c # -iwithsysroot /System/Library/Frameworks/IOKit.framework/Headers \ # -iwithsysroot /System/Library/Frameworks/CoreFoundation.framework/Headers -XCODE=/Applications/Xcode.app -SDK=$(XCODE)/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk +XCODE=/Applications/Xcode-beta.app +SDK=$(XCODE)/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk MINVERSION=10.5 OS_LIB_CFLAGS=\ @@ -43,7 +43,7 @@ OS_LIB_CFLAGS=\ -iwithsysroot /System/Library/Frameworks/JavaVM.framework/Headers \ -iwithsysroot /System/Library/Frameworks/IOKit.framework/Headers \ -iwithsysroot /System/Library/Frameworks/CoreFoundation.framework/Headers -OS_APP_CFLAGS=$(OS_LIB_CFLAGS) +OS_APP_CFLAGS=$(OS_LIB_CFLAGS) -O0 -g OS_LDFLAGS =\ -framework IOKit -framework CoreFoundation diff --git a/libaltos/libaltos.dylib b/libaltos/libaltos.dylib index 8b491c580c9c06e913b9438e083ae7274734f5d8..c18493ea7836aca971c0f9ebe8b3b04b1b8d85de 100755 GIT binary patch literal 46228 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 #include +#include +#include +#include #include #include #include @@ -45,11 +48,23 @@ struct altos_list { int ftdi; }; +static char * +get_cfstring(CFTypeRef string, char result[512]) +{ + Boolean got_string; + + got_string = CFStringGetCString(string, result, 512, kCFStringEncodingASCII); + if (!got_string) + strcpy(result, "CFStringGetCString failed"); + return result; +} + static int get_string(io_object_t object, CFStringRef entry, char *result, int result_len) { CFTypeRef entry_as_string; Boolean got_string; + char entry_string[512]; entry_as_string = IORegistryEntrySearchCFProperty (object, kIOServicePlane, @@ -62,8 +77,9 @@ get_string(io_object_t object, CFStringRef entry, char *result, int result_len) kCFStringEncodingASCII); CFRelease(entry_as_string); - if (got_string) + if (got_string) { return 1; + } } return 0; } @@ -73,6 +89,7 @@ get_number(io_object_t object, CFStringRef entry, int *result) { CFTypeRef entry_as_number; Boolean got_number; + char entry_string[512]; entry_as_number = IORegistryEntrySearchCFProperty (object, kIOServicePlane, @@ -83,8 +100,9 @@ get_number(io_object_t object, CFStringRef entry, int *result) got_number = CFNumberGetValue(entry_as_number, kCFNumberIntType, result); - if (got_number) + if (got_number) { return 1; + } } return 0; } @@ -93,12 +111,19 @@ PUBLIC struct altos_list * altos_list_start(void) { struct altos_list *list = calloc (sizeof (struct altos_list), 1); - CFMutableDictionaryRef matching_dictionary = IOServiceMatching("IOUSBDevice"); + CFMutableDictionaryRef matching_dictionary; io_iterator_t tdIterator; io_object_t tdObject; kern_return_t ret; int i; + matching_dictionary = IOServiceMatching(kIOSerialBSDServiceValue); + if (matching_dictionary) { + CFDictionarySetValue(matching_dictionary, + CFSTR(kIOSerialBSDTypeKey), + CFSTR(kIOSerialBSDAllTypes)); + } + ret = IOServiceGetMatchingServices(kIOMasterPortDefault, matching_dictionary, &list->iterator); if (ret != kIOReturnSuccess) { free(list); @@ -118,26 +143,63 @@ altos_ftdi_list_start(void) return list; } +static io_service_t get_usb_object(io_object_t serial_device) +{ + io_iterator_t iterator; + io_service_t usb_device; + io_service_t service; + IOReturn status; + + status = IORegistryEntryCreateIterator(serial_device, + kIOServicePlane, + kIORegistryIterateParents | kIORegistryIterateRecursively, + &iterator); + + if (status != kIOReturnSuccess) + return 0; + + while((service = IOIteratorNext(iterator))) { + io_name_t servicename; + status = IORegistryEntryGetNameInPlane(service, kIOServicePlane, servicename); + + if (status == kIOReturnSuccess && IOObjectConformsTo(service, kIOUSBDeviceClassName)) { + IOObjectRelease(iterator); + return service; + } + IOObjectRelease(service); + } + IOObjectRelease(iterator); + return 0; +} + PUBLIC int altos_list_next(struct altos_list *list, struct altos_device *device) { + io_object_t object; + io_service_t usb_device; char serial_string[128]; for (;;) { object = IOIteratorNext(list->iterator); - if (!object) + if (!object) { return 0; + } + + usb_device = get_usb_object(object); - if (!get_number (object, CFSTR(kUSBVendorID), &device->vendor) || - !get_number (object, CFSTR(kUSBProductID), &device->product)) - continue; - if (get_string (object, CFSTR("IOCalloutDevice"), device->path, sizeof (device->path)) && - get_string (object, CFSTR("USB Product Name"), device->name, sizeof (device->name)) && - get_string (object, CFSTR("USB Serial Number"), serial_string, sizeof (serial_string))) { + if (get_number (usb_device, CFSTR(kUSBVendorID), &device->vendor) && + get_number (usb_device, CFSTR(kUSBProductID), &device->product) && + get_string (object, CFSTR(kIOCalloutDeviceKey), device->path, sizeof (device->path)) && + get_string (usb_device, CFSTR(kUSBProductString), device->name, sizeof (device->name)) && + get_string (usb_device, CFSTR(kUSBSerialNumberString), serial_string, sizeof (serial_string))) { device->serial = atoi(serial_string); + IOObjectRelease(object); + IOObjectRelease(usb_device); return 1; } + IOObjectRelease(object); + IOObjectRelease(usb_device); } } -- 2.30.2