# HG changeset patch # User Mychaela Falconia # Date 1694275616 0 # Node ID 49239efbdcc8048c0545b4edbdd3b5256866efdb # Parent 4bc0d3c01064c9f6d7650a1d8c47422994a7736f rm fteeprom/test/fteeprom-prog-bad When the magic command sequence for FT232R was added to libftdi-based fteeprom-prog, a version without this magic sequence was preserved in fteeprom-prog-bad. However, the new minilib version of fteeprom-prog operates without this magic sequence by default (as appropriate for FT2232D, FT2232H etc) and needs to be run with -r option to invoke FT232R-specific mode with the necessary magic. Anyone who needs fteeprom-prog-bad for study or experimentation can find it in freecalypso-hwlab Hg repository where it was originally developed. diff -r 4bc0d3c01064 -r 49239efbdcc8 .hgignore --- a/.hgignore Sat Sep 09 07:39:48 2023 +0000 +++ b/.hgignore Sat Sep 09 16:06:56 2023 +0000 @@ -9,4 +9,3 @@ ^fteeprom/fteeprom-erase$ ^fteeprom/fteeprom-prog$ ^fteeprom/fteeprom-read$ -^fteeprom/test/fteeprom-prog-bad$ diff -r 4bc0d3c01064 -r 49239efbdcc8 fteeprom/test/Makefile --- a/fteeprom/test/Makefile Sat Sep 09 07:39:48 2023 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -CC= gcc -CFLAGS= -O2 -PROGS= fteeprom-prog-bad - -all: ${PROGS} - -fteeprom-prog-bad: fteeprom-prog-bad.c - ${CC} ${CFLAGS} -o $@ $@.c -lftdi - -clean: - rm -f ${PROGS} *.o *errs *.out diff -r 4bc0d3c01064 -r 49239efbdcc8 fteeprom/test/fteeprom-prog-bad.c --- a/fteeprom/test/fteeprom-prog-bad.c Sat Sep 09 07:39:48 2023 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* - * This "bad" version of fteeprom-prog is being presented in order to show - * what happens on FT232R chips when a certain magic sequence is omitted. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned eeprom_size; -u_short eeprom[256]; - -read_eeprom_common(inf, filename_for_errs) - FILE *inf; - char *filename_for_errs; -{ - char linebuf[1024], *cp; - int lineno, rc; - unsigned ptr = 0, input_off; - - for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) { - for (cp = linebuf; isspace(*cp); cp++) - ; - if (*cp == '\0' || *cp == '#') - continue; - if (ptr >= 256) { - fprintf(stderr, - "%s line %d: maximum EEPROM size exceeded\n", - filename_for_errs, lineno); - exit(1); - } - rc = sscanf(linebuf, "%x: %hx %hx %hx %hx %hx %hx %hx %hx", - &input_off, eeprom + ptr, eeprom + ptr + 1, - eeprom + ptr + 2, eeprom + ptr + 3, - eeprom + ptr + 4, eeprom + ptr + 5, - eeprom + ptr + 6, eeprom + ptr + 7); - if (rc != 9 || input_off != ptr * 2) { - fprintf(stderr, "%s line %d: invalid input\n", - filename_for_errs, lineno); - exit(1); - } - ptr += 8; - } - if (ptr != 64 && ptr != 128 && ptr != 256) { - fprintf(stderr, "%s: not an EEPROM image of recognized size\n", - filename_for_errs); - exit(1); - } - eeprom_size = ptr; -} - -read_eeprom_from_file(filename) - char *filename; -{ - FILE *inf; - - inf = fopen(filename, "r"); - if (!inf) { - perror(filename); - exit(1); - } - read_eeprom_common(inf, filename); - fclose(inf); -} - -read_eeprom_from_stdin() -{ - read_eeprom_common(stdin, "stdin"); -} - -main(argc, argv) - char **argv; -{ - struct ftdi_context ftdi; - u_short modem_status; - unsigned n; - - if (argc < 2 || argc > 3) { - fprintf(stderr, "usage: %s device-selector [eeprom-image]\n", - argv[0]); - exit(1); - } - if (argv[2]) - read_eeprom_from_file(argv[2]); - else - read_eeprom_from_stdin(); - ftdi_init(&ftdi); - if (ftdi_usb_open_string(&ftdi, argv[1]) < 0) { - fprintf(stderr, "FTDI USB open failed: %s\n", ftdi.error_str); - exit(1); - } -#if 0 /* FT232R magic sequence omitted! */ - if (ftdi_usb_reset(&ftdi) < 0) { - fprintf(stderr, "ftdi_usb_reset() failed: %s\n", - ftdi.error_str); - exit(1); - } - if (ftdi_poll_modem_status(&ftdi, &modem_status) < 0) { - fprintf(stderr, "ftdi_poll_modem_status() failed: %s\n", - ftdi.error_str); - exit(1); - } - if (ftdi_set_latency_timer(&ftdi, 0x77) < 0) { - fprintf(stderr, "ftdi_set_latency_timer() failed: %s\n", - ftdi.error_str); - exit(1); - } -#endif - for (n = 0; n < eeprom_size; n++) { - if (ftdi_write_eeprom_location(&ftdi, n, eeprom[n]) < 0) { - fprintf(stderr, "EEPROM write error: %s\n", - ftdi.error_str); - exit(1); - } - } - ftdi_usb_close(&ftdi); - exit(0); -}