EEPROM: Evaluate the channel specific settings
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Thu, 9 Sep 2010 20:41:51 +0000 (22:41 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Mon, 20 Sep 2010 13:34:38 +0000 (15:34 +0200)
src/ftdi.c
src/ftdi.h

index 8293cc3..76045f2 100644 (file)
@@ -2506,9 +2506,17 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
         eeprom_size = 0x80;
     eeprom = ftdi->eeprom;
 
-    eeprom->high_current_a = buf[0x00] & HIGH_CURRENT_DRIVE;
-    eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE;
+    // Addr 00: Channel A setting
 
+    eeprom->channel_a_type   = buf[0x00] & CHANNEL_IS_OPTO;
+    eeprom->channel_a_driver = buf[0x00] & DRIVER_VCP;
+    eeprom->high_current_a   = buf[0x00] & HIGH_CURRENT_DRIVE;
+
+    // Addr 01: Channel B setting
+
+    eeprom->channel_b_type   = buf[0x01] & CHANNEL_IS_OPTO;
+    eeprom->channel_b_driver = buf[0x01] & DRIVER_VCP;
+    eeprom->high_current_b   = buf[0x01] & HIGH_CURRENT_DRIVE;
 
     // Addr 02: Vendor ID
     eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8);
index 03bb167..e7de304 100644 (file)
@@ -208,6 +208,14 @@ struct ftdi_eeprom
     /** serial number */
     char *serial;
 
+    /* 2232D/H(/FT4432H?) specific */
+    /* Hardware type, 0 = RS232 Uart, 1 = 245 FIFO, 2 = CPU FIFO, 
+       3 = OPTO Isolate */
+    int channel_a_type;
+    int channel_b_type;
+    /*  Driver Type, 1 = VCP */
+    int channel_a_driver;
+    int channel_b_driver;
     /* Special function of FT232R devices (and possibly others as well) */
     /** CBUS pin function. See CBUS_xxx defines. */
     int cbus_function[5];
@@ -338,6 +346,15 @@ struct ftdi_device_list
 /** Invert RI# */
 #define INVERT_RI  0x80
 
+/** Interface Mode. */
+#define CHANNEL_IS_UART 0x0
+#define CHANNEL_IS_245  0x1
+#define CHANNEL_IS_CPU  0x2
+#define CHANNEL_IS_OPTO 0x3
+
+/** Driver Type. */
+#define DRIVER_VCP 0x04
+
 /** High current drive. */
 #define HIGH_CURRENT_DRIVE 0x10