def recurse_devices(self, iterator): props = [] iokit.IORegistryIteratorEnterEntry(iterator) device = iokit.IOIteratorNext(iterator) while device: props.append({ "name": iokit.io_name_t_to_str( iokit.IORegistryEntryGetName(device, None)[1]), "port": iokit.IORegistryEntryCreateCFProperty( device, "PortNum", iokit.kCFAllocatorDefault, iokit.kNilOptions), "location_id": iokit.IORegistryEntryCreateCFProperty( device, "locationID", iokit.kCFAllocatorDefault, iokit.kNilOptions), "speed": shared.USBDeviceSpeeds( iokit.IORegistryEntryCreateCFProperty( device, "Device Speed", iokit.kCFAllocatorDefault, iokit.kNilOptions)), # type: ignore "devices": self.recurse_devices(iterator), }) iokit.IOObjectRelease(device) device = iokit.IOIteratorNext(iterator) iokit.IORegistryIteratorExitEntry(iterator) props.sort(key=itemgetter("name")) return props
def get_hub_type(port): return shared.USBDeviceSpeeds(port["HubInfoEx"]["HubType"])