FreeCalypso > hg > fc-usbser-tools
changeset 64:ca2250b4833d
fteeprom: factor out EEPROM image reading functions
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 12 Sep 2023 20:17:07 +0000 |
parents | 230b9790046b |
children | 225dc1d9f2f1 |
files | fteeprom/Makefile fteeprom/fteeprom-prog.c fteeprom/read_eeprom_image.c |
diffstat | 3 files changed, 77 insertions(+), 62 deletions(-) [+] |
line wrap: on
line diff
--- a/fteeprom/Makefile Mon Sep 11 21:24:04 2023 +0000 +++ b/fteeprom/Makefile Tue Sep 12 20:17:07 2023 +0000 @@ -25,8 +25,8 @@ fteeprom-erase: fteeprom-erase.o ${LIBS} ${CC} ${CFLAGS} -o $@ $@.o ${LIBS} -lusb -fteeprom-prog: fteeprom-prog.o ${LIBS} - ${CC} ${CFLAGS} -o $@ $@.o ${LIBS} -lusb +fteeprom-prog: fteeprom-prog.o read_eeprom_image.o ${LIBS} + ${CC} ${CFLAGS} -o $@ $@.o read_eeprom_image.o ${LIBS} -lusb fteeprom-read: fteeprom-read.o ${LIBS} ${CC} ${CFLAGS} -o $@ $@.o ${LIBS} -lusb
--- a/fteeprom/fteeprom-prog.c Mon Sep 11 21:24:04 2023 +0000 +++ b/fteeprom/fteeprom-prog.c Tue Sep 12 20:17:07 2023 +0000 @@ -19,10 +19,11 @@ #include "../libuwrap/open_close.h" #include "../libftmini/eeprom_func.h" +extern unsigned eeprom_size; +extern u_short eeprom[256]; + char *device_selector, *input_filename; int detach_num, ft232r_mode; -unsigned eeprom_size; -u_short eeprom[256]; process_cmdline(argc, argv) char **argv; @@ -65,64 +66,6 @@ input_filename = argv[optind + 1]; } -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; {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fteeprom/read_eeprom_image.c Tue Sep 12 20:17:07 2023 +0000 @@ -0,0 +1,72 @@ +/* + * This module implements functions for reading FTDI EEPROM images + * from a file or from stdin. + */ + +#include <sys/types.h> +#include <ctype.h> +#include <string.h> +#include <strings.h> +#include <stdio.h> +#include <stdlib.h> + +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"); +}