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

Reply via email to