From: Keith Packard Date: Tue, 3 Nov 2009 09:27:37 +0000 (-0800) Subject: Add ability to dump eeprom data over radio link. X-Git-Tag: debian/0.6+27+gb0d7e3f~19 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=27ebaf8e13aed06bb1ea6e770f767495a02be6c5 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 --- 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 ] [--device \n", program); + fprintf(stderr, "usage: %s [--tty ] [--device ] [-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_ */