/**
- Finds all ftdi devices on the usb bus. Creates a new ftdi_device_list which
- needs to be deallocated by ftdi_list_free() after use.
+ Finds all ftdi devices with given VID:PID on the usb bus. Creates a new
+ ftdi_device_list which needs to be deallocated by ftdi_list_free() after
+ use. With VID:PID 0:0, search for the default devices
+ (0x403:0x6001, 0x403:0x6010, 0x403:0x6011, 0x403:0x6014)
\param ftdi pointer to ftdi_context
\param devlist Pointer where to store list of found devices
if (libusb_get_device_descriptor(dev, &desc) < 0)
ftdi_error_return_free_device_list(-6, "libusb_get_device_descriptor() failed", devs);
- if (desc.idVendor == vendor && desc.idProduct == product)
+ if (((vendor != 0 && product != 0) &&
+ desc.idVendor == vendor && desc.idProduct == product) ||
+ ((vendor == 0 && product == 0) &&
+ (desc.idVendor == 0x403) && (desc.idProduct == 0x6001 || desc.idProduct == 0x6010
+ || desc.idProduct == 0x6011 || desc.idProduct == 0x6014)))
{
*curdev = (struct ftdi_device_list*)malloc(sizeof(struct ftdi_device_list));
if (!*curdev)
(*curdev)->next = NULL;
(*curdev)->dev = dev;
-
+ libusb_ref_device(dev);
curdev = &(*curdev)->next;
count++;
}
for (curdev = *devlist; curdev != NULL;)
{
next = curdev->next;
+ libusb_unref_device(curdev->dev);
free(curdev);
curdev = next;
}
case IN_IS_ISOCHRONOUS:
*value = ftdi->eeprom->in_is_isochronous;
break;
+ case OUT_IS_ISOCHRONOUS:
+ *value = ftdi->eeprom->out_is_isochronous;
+ break;
case SUSPEND_PULL_DOWNS:
*value = ftdi->eeprom->suspend_pull_downs;
break;
case USB_VERSION:
*value = ftdi->eeprom->usb_version;
break;
+ case USE_USB_VERSION:
+ *value = ftdi->eeprom->use_usb_version;
+ break;
case MAX_POWER:
*value = ftdi->eeprom->max_power;
break;
case IN_IS_ISOCHRONOUS:
ftdi->eeprom->in_is_isochronous = value;
break;
+ case OUT_IS_ISOCHRONOUS:
+ ftdi->eeprom->out_is_isochronous = value;
+ break;
case SUSPEND_PULL_DOWNS:
ftdi->eeprom->suspend_pull_downs = value;
break;
case USB_VERSION:
ftdi->eeprom->usb_version = value;
break;
+ case USE_USB_VERSION:
+ ftdi->eeprom->use_usb_version = value;
+ break;
case MAX_POWER:
ftdi->eeprom->max_power = value;
break;