As discussed previously [1] there may be the odd FTDI based board with a corrupt EEPROM leading to sigrok not listing a working device because ftdi_usb_get_strings returns an error when retrieving the device descriptor strings.
The attached patch assigns default descriptor strings for vendor and model if ftdi_usb_get_strings fails to retrieve a descriptor. [1] https://sourceforge.net/p/sigrok/mailman/message/37133778/
diff --git a/src/hardware/ftdi-la/api.c b/src/hardware/ftdi-la/api.c index 85b7df7e..d1636c9c 100644 --- a/src/hardware/ftdi-la/api.c +++ b/src/hardware/ftdi-la/api.c @@ -23,6 +23,7 @@ #include <libsigrok/libsigrok.h> #include "libsigrok-internal.h" #include "protocol.h" +#include <string.h> static const uint32_t scanopts[] = { SR_CONF_CONN, @@ -151,6 +152,33 @@ static void scan_device(struct ftdi_context *ftdic, switch (rv) { case 0: break; + + /* Note that ftdi_usb_get_strings fail on first error, so the following cases should fall through in sequence */ + case -7: + sr_dbg("The device lacks a manufacturer descriptor."); + strcpy(vendor, "Generic"); + case -8: + sr_dbg("The device lacks a product descriptor."); + switch (usb_desc.idProduct) { + case 0x6001: + strcpy(model, "FT232R"); + break; + case 0x6010: + strcpy(model, "FT2232H"); + break; + case 0x6011: + strcpy(model, "FT4232H"); + break; + case 0x6014: + strcpy(model, "FT232H"); + break; + case 0x8a98: + strcpy(model, "FT2232H-TUMPA"); + break; + default: + strcpy(model, "Unknown"); + break; + } case -9: sr_dbg("The device lacks a serial number."); g_free(serial_num);
_______________________________________________ sigrok-devel mailing list sigrok-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sigrok-devel