X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=ftdi_eeprom%2Fmain.c;h=e3a09ba421fd499cadae30234666ec262a1e7d7f;hp=d1c4794c94eddec27c8324e883beaea0edebdd6f;hb=HEAD;hpb=23d7ac2beac7a4f903c25fd662c3ea59dca1898b diff --git a/ftdi_eeprom/main.c b/ftdi_eeprom/main.c index d1c4794..e3a09ba 100644 --- a/ftdi_eeprom/main.c +++ b/ftdi_eeprom/main.c @@ -2,8 +2,9 @@ main.c - description ------------------- begin : Mon Apr 7 12:05:22 CEST 2003 - copyright : (C) 2003-2014 by Intra2net AG and the libftdi developers + copyright : (C) 2003-2020 by Intra2net AG and the libftdi developers email : opensource@intra2net.com + SPDX-License-Identifier: GPL-2.0-only ***************************************************************************/ /*************************************************************************** @@ -65,6 +66,27 @@ static int parse_cbus(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *resul return -1; } +static int parse_group0_drive(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result) +{ + static const char* options[] = + { + "4MA", "8MA", "12MA", "16MA" + }; + + int i; + for (i=0; i\n", program); fprintf(stderr, "Valid Options:\n"); fprintf(stderr, "--device Specify device to open by description string. One of:\n"); - fprintf(stderr, " d:\n"); + fprintf(stderr, " d:\n"); fprintf(stderr, " i::\n"); fprintf(stderr, " i:::\n"); fprintf(stderr, " s:::\n"); @@ -189,6 +211,7 @@ static void usage(const char *program) fprintf(stderr, "--build-eeprom Build eeprom image\n"); fprintf(stderr, "--erase-eeprom Erase eeprom\n"); fprintf(stderr, "--flash-eeprom Flash eeprom\n"); + fprintf(stderr, "--verbose Print more information\n"); } int main(int argc, char *argv[]) @@ -200,6 +223,7 @@ int main(int argc, char *argv[]) { CFG_INT("vendor_id", 0, 0), CFG_INT("product_id", 0, 0), + CFG_INT("release_number", -1, 0), CFG_BOOL("self_powered", cfg_true, 0), CFG_BOOL("remote_wakeup", cfg_true, 0), CFG_BOOL("in_is_isochronous", cfg_false, 0), @@ -236,6 +260,7 @@ int main(int argc, char *argv[]) CFG_INT_CB("cbusx1", -1, 0, parse_cbusx), CFG_INT_CB("cbusx2", -1, 0, parse_cbusx), CFG_INT_CB("cbusx3", -1, 0, parse_cbusx), + CFG_INT_CB("group0_drive", -1, 0, parse_group0_drive), CFG_BOOL("invert_txd", cfg_false, 0), CFG_BOOL("invert_rxd", cfg_false, 0), CFG_BOOL("invert_rts", cfg_false, 0), @@ -283,6 +308,8 @@ int main(int argc, char *argv[]) int i; FILE *fp; + int verbose=0; + struct ftdi_context *ftdi = NULL; printf("\nFTDI eeprom generator v%s\n", EEPROM_VERSION_STRING); @@ -318,6 +345,10 @@ int main(int argc, char *argv[]) { command = COMMAND_BUILD; } + else if (!strcmp(argv[i], "--verbose")) + { + verbose = 1; + } else { usage(argv[0]); @@ -396,7 +427,7 @@ int main(int argc, char *argv[]) if (command == COMMAND_READ) { - ftdi_eeprom_decode(ftdi, 0 /* debug: 1 */); + ftdi_eeprom_decode(ftdi, verbose); eeprom_buf = malloc(my_eeprom_size); ftdi_get_eeprom_buf(ftdi, eeprom_buf, my_eeprom_size); @@ -429,6 +460,10 @@ int main(int argc, char *argv[]) eeprom_set_value(ftdi, VENDOR_ID, cfg_getint(cfg, "vendor_id")); eeprom_set_value(ftdi, PRODUCT_ID, cfg_getint(cfg, "product_id")); + if (cfg_getint(cfg, "release_number") != -1) { + eeprom_set_value(ftdi, RELEASE_NUMBER, cfg_getint(cfg, "release_number")); + } + eeprom_set_value(ftdi, SELF_POWERED, cfg_getbool(cfg, "self_powered")); eeprom_set_value(ftdi, REMOTE_WAKEUP, cfg_getbool(cfg, "remote_wakeup")); eeprom_set_value(ftdi, MAX_POWER, cfg_getint(cfg, "max_power")); @@ -479,6 +514,8 @@ int main(int argc, char *argv[]) eeprom_set_value(ftdi, CBUS_FUNCTION_8, cfg_getint(cfg, "cbush8")); if (cfg_getint(cfg, "cbush9") != -1) eeprom_set_value(ftdi, CBUS_FUNCTION_9, cfg_getint(cfg, "cbush9")); + if (cfg_getint(cfg, "group0_drive") != -1) + eeprom_set_value(ftdi, GROUP0_DRIVE, cfg_getint(cfg, "group0_drive")); } else if (ftdi->type == TYPE_230X) {