examples/eeprom.c: Remove unused variable
[libftdi] / examples / eeprom.c
CommitLineData
2db3a766
UB
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
14int main(int argc, char **argv)
15{
f38b0866 16 struct ftdi_context *ftdi;
a35aa9bd 17 unsigned char *buf;
2db3a766
UB
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;
4fb2ebbb 24 int use_defaults = 0;
2db3a766 25 int large_chip = 0;
0091182e 26 int do_write = 0;
a35aa9bd 27 int size;
2db3a766 28
f38b0866
UB
29 if ((ftdi = ftdi_new()) == 0)
30 {
a35aa9bd
UB
31 fprintf(stderr, "Failed to allocate ftdi structure :%s \n",
32 ftdi_get_error_string(ftdi));
f38b0866
UB
33 return EXIT_FAILURE;
34 }
35
0091182e 36 while ((i = getopt(argc, argv, "d::ev:p:l:P:S:w")) != -1)
2db3a766
UB
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;
0091182e
UB
60 case 'w':
61 do_write = 1;
62 break;
2db3a766
UB
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
2db3a766 79 // Select first interface
f38b0866 80 ftdi_set_interface(ftdi, INTERFACE_ANY);
2db3a766
UB
81
82 // Open device
f38b0866 83 f = ftdi_usb_open_desc(ftdi, vid, pid, desc, serial);
2db3a766
UB
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",
f38b0866 93 f, ftdi_get_error_string(ftdi));
2db3a766
UB
94
95 exit(-1);
96 }
97
98 if (erase)
99 {
f38b0866 100 f = ftdi_erase_eeprom(ftdi);
2db3a766
UB
101 if (f < 0)
102 {
103 fprintf(stderr, "Erase failed: %s",
f38b0866 104 ftdi_get_error_string(ftdi));
2db3a766
UB
105 return -2;
106 }
f38b0866 107 if (ftdi->eeprom->chip == -1)
2db3a766 108 fprintf(stderr, "No EEPROM\n");
f38b0866 109 else if (ftdi->eeprom->chip == 0)
2db3a766
UB
110 fprintf(stderr, "Internal EEPROM\n");
111 else
f38b0866 112 fprintf(stderr, "Found 93x%02x\n",ftdi->eeprom->chip);
2db3a766
UB
113 return 0;
114 }
115
2db3a766
UB
116 if(use_defaults)
117 {
0091182e
UB
118 ftdi_eeprom_initdefaults(ftdi, "IKDA", "FTDIJTAF", "0001");
119 ftdi->eeprom->max_power = 500;
a35aa9bd 120 f=(ftdi_eeprom_build(ftdi));
2db3a766
UB
121 if (f < 0)
122 {
123 fprintf(stderr, "ftdi_eeprom_build: %d (%s)\n",
f38b0866 124 f, ftdi_get_error_string(ftdi));
2db3a766
UB
125 exit(-1);
126 }
127 }
0091182e
UB
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 }
2db3a766
UB
160 else
161 {
a35aa9bd 162 f = ftdi_read_eeprom(ftdi);
2db3a766
UB
163 if (f < 0)
164 {
165 fprintf(stderr, "ftdi_read_eeprom: %d (%s)\n",
f38b0866 166 f, ftdi_get_error_string(ftdi));
2db3a766
UB
167 exit(-1);
168 }
169 }
0091182e
UB
170
171
f38b0866 172 fprintf(stderr, "Chip type %d ftdi_eeprom_size: %d\n", ftdi->type, ftdi->eeprom->size);
a35aa9bd
UB
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)
2db3a766
UB
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
a35aa9bd 196 f = ftdi_eeprom_decode(ftdi, 1);
0091182e 197 if (f < 0)
2db3a766
UB
198 {
199 fprintf(stderr, "ftdi_eeprom_decode: %d (%s)\n",
f38b0866 200 f, ftdi_get_error_string(ftdi));
2db3a766
UB
201 exit(-1);
202 }
2db3a766 203
f38b0866
UB
204 ftdi_usb_close(ftdi);
205 ftdi_free(ftdi);
0091182e 206 return 0;
2db3a766 207}