]> sigrok.org Git - libserialport.git/commitdiff
macosx: Fix port listing on ElCapitan.
authorMartino Facchin <redacted>
Fri, 18 Dec 2015 11:40:58 +0000 (12:40 +0100)
committerMartin Ling <redacted>
Wed, 6 Jan 2016 13:54:11 +0000 (13:54 +0000)
On OSX 10.11 (ElCapitan) the query for IOProviderClass fails to list ACM
devices as USB.
Add a fallback query using IOClass to correctly recognize these devices.
The fix has no effect on previous OSX versions (tested on Mavericks)

macosx.c

index f5f19448498f0f5de9819d7413ab180fade6ec7a..a0df84e6b079d4e5ff9fa969a27020631115bbfe 100644 (file)
--- a/macosx.c
+++ b/macosx.c
@@ -63,6 +63,17 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
                DEBUG_FMT("Found port %s", path);
 
                IORegistryEntryGetParentEntry(ioport, kIOServicePlane, &ioparent);
+               if ((cf_property=IORegistryEntrySearchCFProperty(ioparent,kIOServicePlane,
+                          CFSTR("IOClass"), kCFAllocatorDefault,
+                          kIORegistryIterateRecursively | kIORegistryIterateParents))) {
+                       if (CFStringGetCString(cf_property, class, sizeof(class),
+                                              kCFStringEncodingASCII) &&
+                           strstr(class, "USB")) {
+                               DEBUG("Found USB class device");
+                               port->transport = SP_TRANSPORT_USB;
+                       }
+                       CFRelease(cf_property);
+               }
                if ((cf_property=IORegistryEntrySearchCFProperty(ioparent,kIOServicePlane,
                           CFSTR("IOProviderClass"), kCFAllocatorDefault,
                           kIORegistryIterateRecursively | kIORegistryIterateParents))) {