X-Git-Url: http://developer.intra2net.com/git/?a=blobdiff_plain;f=src%2Fftdi.h;h=86e4c6214dd3cb3102b782bd4df302df1ec52b2a;hb=f505134f82e9f8f34009cfe76a2ea436d92e220a;hp=b518f969f10dc68343e54c5dbc4e49419fcdcfd9;hpb=418aaa72029f42b4054336067d5874e79992a426;p=libftdi diff --git a/src/ftdi.h b/src/ftdi.h index b518f96..86e4c62 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -17,7 +17,7 @@ #ifndef __libftdi_h__ #define __libftdi_h__ -#include +#include #define FTDI_DEFAULT_EEPROM_SIZE 128 @@ -105,8 +105,8 @@ enum ftdi_interface #define SIO_SET_BAUD_RATE 3 /* Set baud rate */ #define SIO_SET_DATA 4 /* Set the data characteristics of the port */ -#define FTDI_DEVICE_OUT_REQTYPE (USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT) -#define FTDI_DEVICE_IN_REQTYPE (USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN) +#define FTDI_DEVICE_OUT_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT) +#define FTDI_DEVICE_IN_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN) /* Requests */ #define SIO_RESET_REQUEST SIO_RESET @@ -148,6 +148,25 @@ enum ftdi_interface (taken from libusb) */ #define FTDI_URB_USERCONTEXT_COOKIE ((void *)0x1) +#ifdef __GNUC__ + #define DEPRECATED(func) func __attribute__ ((deprecated)) +#elif defined(_MSC_VER) + #define DEPRECATED(func) __declspec(deprecated) func +#else + #pragma message("WARNING: You need to implement DEPRECATED for this compiler") + #define DEPRECATED(func) func +#endif + +struct ftdi_transfer_control +{ + int completed; + unsigned char *buf; + int size; + int offset; + struct ftdi_context *ftdi; + struct libusb_transfer *transfer; +}; + /** \brief Main context structure for all libftdi functions. @@ -156,8 +175,10 @@ enum ftdi_interface struct ftdi_context { /* USB specific */ + /** libusb's context */ + struct libusb_context *usb_ctx; /** libusb's usb_dev_handle */ - struct usb_dev_handle *usb_dev; + struct libusb_device_handle *usb_dev; /** usb read timeout */ int usb_read_timeout; /** usb write timeout */ @@ -201,11 +222,6 @@ struct ftdi_context /** 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; }; /** @@ -216,9 +232,57 @@ struct ftdi_device_list /** pointer to next entry */ struct ftdi_device_list *next; /** pointer to libusb's usb_device */ - struct usb_device *dev; + 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 + + +/** Invert TXD# */ +#define INVERT_TXD 0x01 +/** Invert RXD# */ +#define INVERT_RXD 0x02 +/** Invert RTS# */ +#define INVERT_RTS 0x04 +/** Invert CTS# */ +#define INVERT_CTS 0x08 +/** Invert DTR# */ +#define INVERT_DTR 0x10 +/** Invert DSR# */ +#define INVERT_DSR 0x20 +/** Invert DCD# */ +#define INVERT_DCD 0x40 +/** Invert RI# */ +#define INVERT_RI 0x80 + +/** High current drive. */ +#define HIGH_CURRENT_DRIVE 0x04 + /** \brief FTDI eeprom structure */ @@ -234,7 +298,7 @@ struct ftdi_eeprom /** remote wakeup */ int remote_wakeup; /** chip type */ - int BM_type_chip; + int chip_type; /** input in isochronous transfer mode */ int in_is_isochronous; @@ -259,11 +323,42 @@ struct ftdi_eeprom /** serial number */ char *serial; + /* 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. */ + int high_current; + /** Select inversion of data lines (bitmask). */ + int invert; + /** 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; }; +/** + \brief Progress Info for streaming read +*/ +struct size_and_time +{ + uint64_t totalBytes; + struct timeval time; +}; + +typedef struct +{ + struct size_and_time first; + struct size_and_time prev; + struct size_and_time current; + double totalTime; + double totalRate; + double currentRate; +} FTDIProgressInfo; + +typedef int (FTDIStreamCallback)(uint8_t *buffer, int length, + FTDIProgressInfo *progress, void *userdata); + + #ifdef __cplusplus extern "C" { @@ -275,13 +370,13 @@ extern "C" 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); + void ftdi_set_usbdev (struct ftdi_context *ftdi, struct libusb_device_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, + int ftdi_usb_get_strings(struct ftdi_context *ftdi, struct libusb_device *dev, char * manufacturer, int mnf_len, char * description, int desc_len, char * serial, int serial_len); @@ -291,7 +386,7 @@ extern "C" const char* description, const char* serial); int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product, const char* description, const char* serial, unsigned int index); - int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev); + int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct libusb_device *dev); int ftdi_usb_open_string(struct ftdi_context *ftdi, const char* description); int ftdi_usb_close(struct ftdi_context *ftdi); @@ -315,10 +410,15 @@ 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_readstream(struct ftdi_context *ftdi, FTDIStreamCallback *callback, + void *userdata, int packetsPerTransfer, int numTransfers); 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); + struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size); + int ftdi_transfer_data_done(struct ftdi_transfer_control *tc); + + int DEPRECATED(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); int ftdi_read_pins(struct ftdi_context *ftdi, unsigned char *pins); @@ -342,6 +442,7 @@ extern "C" /* init and build eeprom from ftdi_eeprom structure */ void ftdi_eeprom_initdefaults(struct ftdi_eeprom *eeprom); + void ftdi_eeprom_free(struct ftdi_eeprom *eeprom); int ftdi_eeprom_build(struct ftdi_eeprom *eeprom, unsigned char *output); int ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *output, int size);