summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-11-03 01:27:37 -0800
committerKeith Packard <keithp@keithp.com>2009-11-03 01:27:37 -0800
commit27ebaf8e13aed06bb1ea6e770f767495a02be6c5 (patch)
tree5e685c8bf6b8e3fc158fa36c87ec60e88fb89006
parent1de322b960005c9a16051afa1881fadb00f4bcd6 (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.c19
-rw-r--r--ao-tools/lib/cc-usb.c26
-rw-r--r--ao-tools/lib/cc-usb.h6
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_ */