39 #include "ftdi_version_i.h"
41 #define ftdi_error_return(code, str) do { \
43 ftdi->error_str = str; \
45 fprintf(stderr, str); \
49 #define ftdi_error_return_free_device_list(code, str, devs) do { \
50 libusb_free_device_list(devs,1); \
51 ftdi->error_str = str; \
65 static void ftdi_usb_close_internal (
struct ftdi_context *ftdi)
108 if (libusb_init(&ftdi->
usb_ctx) < 0)
168 if (ftdi->
index != check_interface)
215 ftdi_usb_close_internal (ftdi);
285 ver.
major = FTDI_MAJOR_VERSION;
286 ver.
minor = FTDI_MINOR_VERSION;
287 ver.
micro = FTDI_MICRO_VERSION;
314 libusb_device **devs;
318 if (libusb_get_device_list(ftdi->
usb_ctx, &devs) < 0)
324 while ((dev = devs[i++]) != NULL)
326 struct libusb_device_descriptor desc;
328 if (libusb_get_device_descriptor(dev, &desc) < 0)
331 if (((vendor != 0 && product != 0) &&
332 desc.idVendor == vendor && desc.idProduct == product) ||
333 ((vendor == 0 && product == 0) &&
334 (desc.idVendor == 0x403) && (desc.idProduct == 0x6001 || desc.idProduct == 0x6010
335 || desc.idProduct == 0x6011 || desc.idProduct == 0x6014)))
341 (*curdev)->next = NULL;
342 (*curdev)->dev =
dev;
343 libusb_ref_device(dev);
344 curdev = &(*curdev)->
next;
348 libusb_free_device_list(devs,1);
361 for (curdev = *devlist; curdev != NULL;)
364 libusb_unref_device(curdev->
dev);
409 char * manufacturer,
int mnf_len,
char * description,
int desc_len,
char * serial,
int serial_len)
411 struct libusb_device_descriptor desc;
413 if ((ftdi==NULL) || (dev==NULL))
416 if (libusb_open(dev, &ftdi->
usb_dev) < 0)
419 if (libusb_get_device_descriptor(dev, &desc) < 0)
422 if (manufacturer != NULL)
424 if (libusb_get_string_descriptor_ascii(ftdi->
usb_dev, desc.iManufacturer, (
unsigned char *)manufacturer, mnf_len) < 0)
426 ftdi_usb_close_internal (ftdi);
431 if (description != NULL)
433 if (libusb_get_string_descriptor_ascii(ftdi->
usb_dev, desc.iProduct, (
unsigned char *)description, desc_len) < 0)
435 ftdi_usb_close_internal (ftdi);
442 if (libusb_get_string_descriptor_ascii(ftdi->
usb_dev, desc.iSerialNumber, (
unsigned char *)serial, serial_len) < 0)
444 ftdi_usb_close_internal (ftdi);
449 ftdi_usb_close_internal (ftdi);
460 static unsigned int _ftdi_determine_max_packet_size(
struct ftdi_context *ftdi, libusb_device *dev)
462 struct libusb_device_descriptor desc;
463 struct libusb_config_descriptor *config0;
464 unsigned int packet_size;
467 if (ftdi == NULL || dev == NULL)
478 if (libusb_get_device_descriptor(dev, &desc) < 0)
481 if (libusb_get_config_descriptor(dev, 0, &config0) < 0)
484 if (desc.bNumConfigurations > 0)
486 if (ftdi->
interface < config0->bNumInterfaces)
488 struct libusb_interface interface = config0->interface[ftdi->
interface];
489 if (interface.num_altsetting > 0)
491 struct libusb_interface_descriptor descriptor = interface.altsetting[0];
492 if (descriptor.bNumEndpoints > 0)
494 packet_size = descriptor.endpoint[0].wMaxPacketSize;
500 libusb_free_config_descriptor (config0);
524 struct libusb_device_descriptor desc;
525 struct libusb_config_descriptor *config0;
526 int cfg, cfg0, detach_errno = 0;
531 if (libusb_open(dev, &ftdi->
usb_dev) < 0)
534 if (libusb_get_device_descriptor(dev, &desc) < 0)
537 if (libusb_get_config_descriptor(dev, 0, &config0) < 0)
539 cfg0 = config0->bConfigurationValue;
540 libusb_free_config_descriptor (config0);
551 detach_errno = errno;
554 if (libusb_get_configuration (ftdi->
usb_dev, &cfg) < 0)
559 if (desc.bNumConfigurations > 0 && cfg != cfg0)
561 if (libusb_set_configuration(ftdi->
usb_dev, cfg0) < 0)
563 ftdi_usb_close_internal (ftdi);
564 if (detach_errno == EPERM)
570 ftdi_error_return(-3,
"unable to set usb configuration. Make sure the default FTDI driver is not in use");
577 ftdi_usb_close_internal (ftdi);
578 if (detach_errno == EPERM)
584 ftdi_error_return(-5,
"unable to claim usb device. Make sure the default FTDI driver is not in use");
590 ftdi_usb_close_internal (ftdi);
596 if (desc.bcdDevice == 0x400 || (desc.bcdDevice == 0x200
597 && desc.iSerialNumber == 0))
599 else if (desc.bcdDevice == 0x200)
601 else if (desc.bcdDevice == 0x500)
603 else if (desc.bcdDevice == 0x600)
605 else if (desc.bcdDevice == 0x700)
607 else if (desc.bcdDevice == 0x800)
609 else if (desc.bcdDevice == 0x900)
617 ftdi_usb_close_internal (ftdi);
660 const char* description,
const char* serial)
690 const char* description,
const char* serial,
unsigned int index)
693 libusb_device **devs;
700 if (libusb_get_device_list(ftdi->
usb_ctx, &devs) < 0)
703 while ((dev = devs[i++]) != NULL)
705 struct libusb_device_descriptor desc;
708 if (libusb_get_device_descriptor(dev, &desc) < 0)
711 if (desc.idVendor == vendor && desc.idProduct == product)
713 if (libusb_open(dev, &ftdi->
usb_dev) < 0)
716 if (description != NULL)
718 if (libusb_get_string_descriptor_ascii(ftdi->
usb_dev, desc.iProduct, (
unsigned char *)
string,
sizeof(
string)) < 0)
720 ftdi_usb_close_internal (ftdi);
723 if (strncmp(
string, description,
sizeof(
string)) != 0)
725 ftdi_usb_close_internal (ftdi);
731 if (libusb_get_string_descriptor_ascii(ftdi->
usb_dev, desc.iSerialNumber, (
unsigned char *)
string,
sizeof(
string)) < 0)
733 ftdi_usb_close_internal (ftdi);
736 if (strncmp(
string, serial,
sizeof(
string)) != 0)
738 ftdi_usb_close_internal (ftdi);
743 ftdi_usb_close_internal (ftdi);
752 libusb_free_device_list(devs,1);
792 if (description[0] == 0 || description[1] !=
':')
795 if (description[0] ==
'd')
798 libusb_device **devs;
799 unsigned int bus_number, device_address;
802 if (libusb_get_device_list(ftdi->
usb_ctx, &devs) < 0)
806 if (sscanf (description + 2,
"%u/%u", &bus_number, &device_address) != 2)
809 while ((dev = devs[i++]) != NULL)
812 if (bus_number == libusb_get_bus_number (dev)
813 && device_address == libusb_get_device_address (dev))
816 libusb_free_device_list(devs,1);
824 else if (description[0] ==
'i' || description[0] ==
's')
827 unsigned int product;
828 unsigned int index=0;
829 const char *serial=NULL;
830 const char *startp, *endp;
833 startp=description+2;
834 vendor=strtoul((
char*)startp,(
char**)&endp,0);
835 if (*endp !=
':' || endp == startp || errno != 0)
839 product=strtoul((
char*)startp,(
char**)&endp,0);
840 if (endp == startp || errno != 0)
843 if (description[0] ==
'i' && *endp != 0)
850 index=strtoul((
char*)startp,(
char**)&endp,0);
851 if (*endp != 0 || endp == startp || errno != 0)
854 if (description[0] ==
's')
882 if (ftdi == NULL || ftdi->
usb_dev == NULL)
908 if (ftdi == NULL || ftdi->
usb_dev == NULL)
934 if (ftdi == NULL || ftdi->
usb_dev == NULL)
959 if (ftdi == NULL || ftdi->
usb_dev == NULL)
995 ftdi_usb_close_internal (ftdi);
1012 static int ftdi_to_clkbits_AM(
int baudrate,
unsigned long *encoded_divisor)
1015 static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7};
1016 static const char am_adjust_up[8] = {0, 0, 0, 1, 0, 3, 2, 1};
1017 static const char am_adjust_dn[8] = {0, 0, 0, 1, 0, 1, 2, 3};
1018 int divisor, best_divisor, best_baud, best_baud_diff;
1019 divisor = 24000000 / baudrate;
1023 divisor -= am_adjust_dn[divisor & 7];
1029 for (i = 0; i < 2; i++)
1031 int try_divisor = divisor + i;
1036 if (try_divisor <= 8)
1041 else if (divisor < 16)
1049 try_divisor += am_adjust_up[try_divisor & 7];
1050 if (try_divisor > 0x1FFF8)
1053 try_divisor = 0x1FFF8;
1057 baud_estimate = (24000000 + (try_divisor / 2)) / try_divisor;
1059 if (baud_estimate < baudrate)
1061 baud_diff = baudrate - baud_estimate;
1065 baud_diff = baud_estimate - baudrate;
1067 if (i == 0 || baud_diff < best_baud_diff)
1070 best_divisor = try_divisor;
1071 best_baud = baud_estimate;
1072 best_baud_diff = baud_diff;
1081 *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 7] << 14);
1083 if (*encoded_divisor == 1)
1085 *encoded_divisor = 0;
1087 else if (*encoded_divisor == 0x4001)
1089 *encoded_divisor = 1;
1118 static int ftdi_to_clkbits(
int baudrate,
unsigned int clk,
int clk_div,
unsigned long *encoded_divisor)
1120 static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7};
1122 int divisor, best_divisor;
1123 if (baudrate >= clk/clk_div)
1125 *encoded_divisor = 0;
1126 best_baud = clk/clk_div;
1128 else if (baudrate >= clk/(clk_div + clk_div/2))
1130 *encoded_divisor = 1;
1131 best_baud = clk/(clk_div + clk_div/2);
1133 else if (baudrate >= clk/(2*clk_div))
1135 *encoded_divisor = 2;
1136 best_baud = clk/(2*clk_div);
1141 divisor = clk*16/clk_div / baudrate;
1143 best_divisor = divisor /2 +1;
1145 best_divisor = divisor/2;
1146 if(best_divisor > 0x20000)
1147 best_divisor = 0x1ffff;
1148 best_baud = clk*16/clk_div/best_divisor;
1150 best_baud = best_baud /2 +1;
1152 best_baud = best_baud /2;
1153 *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 0x7] << 14);
1162 static int ftdi_convert_baudrate(
int baudrate,
struct ftdi_context *ftdi,
1163 unsigned short *value,
unsigned short *index)
1166 unsigned long encoded_divisor;
1174 #define H_CLK 120000000
1175 #define C_CLK 48000000
1178 if(baudrate*10 > H_CLK /0x3fff)
1185 best_baud = ftdi_to_clkbits(baudrate, H_CLK, 10, &encoded_divisor);
1186 encoded_divisor |= 0x20000;
1189 best_baud = ftdi_to_clkbits(baudrate, C_CLK, 16, &encoded_divisor);
1193 best_baud = ftdi_to_clkbits(baudrate, C_CLK, 16, &encoded_divisor);
1197 best_baud = ftdi_to_clkbits_AM(baudrate, &encoded_divisor);
1200 *value = (
unsigned short)(encoded_divisor & 0xFFFF);
1204 *index = (
unsigned short)(encoded_divisor >> 8);
1206 *index |= ftdi->
index;
1209 *index = (
unsigned short)(encoded_divisor >> 16);
1220 unsigned short *value,
unsigned short *index)
1222 return ftdi_convert_baudrate(baudrate, ftdi, value, index);
1238 unsigned short value, index;
1239 int actual_baudrate;
1241 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1246 baudrate = baudrate*4;
1249 actual_baudrate = ftdi_convert_baudrate(baudrate, ftdi, &value, &index);
1250 if (actual_baudrate <= 0)
1254 if ((actual_baudrate * 2 < baudrate )
1255 || ((actual_baudrate < baudrate)
1256 ? (actual_baudrate * 21 < baudrate * 20)
1257 : (baudrate * 21 < actual_baudrate * 20)))
1258 ftdi_error_return (-1,
"Unsupported baudrate. Note: bitbang baudrates are automatically multiplied by 4");
1305 unsigned short value = bits;
1307 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1313 value |= (0x00 << 8);
1316 value |= (0x01 << 8);
1319 value |= (0x02 << 8);
1322 value |= (0x03 << 8);
1325 value |= (0x04 << 8);
1332 value |= (0x00 << 11);
1335 value |= (0x01 << 11);
1338 value |= (0x02 << 11);
1345 value |= (0x00 << 14);
1348 value |= (0x01 << 14);
1376 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1379 while (offset < size)
1383 if (offset+write_size > size)
1384 write_size = size-offset;
1389 offset += actual_length;
1395 static void ftdi_read_data_cb(
struct libusb_transfer *transfer)
1399 int packet_size, actual_length, num_of_chunks, chunk_remains, i, ret;
1403 actual_length = transfer->actual_length;
1405 if (actual_length > 2)
1409 num_of_chunks = actual_length / packet_size;
1410 chunk_remains = actual_length % packet_size;
1416 if (actual_length > packet_size - 2)
1418 for (i = 1; i < num_of_chunks; i++)
1422 if (chunk_remains > 2)
1427 actual_length -= 2*num_of_chunks;
1430 actual_length -= 2*(num_of_chunks-1)+chunk_remains;
1433 if (actual_length > 0)
1440 tc->
offset += actual_length;
1471 ret = libusb_submit_transfer (transfer);
1477 static void ftdi_write_data_cb(
struct libusb_transfer *transfer)
1482 tc->
offset += transfer->actual_length;
1496 transfer->length = write_size;
1497 transfer->buffer = tc->
buf + tc->
offset;
1498 ret = libusb_submit_transfer (transfer);
1522 struct libusb_transfer *transfer;
1523 int write_size, ret;
1525 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1532 transfer = libusb_alloc_transfer(0);
1545 if (size < ftdi->writebuffer_chunksize)
1550 libusb_fill_bulk_transfer(transfer, ftdi->
usb_dev, ftdi->
in_ep, buf,
1551 write_size, ftdi_write_data_cb, tc,
1553 transfer->type = LIBUSB_TRANSFER_TYPE_BULK;
1555 ret = libusb_submit_transfer(transfer);
1558 libusb_free_transfer(transfer);
1584 struct libusb_transfer *transfer;
1587 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1598 if (size <= ftdi->readbuffer_remaining)
1624 transfer = libusb_alloc_transfer(0);
1635 transfer->type = LIBUSB_TRANSFER_TYPE_BULK;
1637 ret = libusb_submit_transfer(transfer);
1640 libusb_free_transfer(transfer);
1669 if (ret == LIBUSB_ERROR_INTERRUPTED)
1671 libusb_cancel_transfer(tc->
transfer);
1675 libusb_free_transfer(tc->
transfer);
1688 if (tc->
transfer->status != LIBUSB_TRANSFER_COMPLETED)
1690 libusb_free_transfer(tc->
transfer);
1750 int offset = 0, ret, i, num_of_chunks, chunk_remains;
1752 int actual_length = 1;
1754 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1758 if (packet_size == 0)
1762 if (size <= ftdi->readbuffer_remaining)
1783 while (offset < size && actual_length > 0)
1792 if (actual_length > 2)
1796 num_of_chunks = actual_length / packet_size;
1797 chunk_remains = actual_length % packet_size;
1803 if (actual_length > packet_size - 2)
1805 for (i = 1; i < num_of_chunks; i++)
1809 if (chunk_remains > 2)
1814 actual_length -= 2*num_of_chunks;
1817 actual_length -= 2*(num_of_chunks-1)+chunk_remains;
1820 else if (actual_length <= 2)
1825 if (actual_length > 0)
1828 if (offset+actual_length <= size)
1832 offset += actual_length;
1843 int part_size = size-
offset;
1848 offset += part_size;
1875 unsigned char *new_buf;
1888 if (chunksize > 16384)
1892 if ((new_buf = (
unsigned char *)realloc(ftdi->
readbuffer, chunksize)) == NULL)
1933 unsigned short usb_val;
1935 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1939 usb_val |= (mode << 8);
1941 ftdi_error_return(-1,
"unable to configure bitbang mode. Perhaps not a BM/2232C type chip?");
1959 if (ftdi == NULL || ftdi->
usb_dev == NULL)
1963 ftdi_error_return(-1,
"unable to leave bitbang mode. Perhaps not a BM type chip?");
1982 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2008 unsigned short usb_val;
2013 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2035 unsigned short usb_val;
2037 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2043 *latency = (
unsigned char)usb_val;
2091 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2097 *status = (usb_val[1] << 8) | (usb_val[0] & 0xFF);
2115 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2138 unsigned short usb_val;
2140 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2168 unsigned short usb_val;
2170 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2199 unsigned short usb_val;
2201 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2234 unsigned char eventch,
unsigned char enable)
2236 unsigned short usb_val;
2238 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2263 unsigned char errorch,
unsigned char enable)
2265 unsigned short usb_val;
2267 if (ftdi == NULL || ftdi->
usb_dev == NULL)
2293 char * product,
char * serial)
2300 if (ftdi->
eeprom == NULL)
2341 eeprom->
product = malloc(strlen(product)+1);
2343 strcpy(eeprom->
product, product);
2347 const char* default_product;
2350 case TYPE_AM: default_product =
"AM";
break;
2351 case TYPE_BM: default_product =
"BM";
break;
2352 case TYPE_2232C: default_product =
"Dual RS232";
break;
2353 case TYPE_R: default_product =
"FT232R USB UART";
break;
2354 case TYPE_2232H: default_product =
"Dual RS232-HS";
break;
2355 case TYPE_4232H: default_product =
"FT4232H";
break;
2356 case TYPE_232H: default_product =
"Single-RS232-HS";
break;
2360 eeprom->
product = malloc(strlen(default_product) +1);
2362 strcpy(eeprom->
product, default_product);
2370 eeprom->
serial = malloc(strlen(serial)+1);
2372 strcpy(eeprom->
serial, serial);
2378 eeprom->
size = 0x80;
2390 for (i=0; i<10; i++)
2404 int mode_low, mode_high;
2414 output[0x18+i] = (mode_high <<4) | mode_low;
2469 unsigned char i, j, eeprom_size_mask;
2470 unsigned short checksum, value;
2471 unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
2474 unsigned char * output;
2478 if (ftdi->
eeprom == NULL)
2482 output = eeprom->
buf;
2484 if (eeprom->
chip == -1)
2487 if ((eeprom->
chip == 0x56) || (eeprom->
chip == 0x66))
2488 eeprom->
size = 0x100;
2490 eeprom->
size = 0x80;
2495 product_size = strlen(eeprom->
product);
2496 if (eeprom->
serial != NULL)
2497 serial_size = strlen(eeprom->
serial);
2504 user_area_size = 96;
2507 user_area_size = 90;
2510 user_area_size = 88;
2514 user_area_size = 86;
2517 user_area_size = 80;
2523 user_area_size -= (manufacturer_size + product_size + serial_size) * 2;
2525 if (user_area_size < 0)
2542 output[0x06] = 0x00;
2546 output[0x07] = 0x02;
2549 output[0x07] = 0x04;
2552 output[0x07] = 0x05;
2555 output[0x07] = 0x06;
2558 output[0x07] = 0x07;
2561 output[0x07] = 0x08;
2564 output[0x07] = 0x09;
2567 output[0x07] = 0x00;
2626 eeprom_size_mask = eeprom->
size -1;
2632 output[i & eeprom_size_mask] = manufacturer_size*2 + 2, i++;
2633 output[i & eeprom_size_mask] = 0x03, i++;
2634 for (j = 0; j < manufacturer_size; j++)
2636 output[i & eeprom_size_mask] = eeprom->
manufacturer[j], i++;
2637 output[i & eeprom_size_mask] = 0x00, i++;
2639 output[0x0F] = manufacturer_size*2 + 2;
2643 output[0x10] = i | 0x80;
2644 output[i & eeprom_size_mask] = product_size*2 + 2, i++;
2645 output[i & eeprom_size_mask] = 0x03, i++;
2646 for (j = 0; j < product_size; j++)
2648 output[i & eeprom_size_mask] = eeprom->
product[j], i++;
2649 output[i & eeprom_size_mask] = 0x00, i++;
2651 output[0x11] = product_size*2 + 2;
2655 output[0x12] = i | 0x80;
2656 output[i & eeprom_size_mask] = serial_size*2 + 2, i++;
2657 output[i & eeprom_size_mask] = 0x03, i++;
2658 for (j = 0; j < serial_size; j++)
2660 output[i & eeprom_size_mask] = eeprom->
serial[j], i++;
2661 output[i & eeprom_size_mask] = 0x00, i++;
2667 output[i & eeprom_size_mask] = 0x02;
2669 output[i & eeprom_size_mask] = 0x03;
2671 output[i & eeprom_size_mask] = eeprom->
is_not_pnp;
2675 output[0x13] = serial_size*2 + 2;
2725 output[0x0A] |= 0x1;
2727 output[0x0A] &= ~0x1;
2729 output[0x0A] |= 0x2;
2731 output[0x0A] &= ~0x2;
2733 output[0x0A] |= 0x4;
2735 output[0x0A] &= ~0x4;
2743 output[0x14] = eeprom->
chip;
2748 output[0x01] = 0x40;
2751 output[0x0A] |= 0x4;
2753 output[0x0A] &= ~0x4;
2754 output[0x0B] = eeprom->
invert;
2801 output[0x0A] |= 0x4;
2803 output[0x0A] &= ~0x4;
2841 output[0x18] = eeprom->
chip;
2863 output[0x0a] |= 0x4;
2865 output[0x0a] &= ~0x4;
2920 output[0x18] = eeprom->
chip;
2965 output[0x1e] = eeprom->
chip;
2966 fprintf(stderr,
"FIXME: Build FT232H specific EEPROM settings\n");
2974 for (i = 0; i < eeprom->
size/2-1; i++)
2976 value = output[i*2];
2977 value += output[(i*2)+1] << 8;
2979 checksum = value^checksum;
2980 checksum = (checksum << 1) | (checksum >> 15);
2983 output[eeprom->
size-2] = checksum;
2984 output[eeprom->
size-1] = checksum >> 8;
2986 return user_area_size;
2993 static unsigned char bit2type(
unsigned char bits)
3003 fprintf(stderr,
" Unexpected value %d for Hardware Interface type\n",
3023 unsigned short checksum, eeprom_checksum, value;
3024 unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
3032 if (ftdi->
eeprom == NULL)
3036 eeprom_size = eeprom->
size;
3039 eeprom->
vendor_id = buf[0x02] + (buf[0x03] << 8);
3042 eeprom->
product_id = buf[0x04] + (buf[0x05] << 8);
3044 release = buf[0x06] + (buf[0x07]<<8);
3074 eeprom->
usb_version = buf[0x0C] + (buf[0x0D] << 8);
3078 manufacturer_size = buf[0x0F]/2;
3081 if (manufacturer_size > 0)
3087 i = buf[0x0E] & (eeprom_size -1);
3088 for (j=0;j<manufacturer_size-1;j++)
3101 product_size = buf[0x11]/2;
3102 if (product_size > 0)
3104 eeprom->
product = malloc(product_size);
3108 i = buf[0x10] & (eeprom_size -1);
3109 for (j=0;j<product_size-1;j++)
3111 eeprom->
product[j] = buf[2*j+i+2];
3122 serial_size = buf[0x13]/2;
3123 if (serial_size > 0)
3125 eeprom->
serial = malloc(serial_size);
3129 i = buf[0x12] & (eeprom_size -1);
3130 for (j=0;j<serial_size-1;j++)
3132 eeprom->
serial[j] = buf[2*j+i+2];
3134 eeprom->
serial[j] =
'\0';
3137 else eeprom->
serial = NULL;
3142 for (i = 0; i < eeprom_size/2-1; i++)
3145 value += buf[(i*2)+1] << 8;
3147 checksum = value^checksum;
3148 checksum = (checksum << 1) | (checksum >> 15);
3151 eeprom_checksum = buf[eeprom_size-2] + (buf[eeprom_size-1] << 8);
3153 if (eeprom_checksum != checksum)
3155 fprintf(stderr,
"Checksum Error: %04x %04x\n", checksum, eeprom_checksum);
3172 eeprom->
chip = buf[0x14];
3179 if ( (buf[0x01]&0x40) != 0x40)
3181 "TYPE_R EEPROM byte[0x01] Bit 6 unexpected Endpoint size."
3182 " If this happened with the\n"
3183 " EEPROM programmed by FTDI tools, please report "
3184 "to libftdi@developer.intra2net.com\n");
3186 eeprom->
chip = buf[0x16];
3189 eeprom->
invert = buf[0x0B];
3220 eeprom->
chip = buf[0x18];
3226 eeprom->
group1_slew = (buf[0x0c] >> 4) & SLOW_SLEW;
3232 eeprom->
group3_slew = (buf[0x0d] >> 4) & SLOW_SLEW;
3256 eeprom->
chip = buf[0x1e];
3262 char *channel_mode[] = {
"UART",
"FIFO",
"CPU",
"OPTO",
"FT1284"};
3263 fprintf(stdout,
"VID: 0x%04x\n",eeprom->
vendor_id);
3264 fprintf(stdout,
"PID: 0x%04x\n",eeprom->
product_id);
3265 fprintf(stdout,
"Release: 0x%04x\n",release);
3268 fprintf(stdout,
"Self-Powered%s", (eeprom->
remote_wakeup)?
", USB Remote Wake Up\n":
"\n");
3270 fprintf(stdout,
"Bus Powered: %3d mA%s", eeprom->
max_power,
3273 fprintf(stdout,
"Manufacturer: %s\n",eeprom->
manufacturer);
3275 fprintf(stdout,
"Product: %s\n",eeprom->
product);
3277 fprintf(stdout,
"Serial: %s\n",eeprom->
serial);
3278 fprintf(stdout,
"Checksum : %04x\n", checksum);
3280 fprintf(stdout,
"Internal EEPROM\n");
3281 else if (eeprom->
chip >= 0x46)
3282 fprintf(stdout,
"Attached EEPROM: 93x%02x\n", eeprom->
chip);
3284 fprintf(stdout,
"Suspend on DBUS7\n");
3286 fprintf(stdout,
"Pull IO pins low during suspend\n");
3290 fprintf(stdout,
"Enter low power state on ACBUS7\n");
3293 fprintf(stdout,
"Enable Remote Wake Up\n");
3294 fprintf(stdout,
"PNP: %d\n",(eeprom->
is_not_pnp)?0:1);
3296 fprintf(stdout,
"Channel A has Mode %s%s%s\n",
3302 fprintf(stdout,
"FT1284 Mode Clock is idle %s, %s first, %sFlow Control\n",
3308 fprintf(stdout,
"Channel B has Mode %s%s%s\n",
3314 fprintf(stdout,
"Use explicit USB Version %04x\n",eeprom->
usb_version);
3318 fprintf(stdout,
"%s has %d mA drive%s%s\n",
3323 fprintf(stdout,
"%s has %d mA drive%s%s\n",
3328 fprintf(stdout,
"%s has %d mA drive%s%s\n",
3333 fprintf(stdout,
"%s has %d mA drive%s%s\n",
3342 char *cbush_mux[] = {
"TRISTATE",
"RXLED",
"TXLED",
"TXRXLED",
"PWREN",
3343 "SLEEP",
"DRIVE_0",
"DRIVE_1",
"IOMODE",
"TXDEN",
3344 "CLK30",
"CLK15",
"CLK7_5"
3346 fprintf(stdout,
"ACBUS has %d mA drive%s%s\n",
3350 fprintf(stdout,
"ADBUS has %d mA drive%s%s\n",
3354 for (i=0; i<10; i++)
3357 fprintf(stdout,
"C%d Function: %s\n", i,
3364 char *cbus_mux[] = {
"TXDEN",
"PWREN",
"RXLED",
"TXLED",
"TX+RXLED",
3365 "SLEEP",
"CLK48",
"CLK24",
"CLK12",
"CLK6",
3366 "IOMODE",
"BB_WR",
"BB_RD"
3368 char *cbus_BB[] = {
"RXF",
"TXE",
"RD",
"WR"};
3372 char *r_bits[] = {
"TXD",
"RXD",
"RTS",
"CTS",
"DTR",
"DSR",
"DCD",
"RI"};
3373 fprintf(stdout,
"Inverted bits:");
3375 if ((eeprom->
invert & (1<<i)) == (1<<i))
3376 fprintf(stdout,
" %s",r_bits[i]);
3377 fprintf(stdout,
"\n");
3382 fprintf(stdout,
"C%d Function: %s\n", i,
3389 fprintf(stdout,
"C%d BB Function: %s\n", i,
3392 fprintf(stdout,
"Unknown CBUS mode. Might be special mode?\n");
3783 if (!ftdi || !(ftdi->
eeprom))
3786 if (!buf || size < ftdi->eeprom->size)
3809 if (!ftdi || !(ftdi->
eeprom) || !buf)
3834 if (ftdi == NULL || ftdi->
usb_dev == NULL)
3857 if (ftdi == NULL || ftdi->
usb_dev == NULL)
3863 if (libusb_control_transfer(
3875 else if (memcmp(buf,&buf[0x80],0x80) == 0)
3877 else if (memcmp(buf,&buf[0x40],0x40) == 0)
3889 static unsigned char ftdi_read_chipid_shift(
unsigned char value)
3891 return ((value & 1) << 1) |
3892 ((value & 2) << 5) |
3893 ((value & 4) >> 2) |
3894 ((value & 8) << 4) |
3895 ((value & 16) >> 1) |
3896 ((value & 32) >> 1) |
3897 ((value & 64) >> 4) |
3898 ((value & 128) >> 2);
3913 unsigned int a = 0, b = 0;
3915 if (ftdi == NULL || ftdi->
usb_dev == NULL)
3920 a = a << 8 | a >> 8;
3923 b = b << 8 | b >> 8;
3924 a = (a << 16) | (b & 0xFFFF);
3925 a = ftdi_read_chipid_shift(a) | ftdi_read_chipid_shift(a>>8)<<8
3926 | ftdi_read_chipid_shift(a>>16)<<16 | ftdi_read_chipid_shift(a>>24)<<24;
3927 *chipid = a ^ 0xa5f0f7d1;
3950 unsigned short eeprom_val)
3952 int chip_type_location;
3953 unsigned short chip_type;
3955 if (ftdi == NULL || ftdi->
usb_dev == NULL)
3958 if (eeprom_addr <0x80)
3966 chip_type_location = 0x14;
3970 chip_type_location = 0x18;
3973 chip_type_location = 0x1e;
3981 fprintf(stderr,
" loc 0x%04x val 0x%04x\n", chip_type_location,chip_type);
3982 if ((chip_type & 0xff) != 0x66)
4007 unsigned short usb_val, status;
4009 unsigned char *eeprom;
4011 if (ftdi == NULL || ftdi->
usb_dev == NULL)
4029 usb_val = eeprom[i*2];
4030 usb_val += eeprom[(i*2)+1] << 8;
4054 #define MAGIC 0x55aa
4057 unsigned short eeprom_value;
4058 if (ftdi == NULL || ftdi->
usb_dev == NULL)
4082 if (eeprom_value ==
MAGIC)
4090 if (eeprom_value ==
MAGIC)
4096 if (eeprom_value ==
MAGIC)