int iqrf_get_device_list(usb_addr list[], int n_devices) { int n; n = usb_get_device_list(list, n_devices, false); if (n < 0) ERR("can't get device list\n"); return n; }
int iqrf_get_device_count(void) { int n; n = usb_get_device_list(NULL, 256, true); if (n < 0) ERR("can't get device count\n"); return n; }
static int usbOpenDevice(usb_device_handle **device, int vendor, char *vendorName, int product, char *productName) { usb_device_handle *handle = NULL; int errorCode = USB_ERROR_NOTFOUND; static int didUsbInit = 0; int j; int r; if(!didUsbInit){ didUsbInit = 1; usb_init(&ctx); } usb_device **dev_list; int dev_list_len = usb_get_device_list(ctx, &dev_list); for (j=0; j<dev_list_len; ++j) { usb_device *dev = dev_list[j]; struct usb_device_descriptor descriptor; usb_get_device_descriptor(dev, &descriptor); if (descriptor.idVendor == vendor && descriptor.idProduct == product) { char string[256]; /* we need to open the device in order to query strings */ r = usb_open(dev, &handle); if (!handle) { errorCode = USB_ERROR_ACCESS; fprintf(stderr, "%s: Warning: cannot open USB device: %s\n", progname, strerror(usb_to_errno(r))); continue; } errorCode = 0; /* now check whether the names match: */ /* if vendorName not given ignore it (any vendor matches) */ r = usb_get_string_descriptor_ascii(handle, descriptor.iManufacturer & 0xff, string, sizeof(string)); if (r < 0) { if ((vendorName != NULL) && (vendorName[0] != 0)) { errorCode = USB_ERROR_IO; fprintf(stderr, "%s: Warning: cannot query manufacturer for device: %s\n", progname, strerror(usb_to_errno(r))); } } else { if (verbose > 1) fprintf(stderr, "%s: seen device from vendor ->%s<-\n", progname, string); if ((vendorName != NULL) && (vendorName[0] != 0) && (strcmp(string, vendorName) != 0)) errorCode = USB_ERROR_NOTFOUND; } /* if productName not given ignore it (any product matches) */ r = usb_get_string_descriptor_ascii(handle, descriptor.iProduct & 0xff, string, sizeof(string)); if (r < 0) { if ((productName != NULL) && (productName[0] != 0)) { errorCode = USB_ERROR_IO; fprintf(stderr, "%s: Warning: cannot query product for device: %s\n", progname, strerror(usb_to_errno(r))); } } else { if (verbose > 1) fprintf(stderr, "%s: seen product ->%s<-\n", progname, string); if((productName != NULL) && (productName[0] != 0) && (strcmp(string, productName) != 0)) errorCode = USB_ERROR_NOTFOUND; } if (errorCode == 0) break; usb_close(handle); handle = NULL; } } usb_free_device_list(dev_list,1); if (handle != NULL){ errorCode = 0; *device = handle; } return errorCode; }