diff options
| -rw-r--r-- | ao-tools/Makefile.am | 2 | ||||
| -rw-r--r-- | ao-tools/ao-eeprom/ao-eeprom.c | 20 | ||||
| -rw-r--r-- | ao-tools/lib/cc-usb.c | 12 | ||||
| -rw-r--r-- | ao-tools/lib/cc-usb.h | 2 | 
4 files changed, 25 insertions, 11 deletions
diff --git a/ao-tools/Makefile.am b/ao-tools/Makefile.am index 02b4785e..28e77b08 100644 --- a/ao-tools/Makefile.am +++ b/ao-tools/Makefile.am @@ -1 +1 @@ -SUBDIRS=lib ao-rawload ao-dbg ao-bitbang ao-eeprom ao-load ao-view +SUBDIRS=lib ao-rawload ao-dbg ao-bitbang ao-eeprom ao-list ao-load ao-view diff --git a/ao-tools/ao-eeprom/ao-eeprom.c b/ao-tools/ao-eeprom/ao-eeprom.c index 726cc22c..b865e298 100644 --- a/ao-tools/ao-eeprom/ao-eeprom.c +++ b/ao-tools/ao-eeprom/ao-eeprom.c @@ -21,17 +21,19 @@  #include <unistd.h>  #include <getopt.h>  #include "cc-usb.h" +#include "cc.h"  #define NUM_BLOCK	512  static const struct option options[] = {  	{ .name = "tty", .has_arg = 1, .val = 'T' }, +	{ .name = "device", .has_arg = 1, .val = 'D' },  	{ 0, 0, 0, 0},  };  static void usage(char *program)  { -	fprintf(stderr, "usage: %s [--tty <tty-name>]\n", program); +	fprintf(stderr, "usage: %s [--tty <tty-name>] [--device <device-name>\n", program);  	exit(1);  } @@ -40,35 +42,41 @@ main (int argc, char **argv)  {  	struct cc_usb	*cc;  	int		block; -	uint8_t		bytes[32 * (2 + 8)]; +	uint8_t		bytes[2 * 32 * (2 + 8)];  	uint8_t		*b;  	int		i, j;  	uint32_t	addr;  	char		*tty = NULL; +	char		*device = NULL;  	int		c; -	while ((c = getopt_long(argc, argv, "T:", options, NULL)) != -1) { +	while ((c = getopt_long(argc, argv, "T:D:", options, NULL)) != -1) {  		switch (c) {  		case 'T':  			tty = optarg;  			break; +		case 'D': +			device = optarg; +			break;  		default:  			usage(argv[0]);  			break;  		}  	}  	if (!tty) +		tty = cc_usbdevs_find_by_arg(device, "TeleMetrum"); +	if (!tty)  		tty = getenv("ALTOS_TTY");  	if (!tty)  		tty="/dev/ttyACM0";  	cc = cc_usb_open(tty);  	if (!cc)  		exit(1); -	for (block = 0; block < NUM_BLOCK; block++) { +	for (block = 0; block < NUM_BLOCK; block += 2) {  		cc_queue_read(cc, bytes, sizeof (bytes)); -		cc_usb_printf(cc, "e %x\n", block); +		cc_usb_printf(cc, "e %x\ne %x\n", block, block + 1);  		cc_usb_sync(cc); -		for (i = 0; i < 32; i++) { +		for (i = 0; i < 32 * 2; i++) {  			b = bytes + (i * 10);  			addr = block * 256 + i * 8;  			printf ("%06x", addr); diff --git a/ao-tools/lib/cc-usb.c b/ao-tools/lib/cc-usb.c index 81309983..17f05911 100644 --- a/ao-tools/lib/cc-usb.c +++ b/ao-tools/lib/cc-usb.c @@ -157,7 +157,8 @@ cc_usb_dbg(int indent, uint8_t *bytes, int len)  /*   * Flush pending writes, fill pending reads   */ -void + +int  cc_usb_sync(struct cc_usb *cc)  {  	int		ret; @@ -167,7 +168,7 @@ cc_usb_sync(struct cc_usb *cc)  	fds.fd = cc->fd;  	for (;;) {  		if (cc->read_count || cc->out_count) -			timeout = -1; +			timeout = 5000;  		else  			timeout = 0;  		fds.events = 0; @@ -176,8 +177,13 @@ cc_usb_sync(struct cc_usb *cc)  		if (cc->out_count)  			fds.events |= POLLOUT;  		ret = poll(&fds, 1, timeout); -		if (ret == 0) +		if (ret == 0) { +			if (timeout) { +				fprintf(stderr, "USB link timeout\n"); +				exit(1); +			}  			break; +		}  		if (ret < 0) {  			perror("poll");  			break; diff --git a/ao-tools/lib/cc-usb.h b/ao-tools/lib/cc-usb.h index d7acfbd2..9baabd95 100644 --- a/ao-tools/lib/cc-usb.h +++ b/ao-tools/lib/cc-usb.h @@ -47,7 +47,7 @@ cc_usb_debug_mode(struct cc_usb *cc);  int  cc_usb_reset(struct cc_usb *cc); -void +int  cc_usb_sync(struct cc_usb *cc);  void  | 
