X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.h;h=b7c011377a42bb8d23f7eb48189f9d8e06e90fcb;hp=ef4674d0e4eca6aa91d00668677623e36e78eb4e;hb=e375e6cb72af68379ae42c536728a992df0046e5;hpb=45619eaa83e12b54afa2b4b4cd67b8293778dcb9 diff --git a/src/ftdi.h b/src/ftdi.h index ef4674d..b7c0113 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -2,7 +2,7 @@ ftdi.h - description ------------------- begin : Fri Apr 4 2003 - copyright : (C) 2003 by Intra2net AG + copyright : (C) 2003-2011 by Intra2net AG and the libftdi developers email : opensource@intra2net.com ***************************************************************************/ @@ -19,7 +19,7 @@ #include -/* 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]; }; /** @@ -314,6 +316,53 @@ struct ftdi_context }; /** + List all handled EEPROM values. + Append future new values only at the end to provide API/ABI stability*/ +enum ftdi_eeprom_value +{ + VENDOR_ID = 0, + PRODUCT_ID = 1, + SELF_POWERED = 2, + REMOTE_WAKEUP = 3, + IS_NOT_PNP = 4, + SUSPEND_DBUS7 = 5, + IN_IS_ISOCHRONOUS = 6, + OUT_IS_ISOCHRONOUS = 7, + SUSPEND_PULL_DOWNS = 8, + USE_SERIAL = 9, + USB_VERSION = 10, + USE_USB_VERSION = 11, + MAX_POWER = 12, + CHANNEL_A_TYPE = 13, + CHANNEL_B_TYPE = 14, + CHANNEL_A_DRIVER = 15, + CHANNEL_B_DRIVER = 16, + CBUS_FUNCTION_0 = 17, + CBUS_FUNCTION_1 = 18, + CBUS_FUNCTION_2 = 19, + CBUS_FUNCTION_3 = 20, + CBUS_FUNCTION_4 = 21, + HIGH_CURRENT = 22, + HIGH_CURRENT_A = 23, + HIGH_CURRENT_B = 24, + INVERT = 25, + GROUP0_DRIVE = 26, + GROUP0_SCHMITT = 27, + GROUP0_SLEW = 28, + GROUP1_DRIVE = 29, + GROUP1_SCHMITT = 30, + GROUP1_SLEW = 31, + GROUP2_DRIVE = 32, + GROUP2_SCHMITT = 33, + GROUP2_SLEW = 34, + GROUP3_DRIVE = 35, + GROUP3_SCHMITT = 36, + GROUP3_SLEW = 37, + CHIP_SIZE = 38, + CHIP_TYPE = 39 +}; + +/** \brief list of usb devices created by ftdi_usb_find_all() */ struct ftdi_device_list @@ -328,7 +377,7 @@ struct ftdi_device_list 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 = 10, CBUS_BB_WR = 11, CBUS_BB_RD = 12, CBUS_BB_RXF = 13, CBUS_BB_TXE = 14}; + CBUS_IOMODE = 0xa, CBUS_BB_WR = 0xb, CBUS_BB_RD = 0xc, CBUS_BB = 0xd}; /** Invert TXD# */ #define INVERT_TXD 0x01 @@ -363,10 +412,13 @@ enum ftdi_cbus_func {/* FIXME: Recheck value, especially the last */ /** 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 @@ -469,20 +521,21 @@ 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 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); + + int ftdi_get_eeprom_value(struct ftdi_context *ftdi, enum ftdi_eeprom_value value_name, int* value); + int ftdi_set_eeprom_value(struct ftdi_context *ftdi, enum ftdi_eeprom_value value_name, int value); - /* 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); + int ftdi_get_eeprom_buf(struct ftdi_context *ftdi, unsigned char * buf, int size); - /* "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);