X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=macosx.c;h=0d22bb6fe10b4fa1877c8c80a87e79f8ddee3550;hb=fd20b0fc5a34cd7f776e4af6c763f59041de223b;hp=f5f19448498f0f5de9819d7413ab180fade6ec7a;hpb=1a584c45b02456ebcb197ba801b0ceae810e84e3;p=libserialport.git diff --git a/macosx.c b/macosx.c index f5f1944..0d22bb6 100644 --- 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;