示例#1
0
文件: iqrf.c 项目: h0nzZik/libiqrf
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;
}
示例#2
0
文件: iqrf.c 项目: h0nzZik/libiqrf
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;
}
示例#3
0
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;
}