comparison ee2232/ee2232-prog.c @ 4:02ea5dbdf84b

ee2232-prog: input parsing implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 05 Apr 2018 22:30:38 +0000
parents
children a85b6b7398bc
comparison
equal deleted inserted replaced
3:ef43bbfa8d16 4:02ea5dbdf84b
1 #include <sys/types.h>
2 #include <ctype.h>
3 #include <string.h>
4 #include <strings.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <ftdi.h>
9
10 char *device_selector = "i:0x0403:0x6010";
11 unsigned eeprom_size = 64;
12 u_short eeprom[256];
13 int erase;
14
15 process_cmdline(argc, argv)
16 char **argv;
17 {
18 int c;
19 extern char *optarg;
20
21 while ((c = getopt(argc, argv, "d:et:")) != EOF) {
22 switch (c) {
23 case 'd':
24 device_selector = optarg;
25 continue;
26 case 'e':
27 erase = 1;
28 continue;
29 case 't':
30 if (!strcmp(optarg, "46"))
31 eeprom_size = 64;
32 else if (!strcmp(optarg, "56"))
33 eeprom_size = 128;
34 else if (!strcmp(optarg, "66"))
35 eeprom_size = 256;
36 else {
37 fprintf(stderr,
38 "error: -t option invalid value \"%s\"\n",
39 optarg);
40 exit(1);
41 }
42 continue;
43 default:
44 /* error msg already printed */
45 exit(1);
46 }
47 }
48 }
49
50 read_eeprom_from_stdin()
51 {
52 unsigned n, off;
53 int rc;
54
55 for (n = 0; n < eeprom_size; n += 8) {
56 rc = scanf("%x: %hx %hx %hx %hx %hx %hx %hx %hx", &off,
57 eeprom + n, eeprom + n + 1, eeprom + n + 2,
58 eeprom + n + 3, eeprom + n + 4, eeprom + n + 5,
59 eeprom + n + 6, eeprom + n + 7);
60 if (rc != 9 || off != n * 2) {
61 fprintf(stderr,
62 "ee2232-prog error: invalid input on stdin\n");
63 exit(1);
64 }
65 }
66 }
67
68 test_output()
69 {
70 unsigned n, col;
71
72 for (n = 0; n < eeprom_size; n++) {
73 col = n & 7;
74 if (col == 0)
75 printf("%02X:", n * 2);
76 printf(" %04X", eeprom[n]);
77 if (col == 7)
78 putchar('\n');
79 }
80 }
81
82 main(argc, argv)
83 char **argv;
84 {
85 struct ftdi_context ftdi;
86
87 process_cmdline(argc, argv);
88 if (erase)
89 memset(eeprom, 0xFF, eeprom_size * 2);
90 else
91 read_eeprom_from_stdin();
92 test_output();
93 exit(0);
94
95 }