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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sigrok-devel