X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.h;h=324d07be52031946a161ef01ddbf9954fee51278;hp=810e07490cd2f31961f5608faa87d530b00d5d68;hb=c2ed8c4e338d1c907b79340c34da30aaf1b15dbd;hpb=fd282db3b22aabd064d99bacd6390144b345584b diff --git a/src/ftdi.h b/src/ftdi.h index 810e074..324d07b 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 @@ -157,6 +157,15 @@ enum ftdi_interface #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. @@ -166,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 */ @@ -211,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; }; /** @@ -226,7 +232,7 @@ 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; }; /** @@ -274,6 +280,29 @@ struct ftdi_eeprom 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" { @@ -285,13 +314,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); @@ -301,7 +330,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); @@ -325,9 +354,14 @@ 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); + 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); @@ -352,6 +386,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);