X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=ftdi_eeprom%2Fmain.c;h=151a7d38d1858351c268edd92e2124ce8809a36f;hp=03b24b3065f6d79bd17e61456787526ab520f88e;hb=785ddbca0e3c7e0563822c985a71077a391d3bda;hpb=d327f924c20f61561facfd9537fc495beb3fc315 diff --git a/ftdi_eeprom/main.c b/ftdi_eeprom/main.c index 03b24b3..151a7d3 100644 --- a/ftdi_eeprom/main.c +++ b/ftdi_eeprom/main.c @@ -16,7 +16,6 @@ /* TODO: - - Use new eeprom get/set functions - Remove 128 bytes limit - Merge Uwe's eeprom tool. Current features: - Init eeprom defaults based upon eeprom type @@ -115,6 +114,7 @@ int main(int argc, char *argv[]) CFG_BOOL("use_serial", cfg_false, 0), CFG_BOOL("change_usb_version", cfg_false, 0), CFG_INT("usb_version", 0, 0), + CFG_INT("default_pid", 0x6001, 0), CFG_INT("max_power", 0, 0), CFG_STR("manufacturer", "Acme Inc.", 0), CFG_STR("product", "USB Serial Converter", 0), @@ -143,7 +143,9 @@ int main(int argc, char *argv[]) normal variables */ int _read = 0, _erase = 0, _flash = 0; - unsigned char eeprom_buf[128]; // TODO: Kill this and look for other hardcoded places of 128 bytes + + int my_eeprom_size = 0; + unsigned char eeprom_buf[FTDI_MAX_EEPROM_SIZE]; char *filename; int size_check; int i, argc_filename; @@ -201,7 +203,9 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - ftdi_eeprom_initdefaults (ftdi, "Acme Inc.", "FTDI Chip", NULL); + ftdi_eeprom_initdefaults (ftdi, cfg_getstr(cfg, "manufacturer"), + cfg_getstr(cfg, "product"), + cfg_getstr(cfg, "serial")); eeprom_set_value(ftdi, VENDOR_ID, cfg_getint(cfg, "vendor_id")); eeprom_set_value(ftdi, PRODUCT_ID, cfg_getint(cfg, "product_id")); @@ -229,9 +233,6 @@ int main(int argc, char *argv[]) eeprom_set_value(ftdi, USB_VERSION, cfg_getint(cfg, "usb_version")); - ftdi->eeprom->manufacturer = cfg_getstr(cfg, "manufacturer"); - ftdi->eeprom->product = cfg_getstr(cfg, "product"); - ftdi->eeprom->serial = cfg_getstr(cfg, "serial"); 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)); eeprom_set_value(ftdi, CBUS_FUNCTION_1, str_to_cbus(cfg_getstr(cfg, "cbus1"), 13)); @@ -259,16 +260,19 @@ int main(int argc, char *argv[]) if (i == 0) { + 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", ftdi->eeprom->size); + printf("EEPROM size: %d\n", my_eeprom_size); } else { + int default_pid = cfg_getint(cfg, "default_pid"); printf("Unable to find FTDI devices under given vendor/product id: 0x%X/0x%X\n", vendor_id, product_id); printf("Error code: %d (%s)\n", i, ftdi_get_error_string(ftdi)); - printf("Retrying with default FTDI id.\n"); + printf("Retrying with default FTDI pid=%#04x.\n", default_pid); - i = ftdi_usb_open(ftdi, 0x0403, 0x6001); + i = ftdi_usb_open(ftdi, 0x0403, default_pid); if (i != 0) { printf("Error: %s\n", ftdi->error_str); @@ -279,7 +283,6 @@ int main(int argc, char *argv[]) if (_read > 0) { - printf("FTDI read eeprom: %d\n", ftdi_read_eeprom(ftdi)); ftdi_eeprom_decode(ftdi, 0); /* Debug output */ @@ -306,8 +309,10 @@ int main(int argc, char *argv[]) if (filename != NULL && strlen(filename) > 0) { + ftdi_get_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); + FILE *fp = fopen (filename, "wb"); - fwrite (eeprom_buf, 1, 128, fp); + fwrite (eeprom_buf, 1, my_eeprom_size, fp); fclose (fp); } else @@ -335,7 +340,7 @@ int main(int argc, char *argv[]) } else { - printf ("Used eeprom space: %d bytes\n", 128-size_check); + printf ("Used eeprom space: %d bytes\n", my_eeprom_size-size_check); } if (_flash > 0) @@ -345,15 +350,17 @@ int main(int argc, char *argv[]) if (filename != NULL && strlen(filename) > 0) { FILE *fp = fopen(filename, "rb"); - fread(eeprom_buf, 1, 128, fp); + fread(eeprom_buf, 1, my_eeprom_size, fp); fclose(fp); + + ftdi_set_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); } } printf ("FTDI write eeprom: %d\n", ftdi_write_eeprom(ftdi)); } // Write to file? - if (filename != NULL && strlen(filename) > 0) + if (filename != NULL && strlen(filename) > 0 && !cfg_getbool(cfg, "flash_raw")) { fp = fopen(filename, "w"); if (fp == NULL) @@ -364,7 +371,9 @@ int main(int argc, char *argv[]) else printf ("Writing to file: %s\n", filename); - fwrite(eeprom_buf, 128, 1, fp); + ftdi_get_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); + + fwrite(eeprom_buf, my_eeprom_size, 1, fp); fclose(fp); }