#include <usb.h>
+#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()
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
#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.
/// 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;
};
/**
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
#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,
+ char * serial, int serial_len);
int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product);
int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product,
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);
int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency);
int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency);
+ // 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);
// "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);