#include <usb.h>
+enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2 };
+
struct ftdi_context {
// USB specific
struct usb_dev_handle *usb_dev;
- int usb_timeout;
+ int usb_read_timeout;
+ int usb_write_timeout;
// FTDI specific
+ enum ftdi_chip_type type;
int baudrate;
unsigned char bitbang_enabled;
+ unsigned char *readbuffer;
+ unsigned int readbuffer_offset;
+ unsigned int readbuffer_remaining;
+ unsigned int readbuffer_chunksize;
+ unsigned int writebuffer_chunksize;
+
+ // FTDI FT2232C requirecments
+ int interface; // 0 or 1
+ int index; // 1 or 2
+ // Endpoints
+ int in_ep;
+ int out_ep; // 1 or 2
+
+ /* 1: (default) Normal bitbang mode, 2: FT2232C SPI bitbang mode */
+ unsigned char bitbang_mode;
// misc
char *error_str;
};
struct ftdi_eeprom {
- int vendor_id;
+ int vendor_id;
int product_id;
- int self_powered;
+ int self_powered;
int remote_wakeup;
int BM_type_chip;
int change_usb_version;
int usb_version;
int max_power;
-
+
char *manufacturer;
char *product;
char *serial;
#endif
int ftdi_init(struct ftdi_context *ftdi);
+ void ftdi_deinit(struct ftdi_context *ftdi);
void ftdi_set_usbdev (struct ftdi_context *ftdi, usb_dev_handle *usbdev);
int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product);
int ftdi_usb_close(struct ftdi_context *ftdi);
int ftdi_usb_purge_buffers(struct ftdi_context *ftdi);
int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate);
- int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
+
int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
+ int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize);
+ int ftdi_read_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize);
+
+ int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
+ 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_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask);
int ftdi_disable_bitbang(struct ftdi_context *ftdi);