X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=ftdi_eeprom%2Fmain.c;h=5e28034baed69951c8d60f3aae57583b2a59ec72;hp=0ffffd79d62db3b5716122ccab47583be83e97b8;hb=b25d91651338fdf323bcfae5f66d47fec69819f7;hpb=6162087977a2040b3f2a265b3b510e15adcbd77f diff --git a/ftdi_eeprom/main.c b/ftdi_eeprom/main.c index 0ffffd7..5e28034 100644 --- a/ftdi_eeprom/main.c +++ b/ftdi_eeprom/main.c @@ -2,7 +2,7 @@ main.c - description ------------------- begin : Mon Apr 7 12:05:22 CEST 2003 - copyright : (C) 2003-2011 by Intra2net AG and the libftdi developers + copyright : (C) 2003-2013 by Intra2net AG and the libftdi developers email : opensource@intra2net.com ***************************************************************************/ @@ -16,7 +16,6 @@ /* TODO: - - Remove 128 bytes limit - Merge Uwe's eeprom tool. Current features: - Init eeprom defaults based upon eeprom type - Read -> Already there @@ -38,6 +37,7 @@ #include #include +#include #include #include @@ -118,6 +118,7 @@ int main(int argc, char *argv[]) CFG_STR("manufacturer", "Acme Inc.", 0), CFG_STR("product", "USB Serial Converter", 0), CFG_STR("serial", "08-15", 0), + CFG_INT("eeprom_type", 0x00, 0), CFG_STR("filename", "", 0), CFG_BOOL("flash_raw", cfg_false, 0), CFG_BOOL("high_current", cfg_false, 0), @@ -143,6 +144,7 @@ int main(int argc, char *argv[]) */ int _read = 0, _erase = 0, _flash = 0; + const int max_eeprom_size = 256; int my_eeprom_size = 0; unsigned char *eeprom_buf = NULL; char *filename; @@ -231,12 +233,11 @@ int main(int argc, char *argv[]) ftdi_eeprom_initdefaults (ftdi, cfg_getstr(cfg, "manufacturer"), cfg_getstr(cfg, "product"), cfg_getstr(cfg, "serial")); - + printf("FTDI read eeprom: %d\n", ftdi_read_eeprom(ftdi)); eeprom_get_value(ftdi, CHIP_SIZE, &my_eeprom_size); - // TODO: Do we know the eeprom size already? printf("EEPROM size: %d\n", my_eeprom_size); - + if (_read > 0) { ftdi_eeprom_decode(ftdi, 0 /* debug: 1 */); @@ -278,7 +279,7 @@ int main(int argc, char *argv[]) eeprom_set_value(ftdi, USE_SERIAL, cfg_getbool(cfg, "use_serial")); eeprom_set_value(ftdi, USE_USB_VERSION, cfg_getbool(cfg, "change_usb_version")); eeprom_set_value(ftdi, USB_VERSION, cfg_getint(cfg, "usb_version")); - + eeprom_set_value(ftdi, CHIP_TYPE, cfg_getint(cfg, "eeprom_type")); eeprom_set_value(ftdi, HIGH_CURRENT, cfg_getbool(cfg, "high_current")); eeprom_set_value(ftdi, CBUS_FUNCTION_0, str_to_cbus(cfg_getstr(cfg, "cbus0"), 13)); @@ -297,12 +298,22 @@ int main(int argc, char *argv[]) if (cfg_getbool(cfg, "invert_ri")) invert |= INVERT_RI; eeprom_set_value(ftdi, INVERT, invert); + eeprom_set_value(ftdi, CHANNEL_A_DRIVER, DRIVER_VCP); + eeprom_set_value(ftdi, CHANNEL_B_DRIVER, DRIVER_VCP); + eeprom_set_value(ftdi, CHANNEL_C_DRIVER, DRIVER_VCP); + eeprom_set_value(ftdi, CHANNEL_D_DRIVER, DRIVER_VCP); + eeprom_set_value(ftdi, CHANNEL_A_RS485, 0); + eeprom_set_value(ftdi, CHANNEL_B_RS485, 0); + eeprom_set_value(ftdi, CHANNEL_C_RS485, 0); + eeprom_set_value(ftdi, CHANNEL_D_RS485, 0); + if (_erase > 0) { printf("FTDI erase eeprom: %d\n", ftdi_erase_eeprom(ftdi)); } size_check = ftdi_eeprom_build(ftdi); + eeprom_get_value(ftdi, CHIP_SIZE, &my_eeprom_size); if (size_check == -1) { @@ -323,15 +334,26 @@ int main(int argc, char *argv[]) { if (filename != NULL && strlen(filename) > 0) { - eeprom_buf = malloc(my_eeprom_size); + eeprom_buf = malloc(max_eeprom_size); FILE *fp = fopen(filename, "rb"); - fread(eeprom_buf, 1, my_eeprom_size, fp); + if (fp == NULL) + { + printf ("Can't open eeprom file %s.\n", filename); + exit (-1); + } + my_eeprom_size = fread(eeprom_buf, 1, max_eeprom_size, fp); fclose(fp); + if (my_eeprom_size < 128) + { + printf ("Can't read eeprom file %s.\n", filename); + exit (-1); + } ftdi_set_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); } } printf ("FTDI write eeprom: %d\n", ftdi_write_eeprom(ftdi)); + libusb_reset_device(ftdi->usb_dev); } // Write to file? @@ -346,6 +368,8 @@ int main(int argc, char *argv[]) else printf ("Writing to file: %s\n", filename); + if (eeprom_buf == NULL) + eeprom_buf = malloc(my_eeprom_size); ftdi_get_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); fwrite(eeprom_buf, my_eeprom_size, 1, fp);