Decode/encode use_usb_version on BM and 2232C
[libftdi] / src / ftdi.h
index 281c261..6fad94b 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <libusb.h>
 
-/* Evne on 93xx66 at max 256 bytes are used (AN_121)*/
+/* Even on 93xx66 at max 256 bytes are used (AN_121)*/
 #define FTDI_MAX_EEPROM_SIZE 256
 
 /** FTDI chip type */
@@ -182,8 +182,8 @@ struct ftdi_eeprom
     int self_powered;
     /** remote wakeup */
     int remote_wakeup;
-    /** release */
-    int release;
+
+    int is_not_pnp;
 
     /* Suspend on DBUS7 Low */
     int suspend_dbus7;
@@ -197,11 +197,11 @@ struct ftdi_eeprom
 
     /** use serial */
     int use_serial;
-    /** fake usb version */
-    int change_usb_version;
     /** usb version */
     int usb_version;
-    /** maximum power */
+    /** Use usb version on FT2232 devices*/
+    int use_usb_version;
+     /** maximum power */
     int max_power;
 
     /** manufacturer name */
@@ -223,9 +223,11 @@ struct ftdi_eeprom
     /* Special function of FT232R devices (and possibly others as well) */
     /** CBUS pin function. See CBUS_xxx defines. */
     int cbus_function[5];
-    /** Select hight current drive. */
+    /** Select hight current drive on R devices. */
+    int high_current;
+    /** Select hight current drive on A channel (2232C */
     int high_current_a;
-    /** Select hight current drive on B port (2232C). */
+    /** Select hight current drive on B channel (2232C). */
     int high_current_b;
     /** Select inversion of data lines (bitmask). */
     int invert;
@@ -247,13 +249,13 @@ struct ftdi_eeprom
     int group3_drive;
     int group3_schmitt;
     int group3_slew;
-    
 
     /** eeprom size in bytes. This doesn't get stored in the eeprom
         but is the only way to pass it to ftdi_eeprom_build. */
     int size;
-    /* EEPROM Type 46 for 93xx46, 56 for 93xx56 and 66 for 93xx66*/
+    /* EEPROM Type 0x46 for 93xx46, 0x56 for 93xx56 and 0x66 for 93xx66*/
     int chip;
+    unsigned char buf[FTDI_MAX_EEPROM_SIZE];
 };
 
 /**
@@ -324,33 +326,11 @@ struct ftdi_device_list
     struct libusb_device *dev;
 };
 
-/** TXDEN */
-#define CBUS_TXDEN 0
-/** PWREN# */
-#define CBUS_PWREN 1
-/** RXLED# */
-#define CBUS_RXLED 2
-/** TXLED#*/
-#define CBUS_TXLED 3
-/** RXLED# & TXLED# */
-#define CBUS_TXRXLED 4
-/** SLEEP# */
-#define CBUS_SLEEP 5
-/** 48 MHz clock */
-#define CBUS_CLK48 6
-/** 24 MHz clock */
-#define CBUS_CLK24 7
-/** 12 MHz clock */
-#define CBUS_CLK12 8
-/** 6 MHz clock */
-#define CBUS_CLK6 9
-/** Bitbang IO Mode*/
-#define CBUS_IOMODE 10
-/** Bitbang IO WR#*/
-#define CBUS_BB_WR 11
-/** Bitbang IO RD#*/
-#define CBUS_BB_RD 12
-
+#define USE_SERIAL_NUM 0x08
+enum ftdi_cbus_func {/* FIXME: Recheck value, especially the last */
+    CBUS_TXDEN = 0, CBUS_PWREN = 1, CBUS_RXLED = 2, CBUS_TXLED = 3, CBUS_TXRXLED = 4,
+    CBUS_SLEEP = 5, CBUS_CLK48 = 6, CBUS_CLK24 = 7, CBUS_CLK12 = 8, CBUS_CLK6 =  9,
+    CBUS_IOMODE = 0xa, CBUS_BB_WR = 0xb, CBUS_BB_RD = 0xc, CBUS_BB   = 0xd};
 
 /** Invert TXD# */
 #define INVERT_TXD 0x01
@@ -385,10 +365,13 @@ struct ftdi_device_list
 /** Driver Type. */
 #define DRIVER_VCP 0x08
 
-#define SUSPEND_DBUS7 0x80
+#define USE_USB_VERSION_BIT 0x10
+
+#define SUSPEND_DBUS7_BIT 0x80
 
 /** High current drive. */
-#define HIGH_CURRENT_DRIVE 0x10
+#define HIGH_CURRENT_DRIVE   0x10
+#define HIGH_CURRENT_DRIVE_R 0x04
 
 /**
     \brief Progress Info for streaming read
@@ -491,20 +474,16 @@ extern "C"
     int ftdi_set_event_char(struct ftdi_context *ftdi, unsigned char eventch, unsigned char enable);
     int ftdi_set_error_char(struct ftdi_context *ftdi, unsigned char errorch, unsigned char enable);
 
-    /* set eeprom size */
-    void ftdi_eeprom_setsize(struct ftdi_context *ftdi, struct ftdi_eeprom *eeprom, int size);
-
-    /* init and build eeprom from ftdi_eeprom structure */
-    void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi);
-    void ftdi_eeprom_free(struct ftdi_context *ftdi);
-    int ftdi_eeprom_build(struct ftdi_context *ftdi, unsigned char *output);
-    int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *output, int size, int verbose);
+    /* init eeprom for the given FTDI type */
+    int ftdi_eeprom_initdefaults(struct ftdi_context *ftdi, 
+                                  char * manufacturer, char *product, 
+                                  char * serial);
+    int ftdi_eeprom_build(struct ftdi_context *ftdi);
+    int ftdi_eeprom_decode(struct ftdi_context *ftdi, int verbose);
 
-    /* "eeprom" needs to be valid 128 byte eeprom (generated by the eeprom generator)
-       the checksum of the eeprom is valided */
-    int ftdi_read_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
+    int ftdi_read_eeprom(struct ftdi_context *ftdi);
     int ftdi_read_chipid(struct ftdi_context *ftdi, unsigned int *chipid);
-    int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom);
+    int ftdi_write_eeprom(struct ftdi_context *ftdi);
     int ftdi_erase_eeprom(struct ftdi_context *ftdi);
 
     int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val);