+libusb_device_handle *open_card(unsigned card_index, libusb_device *dev, string *description)
+{
+ uint8_t bus = libusb_get_bus_number(dev);
+ uint8_t port = libusb_get_port_number(dev);
+
+ libusb_device_descriptor desc;
+ if (libusb_get_device_descriptor(dev, &desc) < 0) {
+ fprintf(stderr, "Error getting device descriptor for device %p\n", dev);
+ exit(1);
+ }
+
+ *description = get_card_description(card_index, bus, port, desc.idProduct);
+
+ libusb_device_handle *devh;
+ int rc = libusb_open(dev, &devh);
+ if (rc < 0) {
+ fprintf(stderr, "Error opening card %p: %s\n", dev, libusb_error_name(rc));
+ exit(1);
+ }
+
+ return devh;
+}
+