FreeCalypso > hg > fc-usbser-tools
comparison fteeprom/fteeprom-prog.c @ 20:43b8e88dae02
fteeprom-prog: convert to new local libs
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 08 Sep 2023 22:40:14 +0000 |
parents | 11b8a30333b3 |
children | 7e6dcceb5ee8 |
comparison
equal
deleted
inserted
replaced
19:d420375243c9 | 20:43b8e88dae02 |
---|---|
1 /* | |
2 * This program connects to an FTDI chip via libusb and programs its EEPROM | |
3 * with a raw hex image read from stdin or from a backup file. | |
4 * | |
5 * The present version has been converted to use our local libraries | |
6 * (libftmini and libuwrap) instead of libftdi - thus the external dependency | |
7 * is only libusb. | |
8 */ | |
9 | |
1 #include <sys/types.h> | 10 #include <sys/types.h> |
2 #include <ctype.h> | 11 #include <ctype.h> |
3 #include <string.h> | 12 #include <string.h> |
4 #include <strings.h> | 13 #include <strings.h> |
5 #include <stdio.h> | 14 #include <stdio.h> |
6 #include <stdlib.h> | 15 #include <stdlib.h> |
7 #include <unistd.h> | 16 #include <unistd.h> |
8 #include <ftdi.h> | 17 #include <usb.h> |
18 #include "../libuwrap/find_dev.h" | |
19 #include "../libuwrap/open_close.h" | |
20 #include "../libftmini/eeprom_func.h" | |
9 | 21 |
10 unsigned eeprom_size; | 22 unsigned eeprom_size; |
11 u_short eeprom[256]; | 23 u_short eeprom[256]; |
12 | 24 |
13 read_eeprom_common(inf, filename_for_errs) | 25 read_eeprom_common(inf, filename_for_errs) |
69 } | 81 } |
70 | 82 |
71 main(argc, argv) | 83 main(argc, argv) |
72 char **argv; | 84 char **argv; |
73 { | 85 { |
74 struct ftdi_context ftdi; | 86 struct usb_device *dev; |
75 u_short modem_status; | 87 usb_dev_handle *usbh; |
76 unsigned n; | 88 unsigned n; |
77 | 89 |
78 if (argc < 2 || argc > 3) { | 90 if (argc < 2 || argc > 3) { |
79 fprintf(stderr, "usage: %s device-selector [eeprom-image]\n", | 91 fprintf(stderr, "usage: %s device-selector [eeprom-image]\n", |
80 argv[0]); | 92 argv[0]); |
82 } | 94 } |
83 if (argv[2]) | 95 if (argv[2]) |
84 read_eeprom_from_file(argv[2]); | 96 read_eeprom_from_file(argv[2]); |
85 else | 97 else |
86 read_eeprom_from_stdin(); | 98 read_eeprom_from_stdin(); |
87 ftdi_init(&ftdi); | 99 dev = find_usbdev_by_desc_string(argv[1]); |
88 if (ftdi_usb_open_string(&ftdi, argv[1]) < 0) { | 100 if (!dev) { |
89 fprintf(stderr, "FTDI USB open failed: %s\n", ftdi.error_str); | 101 fprintf(stderr, "error: specified USB device not found\n"); |
90 exit(1); | 102 exit(1); |
91 } | 103 } |
92 /* magic sequence apparently required for FT232R */ | 104 usbh = usbwrap_open_dev(dev, 1); |
93 if (ftdi_usb_reset(&ftdi) < 0) { | 105 /* FIXME: reimplement FT232R magic sequence */ |
94 fprintf(stderr, "ftdi_usb_reset() failed: %s\n", | 106 for (n = 0; n < eeprom_size; n++) |
95 ftdi.error_str); | 107 ftmini_write_eeprom_loc(usbh, n, eeprom[n]); |
96 exit(1); | 108 usbwrap_close_dev(usbh); |
97 } | |
98 if (ftdi_poll_modem_status(&ftdi, &modem_status) < 0) { | |
99 fprintf(stderr, "ftdi_poll_modem_status() failed: %s\n", | |
100 ftdi.error_str); | |
101 exit(1); | |
102 } | |
103 if (ftdi_set_latency_timer(&ftdi, 0x77) < 0) { | |
104 fprintf(stderr, "ftdi_set_latency_timer() failed: %s\n", | |
105 ftdi.error_str); | |
106 exit(1); | |
107 } | |
108 for (n = 0; n < eeprom_size; n++) { | |
109 if (ftdi_write_eeprom_location(&ftdi, n, eeprom[n]) < 0) { | |
110 fprintf(stderr, "EEPROM write error: %s\n", | |
111 ftdi.error_str); | |
112 exit(1); | |
113 } | |
114 } | |
115 ftdi_usb_close(&ftdi); | |
116 exit(0); | 109 exit(0); |
117 } | 110 } |