diff options
| author | Keith Packard <keithp@keithp.com> | 2009-11-03 01:27:37 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2009-11-03 01:27:37 -0800 | 
| commit | 27ebaf8e13aed06bb1ea6e770f767495a02be6c5 (patch) | |
| tree | 5e685c8bf6b8e3fc158fa36c87ec60e88fb89006 | |
| parent | 1de322b960005c9a16051afa1881fadb00f4bcd6 (diff) | |
Add ability to dump eeprom data over radio link.
This adds a '-R' option to ao-dumplog to redirect the connection
through a USB attached TeleDongle over the radio link to a remote
TeleMetrum device.
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | ao-tools/ao-dumplog/ao-dumplog.c | 19 | ||||
| -rw-r--r-- | ao-tools/lib/cc-usb.c | 26 | ||||
| -rw-r--r-- | ao-tools/lib/cc-usb.h | 6 | 
3 files changed, 47 insertions, 4 deletions
| diff --git a/ao-tools/ao-dumplog/ao-dumplog.c b/ao-tools/ao-dumplog/ao-dumplog.c index 158a445b..4bfb7e51 100644 --- a/ao-tools/ao-dumplog/ao-dumplog.c +++ b/ao-tools/ao-dumplog/ao-dumplog.c @@ -28,12 +28,13 @@  static const struct option options[] = {  	{ .name = "tty", .has_arg = 1, .val = 'T' },  	{ .name = "device", .has_arg = 1, .val = 'D' }, +	{ .name = "remote", .has_arg = 1, .val = 'R' },  	{ 0, 0, 0, 0},  };  static void usage(char *program)  { -	fprintf(stderr, "usage: %s [--tty <tty-name>] [--device <device-name>\n", program); +	fprintf(stderr, "usage: %s [--tty <tty-name>] [--device <device-name>] [-R]\n", program);  	exit(1);  } @@ -80,8 +81,9 @@ main (int argc, char **argv)  	int		data[8];  	int		done;  	int		column; +	int		remote = 0; -	while ((c = getopt_long(argc, argv, "T:D:", options, NULL)) != -1) { +	while ((c = getopt_long(argc, argv, "T:D:R", options, NULL)) != -1) {  		switch (c) {  		case 'T':  			tty = optarg; @@ -89,13 +91,20 @@ main (int argc, char **argv)  		case 'D':  			device = optarg;  			break; +		case 'R': +			remote = 1; +			break;  		default:  			usage(argv[0]);  			break;  		}  	} -	if (!tty) -		tty = cc_usbdevs_find_by_arg(device, "TeleMetrum"); +	if (!tty) { +		if (remote) +			tty = cc_usbdevs_find_by_arg(device, "TeleDongle"); +		else +			tty = cc_usbdevs_find_by_arg(device, "TeleMetrum"); +	}  	if (!tty)  		tty = getenv("ALTOS_TTY");  	if (!tty) @@ -103,6 +112,8 @@ main (int argc, char **argv)  	cc = cc_usb_open(tty);  	if (!cc)  		exit(1); +	if (remote) +		cc_usb_open_remote(cc);  	/* send a 'version' command followed by a 'log' command */  	cc_usb_printf(cc, "v\n");  	out = NULL; diff --git a/ao-tools/lib/cc-usb.c b/ao-tools/lib/cc-usb.c index 80d9c04f..9b3b831f 100644 --- a/ao-tools/lib/cc-usb.c +++ b/ao-tools/lib/cc-usb.c @@ -53,6 +53,8 @@ struct cc_usb {  	struct cc_hex_read	hex_buf[CC_NUM_HEX_READ];  	int			hex_count; + +	int			remote;  };  #define NOT_HEX	0xff @@ -372,6 +374,28 @@ cc_usb_reset(struct cc_usb *cc)  	return 1;  } +void +cc_usb_open_remote(struct cc_usb *cc) +{ +	if (!cc->remote) { +		cc_usb_printf(cc, "p\nE 0\n"); +		do { +			cc->in_count = cc->in_pos = 0; +			_cc_usb_sync(cc, 100); +		} while (cc->in_count > 0); +		cc->remote = 1; +	} +} + +void +cc_usb_close_remote(struct cc_usb *cc) +{ +	if (cc->remote) { +		cc_usb_printf(cc, "~"); +		cc->remote = 0; +	} +} +  static struct termios	save_termios;  struct cc_usb * @@ -406,6 +430,8 @@ cc_usb_open(char *tty)  void  cc_usb_close(struct cc_usb *cc)  { +	cc_usb_close_remote(cc); +	cc_usb_sync(cc);  	tcsetattr(cc->fd, TCSAFLUSH, &save_termios);  	close (cc->fd);  	free (cc); diff --git a/ao-tools/lib/cc-usb.h b/ao-tools/lib/cc-usb.h index 7b6be350..627f1b5d 100644 --- a/ao-tools/lib/cc-usb.h +++ b/ao-tools/lib/cc-usb.h @@ -62,4 +62,10 @@ cc_usb_getline(struct cc_usb *cc, char *line, int max);  void  cc_usb_printf(struct cc_usb *cc, char *format, ...); +void +cc_usb_open_remote(struct cc_usb *cc); + +void +cc_usb_close_remote(struct cc_usb *cc); +  #endif /* _CC_USB_H_ */ | 
