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 |