Use --tty/-T on command line to specify target device
authorKeith Packard <keithp@keithp.com>
Tue, 18 Aug 2009 19:19:31 +0000 (12:19 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 18 Aug 2009 21:39:15 +0000 (14:39 -0700)
Also, use the ALTOS_TTY environment variable in all tools. Note that
the magic value of "BITBANG" switches the library to connecting
through a CP2103 instead.

Signed-off-by: Keith Packard <keithp@keithp.com>
15 files changed:
.gitignore
ao-tools/ao-bitbang/ao-bitbang.c
ao-tools/ao-dbg/ao-dbg-main.c
ao-tools/ao-dbg/ao-dbg-parse.c
ao-tools/ao-dbg/ao-dbg.1
ao-tools/ao-dbg/ao-dbg.h
ao-tools/ao-eeprom/ao-eeprom.c
ao-tools/ao-load/ao-load.c
ao-tools/ao-rawload/ao-rawload.c
ao-tools/lib/ccdbg-io.c
ao-tools/lib/ccdbg.h
ao-tools/lib/cp-usb-async.c
ao-view/aoview.glade
ao-view/aoview.h
ao-view/aoview_main.c

index 8b83dd3f97dd967473d77ada0699b2ee5bdb134a..b3d2d5627233bebf65cafa6fecde3c2341de37b9 100644 (file)
@@ -12,6 +12,7 @@
 *.rst
 *.sym
 .deps
+TAGS
 aclocal.m4
 src/ao_flight_test
 src/ao_gps_test
index 7090c9a364dbca0f35bf7f5370537464cefb5839..e8dff6bf784f10e0318246f5c81812177e505b86 100644 (file)
@@ -23,7 +23,7 @@ main (int argc, char **argv)
 {
        struct ccdbg    *dbg;
 
-       dbg = ccdbg_open();
+       dbg = ccdbg_open("BITBANG");
        if (!dbg)
                exit (1);
 
index 72249a6b0855402d65f5093eb925a893dc2ec239..f1e2c11199122a5ca4b1ca5b19a5c59fb7f839b7 100644 (file)
@@ -24,6 +24,7 @@
 #include <signal.h>
 #include <stdarg.h>
 #include <poll.h>
+#include <getopt.h>
 
 static int s51_port = 0;
 static char *cpu = "8051";
@@ -32,6 +33,7 @@ char *s51_prompt = "> ";
 struct ccdbg *s51_dbg;
 int s51_interrupted = 0;
 int s51_monitor = 0;
+char *s51_tty = NULL;
 
 static FILE *s51_input;
 static FILE *s51_output;
@@ -48,6 +50,11 @@ void s51_sigint()
        s51_interrupted = 1;
 }
 
+static const struct option options[] = {
+       { .name = "tty", .has_arg = 1, .val = 'T' },
+       { 0, 0, 0, 0 },
+};
+
 int
 main(int argc, char **argv)
 {
@@ -55,7 +62,7 @@ main(int argc, char **argv)
        char *endptr;
        struct sigvec vec, ovec;
 
-       while ((opt = getopt(argc, argv, "PVvHhmt:X:c:r:Z:s:S:p:")) != -1) {
+       while ((opt = getopt_long(argc, argv, "PVvHhmt:X:c:r:Z:s:S:p:T:", options, NULL)) != -1) {
                switch (opt) {
                case 't':
                        cpu = optarg;
@@ -104,6 +111,9 @@ main(int argc, char **argv)
                case 'm':
                        s51_monitor = 1;
                        break;
+               case 'T':
+                       s51_tty = optarg;
+                       break;
                }
        }
        if (s51_port) {
index 5db6c01c1e9dc2bbc3bb7fe3649537c52df63dfc..825d0e9c74972d72bf809ed69c0d42e0624af89f 100644 (file)
@@ -195,11 +195,9 @@ command_read (void)
        enum command_result result;
        struct command_function *func;
 
-       s51_dbg = ccdbg_open ();
-       if (!s51_dbg) {
-               perror("ccdbg_open");
+       s51_dbg = ccdbg_open (s51_tty);
+       if (!s51_dbg)
                exit(1);
-       }
        ccdbg_debug_mode(s51_dbg);
        ccdbg_halt(s51_dbg);
        s51_printf("Welcome to the non-simulated processor\n");
index f2f59a5286a6709fb96f4a66c5984cc381f3e680..1f544e5b199026459ea98d2db651ab108c49c26a 100644 (file)
@@ -34,6 +34,7 @@ s51 \- hex debugger for cc1111 processors
 [\-H]
 [\-h]
 [\-m]
+[\-T \fItty-device\fP]
 .SH DESCRIPTION
 .I s51
 connects to a cc1111 processor through a cp1203-based USB-to-serial
@@ -78,6 +79,9 @@ This should print a usage message, but does nothing useful currently.
 .IP "\-m"
 This option is not present in the original 8051 emulator, and causes s51 to
 dump all commands and replies that are received from and sent to sdcdb.
+.IP "\-T"
+This selects which tty device the debugger uses to communicate with
+the target device.
 .SH COMMANDS
 Once started, s51 connects to the cc1111 via the CP2103 using libusb2 and
 then reads and executes commands, either from stdin, or the nework
index f4dcce66d259b6ea20159daaddea9fa1acb879eb..c1789d10e30cfb930f380c7089763b05b51fecce 100644 (file)
@@ -22,6 +22,7 @@ extern char *s51_prompt;
 extern struct ccdbg *s51_dbg;
 extern int s51_interrupted;
 extern int s51_monitor;
+extern char *s51_tty;
 
 enum command_result {
        command_success, command_debug, command_syntax, command_interrupt, command_error,
index 399732d9f1fea9b9b7e230ac782c52943035d440..726cc22cafd0e0c1a8becbe4ef52ab03c5e1b547 100644 (file)
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
 #include "cc-usb.h"
 
 #define NUM_BLOCK      512
 
+static const struct option options[] = {
+       { .name = "tty", .has_arg = 1, .val = 'T' },
+       { 0, 0, 0, 0},
+};
+
+static void usage(char *program)
+{
+       fprintf(stderr, "usage: %s [--tty <tty-name>]\n", program);
+       exit(1);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -31,10 +44,26 @@ main (int argc, char **argv)
        uint8_t         *b;
        int             i, j;
        uint32_t        addr;
-       char            *tty;
+       char            *tty = NULL;
+       int             c;
 
-       tty = getenv("CCDBG_TTY");
+       while ((c = getopt_long(argc, argv, "T:", options, NULL)) != -1) {
+               switch (c) {
+               case 'T':
+                       tty = optarg;
+                       break;
+               default:
+                       usage(argv[0]);
+                       break;
+               }
+       }
+       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++) {
                cc_queue_read(cc, bytes, sizeof (bytes));
                cc_usb_printf(cc, "e %x\n", block);
index b84a88a68f25c9b07530d6bb5e7d5b99385174ef..c27fcbe9c4d191bcb3005f9e7d2964e2eaba3c00 100644 (file)
 #include <stdlib.h>
 #include <limits.h>
 #include <stdint.h>
+#include <unistd.h>
+#include <getopt.h>
 #include "ccdbg.h"
 
 #define AO_USB_DESC_STRING             3
 
-void
-usage(char *program)
-{
-       fprintf(stderr, "usage: %s <filename.ihx> <serial>\n", program);
-       exit(1);
-}
-
 struct sym {
        unsigned        addr;
        char            *name;
@@ -94,6 +89,17 @@ rewrite(struct hex_image *image, unsigned addr, char *data, int len)
        memcpy(image->data + addr - image->address, data, len);
 }
 
+static const struct option options[] = {
+       { .name = "tty", .has_arg = 1, .val = 'T' },
+       { 0, 0, 0, 0},
+};
+
+static void usage(char *program)
+{
+       fprintf(stderr, "usage: %s [--tty <tty-name>] file.ihx serial-number\n", program);
+       exit(1);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -102,12 +108,12 @@ main (int argc, char **argv)
        uint16_t        pc;
        struct hex_file *hex;
        struct hex_image *image;
-       char *filename;
-       FILE *file;
-       FILE *map;
-       char *serial_string;
-       unsigned int serial;
-       char *mapname, *dot;
+       char            *filename;
+       FILE            *file;
+       FILE            *map;
+       char            *serial_string;
+       unsigned int    serial;
+       char            *mapname, *dot;
        char            *serial_ucs2;
        int             serial_ucs2_len;
        char            serial_int[2];
@@ -115,8 +121,20 @@ main (int argc, char **argv)
        int             i;
        unsigned        usb_descriptors;
        int             string_num;
-
-       filename = argv[1];
+       char            *tty = NULL;
+       int             c;
+
+       while ((c = getopt_long(argc, argv, "T:", options, NULL)) != -1) {
+               switch (c) {
+               case 'T':
+                       tty = optarg;
+                       break;
+               default:
+                       usage(argv[0]);
+                       break;
+               }
+       }
+       filename = argv[optind];
        if (filename == NULL)
                usage(argv[0]);
        mapname = strdup(filename);
@@ -125,7 +143,7 @@ main (int argc, char **argv)
                usage(argv[0]);
        strcpy(dot, ".map");
 
-       serial_string = argv[2];
+       serial_string = argv[optind + 1];
        if (serial_string == NULL)
                usage(argv[0]);
 
@@ -160,7 +178,7 @@ main (int argc, char **argv)
 
        serial = strtoul(serial_string, NULL, 0);
        if (!serial)
-               usage(argv[0]);
+(argv[0]);
 
        serial_int[0] = serial & 0xff;
        serial_int[1] = (serial >> 8) & 0xff;
@@ -201,7 +219,7 @@ main (int argc, char **argv)
        if (!rewrite(image, usb_descriptors + 2 + image->address, serial_ucs2, serial_ucs2_len))
                usage(argv[0]);
 
-       dbg = ccdbg_open();
+       dbg = ccdbg_open(tty);
        if (!dbg)
                exit (1);
 
index 5f7708fd2f8c93ac4b1d8da40fefc0baaa71b2ca..1f1537b9f12d59eb49f6de87c7e96ed39e7e1e1f 100644 (file)
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
+#include <unistd.h>
+#include <getopt.h>
 #include "ccdbg.h"
 
+static const struct option options[] = {
+       { .name = "tty", .has_arg = 1, .val = 'T' },
+       { 0, 0, 0, 0},
+};
+
+static void usage(char *program)
+{
+       fprintf(stderr, "usage: %s [--tty <tty-name>] file.ihx\n", program);
+       exit(1);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -26,10 +39,22 @@ main (int argc, char **argv)
        uint16_t        pc;
        struct hex_file *hex;
        struct hex_image *image;
-       char *filename;
-       FILE *file;
+       char            *filename;
+       FILE            *file;
+       char            *tty = NULL;
+       int             c;
 
-       filename = argv[1];
+       while ((c = getopt_long(argc, argv, "T:", options, NULL)) != -1) {
+               switch (c) {
+               case 'T':
+                       tty = optarg;
+                       break;
+               default:
+                       usage(argv[0]);
+                       break;
+               }
+       }
+       filename = argv[optind];
        if (filename == NULL) {
                fprintf(stderr, "usage: %s <filename.ihx>\n", argv[0]);
                exit(1);
@@ -50,7 +75,7 @@ main (int argc, char **argv)
        }
 
        ccdbg_hex_file_free(hex);
-       dbg = ccdbg_open();
+       dbg = ccdbg_open(tty);
        if (!dbg)
                exit (1);
 
index 9c6693cdbe0ad5a0698cdcfc8b214761b877b148..d3f8727433fa40d90a68c753f803a27cc8f95241 100644 (file)
 #include "cc-bitbang.h"
 
 struct ccdbg *
-ccdbg_open(void)
+ccdbg_open(char *tty)
 {
        struct ccdbg *dbg;
-       char *tty;
 
        dbg = calloc(sizeof (struct ccdbg), 1);
        if (!dbg) {
                perror("calloc");
                return NULL;
        }
-       tty = getenv("CCDBG_TTY");
-       if (!tty || tty[0] == '/')
-               dbg->usb = cc_usb_open(tty);
-       if (!dbg->usb) {
+       if (!tty)
+               tty = getenv("ALTOS_TTY");
+       if (!tty)
+               tty="/dev/ttyACM0";
+
+       if (!strcmp(tty, "BITBANG")) {
                dbg->bb = cc_bitbang_open();
                if (!dbg->bb) {
                        free(dbg);
                        return NULL;
                }
+       } else {
+               dbg->usb = cc_usb_open(tty);
+               if (!dbg->usb) {
+                       free(dbg);
+                       return NULL;
+               }
        }
        return dbg;
 }
index 4a2e3b9f00c9222118f93386024a206d06ab5ffd..ca5961432d8926b649c916e7182e962221d88921 100644 (file)
@@ -258,7 +258,7 @@ ccdbg_hex_image_equal(struct hex_image *a, struct hex_image *b);
 
 /* ccdbg-io.c */
 struct ccdbg *
-ccdbg_open(void);
+ccdbg_open(char *tty);
 
 void
 ccdbg_close(struct ccdbg *dbg);
index 6539394b541a95ec4c2761d75d7a9c739e253048..3e75b5079a793a73c316ba1bc3e4c3e428dee5c3 100644 (file)
@@ -60,6 +60,7 @@ cp_usb_async_open(void)
                                                     0x10c4, 0xea60);
        cp->ack = -1;
        if (!cp->handle) {
+               fprintf(stderr, "Cannot find USB device 10c4:ea60\n");
                libusb_exit(cp->ctx);
                free(cp);
                return NULL;
index df08b83cdb472044545b9a3647480b1c126e159f..3481a7798996367616bb7ad879014b0de0f999e2 100644 (file)
@@ -651,7 +651,6 @@ You should have received a copy of the GNU General Public License along with AoV
     <property name="type_hint">normal</property>
     <property name="skip_taskbar_hint">True</property>
     <property name="transient_for">aoview</property>
-    <property name="has_separator">False</property>
     <property name="buttons">close</property>
     <property name="text">Saving EEPROM data as</property>
     <property name="secondary_text">&lt;filename&gt;</property>
index 62d0640b9a182b42101263cea45ff3a1936729b6..e8334e5b2693388117036e8ddca79f6f206626ae 100644 (file)
@@ -308,4 +308,8 @@ aoview_flite_start(void);
 void
 aoview_flite_stop(void);
 
+/* aoview_main.c */
+
+extern char *aoview_tty;
+
 #endif /* _AOVIEW_H_ */
index 36a82e0e1212dc3da35006dc8e42708266495c51..64c1c0273a90c2c5e857af4b53d5fa07077a41db 100644 (file)
@@ -32,29 +32,29 @@ static void destroy_event(GtkWidget *widget, gpointer data)
 }
 
 extern int _Xdebug;
+char *aoview_tty = NULL;
 
 int main(int argc, char **argv)
 {
        GladeXML *xml = NULL;
        GtkWidget *mainwindow;
-       char *device = NULL;
        GtkAboutDialog *about_dialog;
 
        static struct option long_options[] = {
-               { "device", 1, 0, 'd'},
+               { "tty", 1, 0, 'T'},
                { "sync", 0, 0, 's'},
                { 0, 0, 0, 0 }
        };
        for (;;) {
                int c, temp;
 
-               c = getopt_long_only(argc, argv, "sd:", long_options, &temp);
+               c = getopt_long_only(argc, argv, "sT:", long_options, &temp);
                if (c == -1)
                        break;
 
                switch (c) {
-               case 'd':
-                       device = optarg;
+               case 'T':
+                       aoview_tty = optarg;
                        break;
                case 's':
                        _Xdebug = 1;
@@ -102,6 +102,12 @@ int main(int argc, char **argv)
 
        aoview_label_init(xml);
 
+       if (aoview_tty) {
+               if (!aoview_monitor_connect(aoview_tty)) {
+                       perror(aoview_tty);
+                       exit(1);
+               }
+       }
        aoview_voice_speak("rocket flight monitor ready\n");
 
        gtk_main();