examples/eeprom.c: Remove unused variable
[libftdi] / examples / eeprom.c
1 /* LIBFTDI EEPROM access example
2
3    This program is distributed under the GPL, version 2
4 */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <ctype.h>
10 #include <unistd.h>
11 #include <getopt.h>
12 #include <ftdi.h>
13
14 int main(int argc, char **argv)
15 {
16     struct ftdi_context *ftdi;
17     unsigned char *buf;
18     int f, i, j;
19     int vid = 0x0403;
20     int pid = 0x6010;
21     char const *desc    = 0;
22     char const *serial  = 0;
23     int erase = 0;
24     int use_defaults = 0;
25     int large_chip = 0;
26     int do_write = 0;
27     int size;
28
29     if ((ftdi = ftdi_new()) == 0)
30     {
31        fprintf(stderr, "Failed to allocate ftdi structure :%s \n", 
32                    ftdi_get_error_string(ftdi));
33         return EXIT_FAILURE;
34     }
35
36     while ((i = getopt(argc, argv, "d::ev:p:l:P:S:w")) != -1)
37     {
38         switch (i)
39         {
40         case 'd':
41             use_defaults = 1;
42             if(optarg)
43                 large_chip = 0x66; 
44             break;
45         case 'e':
46             erase = 1;
47             break;
48         case 'v':
49                 vid = strtoul(optarg, NULL, 0);
50                 break;
51         case 'p':
52                 pid = strtoul(optarg, NULL, 0);
53                 break;
54         case 'P':
55                 desc = optarg;
56                 break;
57         case 'S':
58                 serial = optarg;
59                 break;
60         case 'w':
61                 do_write  = 1;
62                 break;
63         default:
64                 fprintf(stderr, "usage: %s [options]\n", *argv);
65                 fprintf(stderr, "\t-d[num] Work with default valuesfor 128 Byte "
66                         "EEPROM or for 256 Byte EEPROm if some [num] is given\n");
67                 fprintf(stderr, "\t-e erase\n");
68                 fprintf(stderr, "\t-v verbose decoding\n");
69                 fprintf(stderr, "\t-p <number> Search for device with PID == number\n");
70                 fprintf(stderr, "\t-v <number> Search for device with VID == number\n");
71                 fprintf(stderr, "\t-P <string? Search for device with given "
72                         "product description\n");
73                 fprintf(stderr, "\t-S <string? Search for device with given "
74                         "serial number\n");
75                 exit(-1);
76         }
77     }
78
79     // Select first interface
80     ftdi_set_interface(ftdi, INTERFACE_ANY);
81
82     // Open device
83     f = ftdi_usb_open_desc(ftdi, vid, pid, desc, serial);
84     if (f < 0)
85     {
86         fprintf(stderr, "Device VID 0x%04x PID 0x%04x", vid, pid);
87         if(desc)
88             fprintf(stderr, " Desc %s", desc);
89         if(serial)
90             fprintf(stderr, " Serial %s", serial);
91         fprintf(stderr, "\n");
92         fprintf(stderr, "unable to open ftdi device: %d (%s)\n", 
93                 f, ftdi_get_error_string(ftdi));
94
95         exit(-1);
96     }
97
98     if (erase)
99     {
100         f = ftdi_erase_eeprom(ftdi);
101         if (f < 0)
102         {
103             fprintf(stderr, "Erase failed: %s", 
104                     ftdi_get_error_string(ftdi));
105             return -2;
106         }
107         if (ftdi->eeprom->chip == -1)
108             fprintf(stderr, "No EEPROM\n");
109         else if (ftdi->eeprom->chip == 0)
110             fprintf(stderr, "Internal EEPROM\n");
111         else
112             fprintf(stderr, "Found 93x%02x\n",ftdi->eeprom->chip);
113         return 0;
114     }        
115
116     if(use_defaults)
117     {
118         ftdi_eeprom_initdefaults(ftdi, "IKDA", "FTDIJTAF", "0001");
119         ftdi->eeprom->max_power = 500;
120         f=(ftdi_eeprom_build(ftdi));
121         if (f < 0)
122         {
123             fprintf(stderr, "ftdi_eeprom_build: %d (%s)\n", 
124                     f, ftdi_get_error_string(ftdi));
125             exit(-1);
126         }
127     }
128     else if(do_write)
129     {
130         ftdi_eeprom_initdefaults(ftdi, "IKDA", "FTDIJTAG", "0001");
131         ftdi->eeprom->max_power = 500;
132         f = ftdi_erase_eeprom(ftdi);
133         if (ftdi->eeprom->chip == -1)
134             fprintf(stderr, "No EEPROM\n");
135         else if (ftdi->eeprom->chip == 0)
136             fprintf(stderr, "Internal EEPROM\n");
137         else
138             fprintf(stderr, "Found 93x%02x\n",ftdi->eeprom->chip);
139         f=(ftdi_eeprom_build(ftdi));
140         if (f < 0)
141         {
142             fprintf(stderr, "Erase failed: %s", 
143                     ftdi_get_error_string(ftdi));
144             return -2;
145         }
146         f = ftdi_write_eeprom(ftdi);
147         {
148             fprintf(stderr, "ftdi_eeprom_decode: %d (%s)\n", 
149                     f, ftdi_get_error_string(ftdi));
150             exit(-1);
151         }
152         f = ftdi_read_eeprom(ftdi);
153         if (f < 0)
154         {
155             fprintf(stderr, "ftdi_read_eeprom: %d (%s)\n", 
156                     f, ftdi_get_error_string(ftdi));
157             exit(-1);
158         }
159      }
160     else
161     {
162         f = ftdi_read_eeprom(ftdi);
163         if (f < 0)
164         {
165             fprintf(stderr, "ftdi_read_eeprom: %d (%s)\n", 
166                     f, ftdi_get_error_string(ftdi));
167             exit(-1);
168         }
169     }
170
171
172     fprintf(stderr, "Chip type %d ftdi_eeprom_size: %d\n", ftdi->type, ftdi->eeprom->size);
173     buf = ftdi->eeprom->buf;
174     if (ftdi->type == TYPE_R)
175         size = 0xa0;
176     else
177         size = ftdi->eeprom->size;
178     for(i=0; i < size; i += 16)
179     {
180         fprintf(stdout,"0x%03x:", i);
181         
182         for (j = 0; j< 8; j++)
183             fprintf(stdout," %02x", buf[i+j]);
184         fprintf(stdout," ");
185         for (; j< 16; j++)
186             fprintf(stdout," %02x", buf[i+j]);
187         fprintf(stdout," ");
188         for (j = 0; j< 8; j++)
189             fprintf(stdout,"%c", isprint(buf[i+j])?buf[i+j]:'.');
190         fprintf(stdout," ");
191         for (; j< 16; j++)
192             fprintf(stdout,"%c", isprint(buf[i+j])?buf[i+j]:'.');
193         fprintf(stdout,"\n");
194     }
195
196     f = ftdi_eeprom_decode(ftdi, 1);
197     if (f < 0)
198     {
199         fprintf(stderr, "ftdi_eeprom_decode: %d (%s)\n", 
200                 f, ftdi_get_error_string(ftdi));
201         exit(-1);
202     }
203
204     ftdi_usb_close(ftdi);
205     ftdi_free(ftdi);
206     return 0;
207 }