static void print_device_cap(struct libusb_bos_dev_capability_descriptor *dev_cap) { switch(dev_cap->bDevCapabilityType) { case LIBUSB_BT_USB_2_0_EXTENSION: { struct libusb_usb_2_0_extension_descriptor *usb_2_0_ext = NULL; libusb_get_usb_2_0_extension_descriptor(NULL, dev_cap, &usb_2_0_ext); if (usb_2_0_ext) { printf(" USB 2.0 extension:\n"); printf(" attributes : %02X\n", usb_2_0_ext->bmAttributes); libusb_free_usb_2_0_extension_descriptor(usb_2_0_ext); } break; } case LIBUSB_BT_SS_USB_DEVICE_CAPABILITY: { struct libusb_ss_usb_device_capability_descriptor *ss_usb_device_cap = NULL; libusb_get_ss_usb_device_capability_descriptor(NULL, dev_cap, &ss_usb_device_cap); if (ss_usb_device_cap) { printf(" USB 3.0 capabilities:\n"); printf(" attributes : %02X\n", ss_usb_device_cap->bmAttributes); printf(" supported speeds : %04X\n", ss_usb_device_cap->wSpeedSupported); printf(" supported functionality: %02X\n", ss_usb_device_cap->bFunctionalitySupport); libusb_free_ss_usb_device_capability_descriptor(ss_usb_device_cap); } break; } case LIBUSB_BT_CONTAINER_ID: { struct libusb_container_id_descriptor *container_id = NULL; libusb_get_container_id_descriptor(NULL, dev_cap, &container_id); if (container_id) { printf(" Container ID:\n %s\n", uuid_to_string(container_id->ContainerID)); libusb_free_container_id_descriptor(container_id); } break; } default: printf(" Unknown BOS device capability %02x:\n", dev_cap->bDevCapabilityType); } }
void ContainerIDDescriptor::destructor(State & state, libusb_container_id_descriptor * descriptor){ libusb_free_container_id_descriptor(descriptor); }