X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=ac8f18a347bd5d10833839381a6dab746a523a2f;hp=360acf599c2621ec3f3e791144a0cf76c254de59;hb=4fe1a3f009f8591a1b6ac157a073d60fbd151c91;hpb=934173a30ae3db61369cf308e8051f9ed4643d24 diff --git a/src/ftdi.c b/src/ftdi.c index 360acf5..ac8f18a 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2,7 +2,7 @@ ftdi.c - description ------------------- begin : Fri Apr 4 2003 - copyright : (C) 2003-2014 by Intra2net AG and the libftdi developers + copyright : (C) 2003-2017 by Intra2net AG and the libftdi developers email : opensource@intra2net.com ***************************************************************************/ @@ -18,7 +18,7 @@ \mainpage libftdi API documentation Library to talk to FTDI chips. You find the latest versions of libftdi at - http://www.intra2net.com/en/developer/libftdi/ + https://www.intra2net.com/en/developer/libftdi/ The library is easy to use. Have a look at this short example: \include simple.c @@ -750,6 +750,7 @@ int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product, \retval -9: get serial number failed \retval -10: unable to close device \retval -11: ftdi context invalid + \retval -12: libusb_get_device_list() failed */ int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product, const char* description, const char* serial, unsigned int index) @@ -824,6 +825,54 @@ int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product, } /** + Opens the device at a given USB bus and port. + + \param ftdi pointer to ftdi_context + \param bus Bus number + \param port Port number + + \retval 0: all fine + \retval -1: usb_find_busses() failed + \retval -2: usb_find_devices() failed + \retval -3: usb device not found + \retval -4: unable to open device + \retval -5: unable to claim device + \retval -6: reset failed + \retval -7: set baudrate failed + \retval -8: get product description failed + \retval -9: get serial number failed + \retval -10: unable to close device + \retval -11: ftdi context invalid + \retval -12: libusb_get_device_list() failed +*/ +int ftdi_usb_open_bus_port(struct ftdi_context *ftdi, uint8_t bus, uint8_t port) +{ + libusb_device *dev; + libusb_device **devs; + int i = 0; + + if (ftdi == NULL) + ftdi_error_return(-11, "ftdi context invalid"); + + if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0) + ftdi_error_return(-12, "libusb_get_device_list() failed"); + + while ((dev = devs[i++]) != NULL) + { + if (libusb_get_bus_number(dev) == bus && libusb_get_port_number(dev) == port) + { + int res; + res = ftdi_usb_open_dev(ftdi, dev); + libusb_free_device_list(devs,1); + return res; + } + } + + // device not found + ftdi_error_return_free_device_list(-3, "device not found", devs); +} + +/** Opens the ftdi-device described by a description-string. Intended to be used for parsing a device-description given as commandline argument. @@ -2613,7 +2662,6 @@ int ftdi_eeprom_set_strings(struct ftdi_context *ftdi, char * manufacturer, \retval 0: all fine \retval -1: ftdi context invalid \retval -2: ftdi eeprom buffer invalid - \retval -3: no USB device connected */ int ftdi_eeprom_get_strings(struct ftdi_context *ftdi, char *manufacturer, int mnf_len, @@ -2624,15 +2672,11 @@ int ftdi_eeprom_get_strings(struct ftdi_context *ftdi, if (ftdi == NULL) ftdi_error_return(-1, "No struct ftdi_context"); - if (ftdi->eeprom == NULL) - ftdi_error_return(-2,"No struct ftdi_eeprom"); + ftdi_error_return(-2, "No struct ftdi_eeprom"); eeprom = ftdi->eeprom; - if (ftdi->usb_dev == NULL) - ftdi_error_return(-3, "No connected device or device not yet opened"); - if (manufacturer) { strncpy(manufacturer, eeprom->manufacturer, mnf_len);