X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.h;h=e476044e6fbf7915461c4eb5206e49ba3799651e;hp=126c85a9c7a21600447f1e2f8e84f0c415d2ff04;hb=7abda9c06905bf3f8895ec59b2486b8533f7f510;hpb=474786c0caf97e4b573e7a785ce0421ed79769d3 diff --git a/src/ftdi.h b/src/ftdi.h index 126c85a..e476044 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -19,8 +19,10 @@ #include +#define FTDI_DEFAULT_EEPROM_SIZE 128 + /// FTDI chip type -enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2 }; +enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2, TYPE_R=3 }; /// Parity mode for ftdi_set_line_property() enum ftdi_parity_type { NONE=0, ODD=1, EVEN=2, MARK=3, SPACE=4 }; /// Number of stop bits for ftdi_set_line_property() @@ -35,7 +37,9 @@ enum ftdi_mpsse_mode { BITMODE_MPSSE = 0x02, BITMODE_SYNCBB = 0x04, BITMODE_MCU = 0x08, - BITMODE_OPTO = 0x10 + // CPU-style fifo mode gets set via EEPROM + BITMODE_OPTO = 0x10, + BITMODE_CBUS = 0x20 }; /// Port interface for FT2232C @@ -111,6 +115,10 @@ enum ftdi_interface { #define SIO_RTS_CTS_HS (0x1 << 8) +/* marker for unused usb urb structures + (taken from libusb) */ +#define FTDI_URB_USERCONTEXT_COOKIE ((void *)0x1) + /** \brief Main context structure for all libftdi functions. @@ -156,8 +164,16 @@ struct ftdi_context { /// Bitbang mode. 1: (default) Normal bitbang mode, 2: FT2232C SPI bitbang mode unsigned char bitbang_mode; + /// EEPROM size. Default is 128 bytes for 232BM and 245BM chips + int eeprom_size; + /// String representation of last error char *error_str; + + /// Buffer needed for async communication + char *async_usb_buffer; + /// Number of URB-structures we can buffer + unsigned int async_usb_buffer_size; }; /** @@ -208,6 +224,10 @@ struct ftdi_eeprom { char *product; /// serial number char *serial; + + /// 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; }; #ifdef __cplusplus @@ -215,14 +235,17 @@ extern "C" { #endif int ftdi_init(struct ftdi_context *ftdi); + struct ftdi_context *ftdi_new(); int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface); void ftdi_deinit(struct ftdi_context *ftdi); + void ftdi_free(struct ftdi_context *ftdi); void ftdi_set_usbdev (struct ftdi_context *ftdi, usb_dev_handle *usbdev); int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist, int vendor, int product); void ftdi_list_free(struct ftdi_device_list **devlist); + void ftdi_list_free2(struct ftdi_device_list *devlist); int ftdi_usb_get_strings(struct ftdi_context *ftdi, struct usb_device *dev, char * manufacturer, int mnf_len, char * description, int desc_len, @@ -235,6 +258,8 @@ extern "C" { int ftdi_usb_close(struct ftdi_context *ftdi); int ftdi_usb_reset(struct ftdi_context *ftdi); + int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi); + int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi); int ftdi_usb_purge_buffers(struct ftdi_context *ftdi); int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate); @@ -249,6 +274,9 @@ extern "C" { int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize); int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize); + int ftdi_write_data_async(struct ftdi_context *ftdi, unsigned char *buf, int size); + void ftdi_async_complete(struct ftdi_context *ftdi, int wait_for_more); + int ftdi_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask); int ftdi_disable_bitbang(struct ftdi_context *ftdi); int ftdi_set_bitmode(struct ftdi_context *ftdi, unsigned char bitmask, unsigned char mode); @@ -257,6 +285,14 @@ extern "C" { int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency); int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency); + int ftdi_poll_modem_status(struct ftdi_context *ftdi, unsigned short *status); + + 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_eeprom *eeprom); int ftdi_eeprom_build(struct ftdi_eeprom *eeprom, unsigned char *output); @@ -264,6 +300,8 @@ extern "C" { // "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_chipid(struct ftdi_context *ftdi, unsigned int *chipid); + int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, int maxsize); int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom); int ftdi_erase_eeprom(struct ftdi_context *ftdi);