]> sigrok.org Git - libserialport.git/blobdiff - macosx.c
change type of result variables to ssize_t
[libserialport.git] / macosx.c
index f5f19448498f0f5de9819d7413ab180fade6ec7a..0d22bb6fe10b4fa1877c8c80a87e79f8ddee3550 100644 (file)
--- a/macosx.c
+++ b/macosx.c
@@ -42,7 +42,7 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
        if (!(classes = IOServiceMatching(kIOSerialBSDServiceValue)))
                RETURN_FAIL("IOServiceMatching() failed");
 
-       if (IOServiceGetMatchingServices(kIOMasterPortDefault, classes,
+       if (IOServiceGetMatchingServices(kIOMainPortDefault, classes,
                                         &iter) != KERN_SUCCESS)
                RETURN_FAIL("IOServiceGetMatchingServices() failed");
 
@@ -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))) {
@@ -199,7 +210,7 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
        }
 
        DEBUG("Getting matching services");
-       if (IOServiceGetMatchingServices(kIOMasterPortDefault, classes,
+       if (IOServiceGetMatchingServices(kIOMainPortDefault, classes,
                                         &iter) != KERN_SUCCESS) {
                SET_FAIL(ret, "IOServiceGetMatchingServices() failed");
                goto out_done;