39 #ifdef LIBFTDI_LINUX_ASYNC_MODE 40 #include <sys/ioctl.h> 41 #include <sys/select.h> 42 #include <sys/types.h> 44 #include <linux/usbdevice_fs.h> 47 #define ftdi_error_return(code, str) do { \ 48 ftdi->error_str = str; \ 62 static int ftdi_usb_close_internal (
struct ftdi_context *ftdi)
68 ret = usb_close (ftdi->
usb_dev);
111 #ifdef LIBFTDI_LINUX_ASYNC_MODE 210 ftdi_usb_close_internal (ftdi);
269 struct usb_device *dev;
273 if (usb_find_busses() < 0)
275 if (usb_find_devices() < 0)
280 for (bus = usb_get_busses(); bus; bus = bus->next)
282 for (dev = bus->devices; dev; dev = dev->next)
284 if (dev->descriptor.idVendor == vendor
285 && dev->descriptor.idProduct == product)
291 (*curdev)->next = NULL;
292 (*curdev)->dev =
dev;
294 curdev = &(*curdev)->
next;
312 for (curdev = *devlist; curdev != NULL;)
359 char * manufacturer,
int mnf_len,
char * description,
int desc_len,
char * serial,
int serial_len)
361 if ((ftdi==NULL) || (
dev==NULL))
367 if (manufacturer != NULL)
369 if (usb_get_string_simple(ftdi->
usb_dev,
dev->descriptor.iManufacturer, manufacturer, mnf_len) <= 0)
371 ftdi_usb_close_internal (ftdi);
376 if (description != NULL)
378 if (usb_get_string_simple(ftdi->
usb_dev,
dev->descriptor.iProduct, description, desc_len) <= 0)
380 ftdi_usb_close_internal (ftdi);
387 if (usb_get_string_simple(ftdi->
usb_dev,
dev->descriptor.iSerialNumber, serial, serial_len) <= 0)
389 ftdi_usb_close_internal (ftdi);
394 if (ftdi_usb_close_internal (ftdi) != 0)
406 static unsigned int _ftdi_determine_max_packet_size(
struct ftdi_context *ftdi,
struct usb_device *
dev)
408 unsigned int packet_size;
411 if (ftdi == NULL ||
dev == NULL)
422 if (
dev->descriptor.bNumConfigurations > 0 &&
dev->config)
424 struct usb_config_descriptor config = dev->config[0];
426 if (ftdi->
interface < config.bNumInterfaces)
428 struct usb_interface interface = config.interface[ftdi->
interface];
429 if (interface.num_altsetting > 0)
431 struct usb_interface_descriptor descriptor = interface.altsetting[0];
432 if (descriptor.bNumEndpoints > 0)
434 packet_size = descriptor.endpoint[0].wMaxPacketSize;
459 int detach_errno = 0;
465 if (!(ftdi->
usb_dev = usb_open(dev)))
468 #ifdef LIBUSB_HAS_GET_DRIVER_NP 478 if (usb_detach_kernel_driver_np(ftdi->
usb_dev, ftdi->
interface) != 0 && errno != ENODATA)
479 detach_errno = errno;
488 if (dev->descriptor.bNumConfigurations > 0)
492 config_val = dev->config[0].bConfigurationValue;
494 if (usb_set_configuration(ftdi->
usb_dev, config_val) &&
497 ftdi_usb_close_internal (ftdi);
498 if (detach_errno == EPERM)
504 ftdi_error_return(-3,
"unable to set usb configuration. Make sure the default FTDI driver is not in use");
512 ftdi_usb_close_internal (ftdi);
513 if (detach_errno == EPERM)
519 ftdi_error_return(-5,
"unable to claim usb device. Make sure the default FTDI driver is not in use");
525 ftdi_usb_close_internal (ftdi);
531 if (dev->descriptor.bcdDevice == 0x400 || (dev->descriptor.bcdDevice == 0x200
532 && dev->descriptor.iSerialNumber == 0))
534 else if (dev->descriptor.bcdDevice == 0x200)
536 else if (dev->descriptor.bcdDevice == 0x500)
538 else if (dev->descriptor.bcdDevice == 0x600)
540 else if (dev->descriptor.bcdDevice == 0x700)
542 else if (dev->descriptor.bcdDevice == 0x800)
563 ftdi_usb_close_internal (ftdi);
607 const char* description,
const char* serial)
637 const char* description,
const char* serial,
unsigned int index)
640 struct usb_device *dev;
645 if (usb_find_busses() < 0)
647 if (usb_find_devices() < 0)
653 for (bus = usb_get_busses(); bus; bus = bus->next)
655 for (dev = bus->devices; dev; dev = dev->next)
657 if (dev->descriptor.idVendor == vendor
658 && dev->descriptor.idProduct == product)
660 if (!(ftdi->
usb_dev = usb_open(dev)))
663 if (description != NULL)
665 if (usb_get_string_simple(ftdi->
usb_dev, dev->descriptor.iProduct,
string,
sizeof(
string)) <= 0)
667 ftdi_usb_close_internal (ftdi);
670 if (strncmp(
string, description,
sizeof(
string)) != 0)
672 if (ftdi_usb_close_internal (ftdi) != 0)
679 if (usb_get_string_simple(ftdi->
usb_dev, dev->descriptor.iSerialNumber,
string,
sizeof(
string)) <= 0)
681 ftdi_usb_close_internal (ftdi);
684 if (strncmp(
string, serial,
sizeof(
string)) != 0)
686 if (ftdi_usb_close_internal (ftdi) != 0)
692 if (ftdi_usb_close_internal (ftdi) != 0)
742 if (description[0] == 0 || description[1] !=
':')
745 if (description[0] ==
'd')
748 struct usb_device *dev;
752 if (usb_find_busses() < 0)
754 if (usb_find_devices() < 0)
757 for (bus = usb_get_busses(); bus; bus = bus->next)
759 for (dev = bus->devices; dev; dev = dev->next)
762 const char *desc = description + 2;
763 size_t len = strlen(bus->dirname);
764 if (strncmp(desc, bus->dirname, len))
770 if (strcmp(desc, dev->filename))
779 else if (description[0] ==
'i' || description[0] ==
's')
782 unsigned int product;
783 unsigned int index=0;
784 const char *serial=NULL;
785 const char *startp, *endp;
788 startp=description+2;
789 vendor=strtoul((
char*)startp,(
char**)&endp,0);
790 if (*endp !=
':' || endp == startp || errno != 0)
794 product=strtoul((
char*)startp,(
char**)&endp,0);
795 if (endp == startp || errno != 0)
798 if (description[0] ==
'i' && *endp != 0)
805 index=strtoul((
char*)startp,(
char**)&endp,0);
806 if (*endp != 0 || endp == startp || errno != 0)
809 if (description[0] ==
's')
837 if (ftdi == NULL || ftdi->
usb_dev == NULL)
863 if (ftdi == NULL || ftdi->
usb_dev == NULL)
889 if (ftdi == NULL || ftdi->
usb_dev == NULL)
914 if (ftdi == NULL || ftdi->
usb_dev == NULL)
947 #ifdef LIBFTDI_LINUX_ASYNC_MODE 956 if (ftdi_usb_close_internal (ftdi) != 0)
967 static int ftdi_convert_baudrate(
int baudrate,
struct ftdi_context *ftdi,
968 unsigned short *value,
unsigned short *index)
970 static const char am_adjust_up[8] = {0, 0, 0, 1, 0, 3, 2, 1};
971 static const char am_adjust_dn[8] = {0, 0, 0, 1, 0, 1, 2, 3};
972 static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7};
973 int divisor, best_divisor, best_baud, best_baud_diff;
974 unsigned long encoded_divisor;
983 divisor = 24000000 / baudrate;
988 divisor -= am_adjust_dn[divisor & 7];
995 for (i = 0; i < 2; i++)
997 int try_divisor = divisor + i;
1002 if (try_divisor <= 8)
1007 else if (ftdi->
type !=
TYPE_AM && try_divisor < 12)
1012 else if (divisor < 16)
1022 try_divisor += am_adjust_up[try_divisor & 7];
1023 if (try_divisor > 0x1FFF8)
1026 try_divisor = 0x1FFF8;
1031 if (try_divisor > 0x1FFFF)
1034 try_divisor = 0x1FFFF;
1039 baud_estimate = (24000000 + (try_divisor / 2)) / try_divisor;
1041 if (baud_estimate < baudrate)
1043 baud_diff = baudrate - baud_estimate;
1047 baud_diff = baud_estimate - baudrate;
1049 if (i == 0 || baud_diff < best_baud_diff)
1052 best_divisor = try_divisor;
1053 best_baud = baud_estimate;
1054 best_baud_diff = baud_diff;
1063 encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 7] << 14);
1065 if (encoded_divisor == 1)
1067 encoded_divisor = 0;
1069 else if (encoded_divisor == 0x4001)
1071 encoded_divisor = 1;
1074 *value = (
unsigned short)(encoded_divisor & 0xFFFF);
1077 *index = (
unsigned short)(encoded_divisor >> 8);
1079 *index |= ftdi->
index;
1082 *index = (
unsigned short)(encoded_divisor >> 16);
1101 unsigned short value, index;
1102 int actual_baudrate;
1104 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1109 baudrate = baudrate*4;
1112 actual_baudrate = ftdi_convert_baudrate(baudrate, ftdi, &value, &index);
1113 if (actual_baudrate <= 0)
1117 if ((actual_baudrate * 2 < baudrate )
1118 || ((actual_baudrate < baudrate)
1119 ? (actual_baudrate * 21 < baudrate * 20)
1120 : (baudrate * 21 < actual_baudrate * 20)))
1121 ftdi_error_return (-1,
"Unsupported baudrate. Note: bitbang baudrates are automatically multiplied by 4");
1168 unsigned short value = bits;
1170 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1176 value |= (0x00 << 8);
1179 value |= (0x01 << 8);
1182 value |= (0x02 << 8);
1185 value |= (0x03 << 8);
1188 value |= (0x04 << 8);
1195 value |= (0x00 << 11);
1198 value |= (0x01 << 11);
1201 value |= (0x02 << 11);
1208 value |= (0x00 << 14);
1211 value |= (0x01 << 14);
1238 int total_written = 0;
1240 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1243 while (offset < size)
1247 if (offset+write_size > size)
1248 write_size = size-offset;
1254 total_written += ret;
1255 offset += write_size;
1258 return total_written;
1261 #ifdef LIBFTDI_LINUX_ASYNC_MODE 1262 #ifdef USB_CLASS_PTP 1263 #error LIBFTDI_LINUX_ASYNC_MODE is not compatible with libusb-compat-0.1! 1277 static int _usb_get_async_urbs_pending(
struct ftdi_context *ftdi)
1279 struct usbdevfs_urb *urb;
1303 static void _usb_async_cleanup(
struct ftdi_context *ftdi,
int wait_for_more,
int timeout_msec)
1306 struct usbdevfs_urb *urb;
1315 tv.tv_sec = timeout_msec / 1000;
1316 tv.tv_usec = (timeout_msec % 1000) * 1000;
1323 while (_usb_get_async_urbs_pending(ftdi)
1324 && (ret = ioctl(ftdi->
usb_dev->
fd, USBDEVFS_REAPURBNDELAY, &urb)) == -1
1327 if (keep_going && !wait_for_more)
1335 select(ftdi->
usb_dev->
fd+1, NULL, &writefds, NULL, &tv);
1338 if (ret == 0 && urb != NULL)
1372 static int _usb_bulk_write_async(
struct ftdi_context *ftdi,
int ep,
char *bytes,
int size)
1374 struct usbdevfs_urb *urb;
1375 int bytesdone = 0, requested;
1376 int ret, cleanup_count;
1384 for (cleanup_count=0; urb==NULL && cleanup_count <= 1; cleanup_count++)
1405 requested = size - bytesdone;
1406 if (requested > 4096)
1409 memset(urb,0,
sizeof(urb));
1411 urb->type = USBDEVFS_URB_TYPE_BULK;
1414 urb->buffer = bytes + bytesdone;
1415 urb->buffer_length = requested;
1417 urb->actual_length = 0;
1418 urb->number_of_packets = 0;
1419 urb->usercontext = 0;
1423 ret = ioctl(ftdi->
usb_dev->
fd, USBDEVFS_SUBMITURB, urb);
1425 while (ret < 0 && errno == EINTR);
1429 bytesdone += requested;
1431 while (bytesdone < size);
1458 int total_written = 0;
1460 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1463 while (offset < size)
1467 if (offset+write_size > size)
1468 write_size = size-offset;
1470 ret = _usb_bulk_write_async(ftdi, ftdi->
in_ep, buf+offset, write_size);
1474 total_written += ret;
1475 offset += write_size;
1478 return total_written;
1480 #endif // LIBFTDI_LINUX_ASYNC_MODE 1537 int offset = 0, ret = 1, i, num_of_chunks, chunk_remains;
1540 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1545 if (packet_size == 0)
1549 if (size <= ftdi->readbuffer_remaining)
1570 while (offset < size && ret > 0)
1583 num_of_chunks = ret / packet_size;
1584 chunk_remains = ret % packet_size;
1590 if (ret > packet_size - 2)
1592 for (i = 1; i < num_of_chunks; i++)
1596 if (chunk_remains > 2)
1601 ret -= 2*num_of_chunks;
1604 ret -= 2*(num_of_chunks-1)+chunk_remains;
1615 if (offset+ret <= size)
1630 int part_size = size-offset;
1635 offset += part_size;
1662 unsigned char *new_buf;
1671 if ((new_buf = (
unsigned char *)realloc(ftdi->
readbuffer, chunksize)) == NULL)
1714 unsigned short usb_val;
1716 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1726 ftdi_error_return(-1,
"unable to enter bitbang mode. Perhaps not a BM type chip?");
1743 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1747 ftdi_error_return(-1,
"unable to leave bitbang mode. Perhaps not a BM type chip?");
1767 unsigned short usb_val;
1769 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1773 usb_val |= (mode << 8);
1775 ftdi_error_return(-1,
"unable to configure bitbang mode. Perhaps selected mode not supported on your chip?");
1794 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1820 unsigned short usb_val;
1825 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1847 unsigned short usb_val;
1849 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1855 *latency = (
unsigned char)usb_val;
1903 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1909 *status = (usb_val[1] << 8) | (usb_val[0] & 0xFF);
1927 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1950 unsigned short usb_val;
1952 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1980 unsigned short usb_val;
1982 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2011 unsigned short usb_val;
2013 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2046 unsigned char eventch,
unsigned char enable)
2048 unsigned short usb_val;
2050 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2075 unsigned char errorch,
unsigned char enable)
2077 unsigned short usb_val;
2079 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2140 for (i=0; i < 5; i++)
2168 if (eeprom->
serial != 0) {
2192 unsigned short checksum, value;
2193 unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
2195 const int cbus_max[5] = {13, 13, 13, 13, 9};
2203 product_size = strlen(eeprom->
product);
2204 if (eeprom->
serial != NULL)
2205 serial_size = strlen(eeprom->
serial);
2208 for (i = 0; i < 5; i++)
2215 if (eeprom->
invert)
return -4;
2219 size_check = eeprom->
size;
2226 if (eeprom->
size>=256) size_check = 120;
2227 size_check -= manufacturer_size*2;
2228 size_check -= product_size*2;
2229 size_check -= serial_size*2;
2236 memset (output, 0, eeprom->
size);
2242 output[0x01] = 0x40;
2253 output[0x06] = 0x00;
2256 output[0x07] = 0x02;
2259 output[0x07] = 0x04;
2262 output[0x07] = 0x05;
2265 output[0x07] = 0x06;
2268 output[0x07] = 0x00;
2310 output[0x0B] = eeprom->
invert & 0xff;
2323 output[0x0F] = manufacturer_size*2 + 2;
2327 output[0x11] = product_size*2 + 2;
2331 output[0x13] = serial_size*2 + 2;
2349 if (eeprom->
size >= 256) i = 0x80;
2353 output[0x0E] = i | 0x80;
2354 output[i++] = manufacturer_size*2 + 2;
2356 for (j = 0; j < manufacturer_size; j++)
2359 output[i] = 0x00, i++;
2363 output[0x10] = i | 0x80;
2364 output[i] = product_size*2 + 2, i++;
2365 output[i] = 0x03, i++;
2366 for (j = 0; j < product_size; j++)
2368 output[i] = eeprom->
product[j], i++;
2369 output[i] = 0x00, i++;
2373 output[0x12] = i | 0x80;
2374 output[i] = serial_size*2 + 2, i++;
2375 output[i] = 0x03, i++;
2376 for (j = 0; j < serial_size; j++)
2378 output[i] = eeprom->
serial[j], i++;
2379 output[i] = 0x00, i++;
2385 for (i = 0; i < eeprom->
size/2-1; i++)
2387 value = output[i*2];
2388 value += output[(i*2)+1] << 8;
2390 checksum = value^checksum;
2391 checksum = (checksum << 1) | (checksum >> 15);
2394 output[eeprom->
size-2] = checksum;
2395 output[eeprom->
size-1] = checksum >> 8;
2416 unsigned short checksum, eeprom_checksum, value;
2417 unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
2419 int eeprom_size = 128;
2424 size_check = eeprom->
size;
2431 if (eeprom->
size>=256)size_check = 120;
2432 size_check -= manufacturer_size*2;
2433 size_check -= product_size*2;
2434 size_check -= serial_size*2;
2448 eeprom->
vendor_id = buf[0x02] + (buf[0x03] << 8);
2451 eeprom->
product_id = buf[0x04] + (buf[0x05] << 8);
2453 value = buf[0x06] + (buf[0x07]<<8);
2500 eeprom->
invert = buf[0x0B];
2506 eeprom->
usb_version = buf[0x0C] + (buf[0x0D] << 8);
2511 manufacturer_size = buf[0x0F]/2;
2512 if (manufacturer_size > 0) eeprom->
manufacturer = malloc(manufacturer_size);
2517 product_size = buf[0x11]/2;
2518 if (product_size > 0) eeprom->
product = malloc(product_size);
2523 serial_size = buf[0x13]/2;
2524 if (serial_size > 0) eeprom->
serial = malloc(serial_size);
2525 else eeprom->
serial = NULL;
2541 i = buf[0x0E] & 0x7f;
2542 for (j=0;j<manufacturer_size-1;j++)
2549 i = buf[0x10] & 0x7f;
2550 for (j=0;j<product_size-1;j++)
2552 eeprom->
product[j] = buf[2*j+i+2];
2557 i = buf[0x12] & 0x7f;
2558 for (j=0;j<serial_size-1;j++)
2560 eeprom->
serial[j] = buf[2*j+i+2];
2562 eeprom->
serial[j] =
'\0';
2567 for (i = 0; i < eeprom_size/2-1; i++)
2570 value += buf[(i*2)+1] << 8;
2572 checksum = value^checksum;
2573 checksum = (checksum << 1) | (checksum >> 15);
2576 eeprom_checksum = buf[eeprom_size-2] + (buf[eeprom_size-1] << 8);
2578 if (eeprom_checksum != checksum)
2580 fprintf(stderr,
"Checksum Error: %04x %04x\n", checksum, eeprom_checksum);
2600 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2623 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2640 static unsigned char ftdi_read_chipid_shift(
unsigned char value)
2642 return ((value & 1) << 1) |
2643 ((value & 2) << 5) |
2644 ((value & 4) >> 2) |
2645 ((value & 8) << 4) |
2646 ((value & 16) >> 1) |
2647 ((value & 32) >> 1) |
2648 ((value & 64) >> 4) |
2649 ((value & 128) >> 2);
2664 unsigned int a = 0, b = 0;
2666 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2671 a = a << 8 | a >> 8;
2674 b = b << 8 | b >> 8;
2675 a = (a << 16) | (b & 0xFFFF);
2676 a = ftdi_read_chipid_shift(a) | ftdi_read_chipid_shift(a>>8)<<8
2677 | ftdi_read_chipid_shift(a>>16)<<16 | ftdi_read_chipid_shift(a>>24)<<24;
2678 *chipid = a ^ 0xa5f0f7d1;
2700 int i=0,j,minsize=32;
2703 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2708 for (j = 0; i < maxsize/2 && j<size; j++)
2718 while (size<=maxsize && memcmp(eeprom,&eeprom[size/2],size/2)!=0);
2736 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2759 unsigned short usb_val, status;
2762 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2775 usb_val = eeprom[i*2];
2776 usb_val += eeprom[(i*2)+1] << 8;
2799 if (ftdi == NULL || ftdi->
usb_dev == NULL)
int ftdi_read_pins(struct ftdi_context *ftdi, unsigned char *pins)
int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product)
#define FTDI_DEVICE_OUT_REQTYPE
enum ftdi_module_detach_mode module_detach_mode
#define SIO_SET_LATENCY_TIMER_REQUEST
list of usb devices created by ftdi_usb_find_all()
struct ftdi_device_list * next
int ftdi_read_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize)
void ftdi_list_free2(struct ftdi_device_list *devlist)
int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi)
#define SIO_SET_EVENT_CHAR_REQUEST
int ftdi_read_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val)
void ftdi_deinit(struct ftdi_context *ftdi)
#define HIGH_CURRENT_DRIVE
#define SIO_READ_PINS_REQUEST
#define SIO_RESET_REQUEST
int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product, const char *description, const char *serial, unsigned int index)
#define SIO_SET_BAUDRATE_REQUEST
int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate)
int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom)
#define SIO_SET_DATA_REQUEST
#define SIO_WRITE_EEPROM_REQUEST
Main context structure for all libftdi functions.
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)
#define FTDI_URB_USERCONTEXT_COOKIE
int ftdi_set_event_char(struct ftdi_context *ftdi, unsigned char eventch, unsigned char enable)
int ftdi_set_bitmode(struct ftdi_context *ftdi, unsigned char bitmask, unsigned char mode)
void ftdi_list_free(struct ftdi_device_list **devlist)
int ftdi_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask)
#define FTDI_DEVICE_IN_REQTYPE
int ftdi_set_line_property(struct ftdi_context *ftdi, enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity)
int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi)
struct ftdi_context * ftdi_new(void)
int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size)
void ftdi_eeprom_setsize(struct ftdi_context *ftdi, struct ftdi_eeprom *eeprom, int size)
int ftdi_erase_eeprom(struct ftdi_context *ftdi)
int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface)
#define FTDI_DEFAULT_EEPROM_SIZE
int ftdi_read_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom)
unsigned int readbuffer_remaining
void ftdi_set_usbdev(struct ftdi_context *ftdi, usb_dev_handle *usb)
int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev)
int ftdi_set_error_char(struct ftdi_context *ftdi, unsigned char errorch, unsigned char enable)
#define SIO_GET_LATENCY_TIMER_REQUEST
unsigned int async_usb_buffer_size
int ftdi_init(struct ftdi_context *ftdi)
int ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *buf, int size)
void ftdi_async_complete(struct ftdi_context *ftdi, int wait_for_more)
unsigned char * readbuffer
unsigned int writebuffer_chunksize
void ftdi_eeprom_initdefaults(struct ftdi_eeprom *eeprom)
#define SIO_READ_EEPROM_REQUEST
int ftdi_poll_modem_status(struct ftdi_context *ftdi, unsigned short *status)
int ftdi_setdtr_rts(struct ftdi_context *ftdi, int dtr, int rts)
#define SIO_SET_FLOW_CTRL_REQUEST
#define SIO_SET_BITMODE_REQUEST
#define SIO_SET_ERROR_CHAR_REQUEST
int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)
unsigned char bitbang_mode
int ftdi_eeprom_build(struct ftdi_eeprom *eeprom, unsigned char *output)
#define SIO_SET_MODEM_CTRL_REQUEST
#define SIO_POLL_MODEM_STATUS_REQUEST
int ftdi_setflowctrl(struct ftdi_context *ftdi, int flowctrl)
void ftdi_eeprom_free(struct ftdi_eeprom *eeprom)
int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product, const char *description, const char *serial)
struct usb_dev_handle * usb_dev
int ftdi_usb_close(struct ftdi_context *ftdi)
unsigned int max_packet_size
int ftdi_setrts(struct ftdi_context *ftdi, int state)
int ftdi_usb_reset(struct ftdi_context *ftdi)
int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency)
int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)
#define SIO_RESET_PURGE_RX
int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize)
unsigned char bitbang_enabled
int ftdi_usb_open_string(struct ftdi_context *ftdi, const char *description)
int ftdi_disable_bitbang(struct ftdi_context *ftdi)
int ftdi_setdtr(struct ftdi_context *ftdi, int state)
int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency)
#define SIO_RESET_PURGE_TX
unsigned int readbuffer_chunksize
char * ftdi_get_error_string(struct ftdi_context *ftdi)
#define SIO_ERASE_EEPROM_REQUEST
int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, int maxsize)
int ftdi_usb_purge_buffers(struct ftdi_context *ftdi)
int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size)
int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short eeprom_val)
#define ftdi_error_return(code, str)
unsigned int readbuffer_offset
int ftdi_write_data_async(struct ftdi_context *ftdi, unsigned char *buf, int size)
void ftdi_free(struct ftdi_context *ftdi)
int ftdi_read_chipid(struct ftdi_context *ftdi, unsigned int *chipid)
int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist, int vendor, int product)
int ftdi_set_line_property2(struct ftdi_context *ftdi, enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity, enum ftdi_break_type break_type)