summaryrefslogtreecommitdiff
path: root/ao-tools
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-08-18 12:19:31 -0700
committerKeith Packard <keithp@keithp.com>2009-08-18 14:39:15 -0700
commit9b03d620722dc54630539afba40720c30de69b2d (patch)
tree49450794239dfcfaab32190ccb7c81e2e71c2bbc /ao-tools
parent7c790fe859dff062692964338091ffbbcdf63257 (diff)
Use --tty/-T on command line to specify target device
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>
Diffstat (limited to 'ao-tools')
-rw-r--r--ao-tools/ao-bitbang/ao-bitbang.c2
-rw-r--r--ao-tools/ao-dbg/ao-dbg-main.c12
-rw-r--r--ao-tools/ao-dbg/ao-dbg-parse.c6
-rw-r--r--ao-tools/ao-dbg/ao-dbg.14
-rw-r--r--ao-tools/ao-dbg/ao-dbg.h1
-rw-r--r--ao-tools/ao-eeprom/ao-eeprom.c33
-rw-r--r--ao-tools/ao-load/ao-load.c54
-rw-r--r--ao-tools/ao-rawload/ao-rawload.c33
-rw-r--r--ao-tools/lib/ccdbg-io.c19
-rw-r--r--ao-tools/lib/ccdbg.h2
-rw-r--r--ao-tools/lib/cp-usb-async.c1
11 files changed, 130 insertions, 37 deletions
diff --git a/ao-tools/ao-bitbang/ao-bitbang.c b/ao-tools/ao-bitbang/ao-bitbang.c
index 7090c9a3..e8dff6bf 100644
--- a/ao-tools/ao-bitbang/ao-bitbang.c
+++ b/ao-tools/ao-bitbang/ao-bitbang.c
@@ -23,7 +23,7 @@ main (int argc, char **argv)
{
struct ccdbg *dbg;
- dbg = ccdbg_open();
+ dbg = ccdbg_open("BITBANG");
if (!dbg)
exit (1);
diff --git a/ao-tools/ao-dbg/ao-dbg-main.c b/ao-tools/ao-dbg/ao-dbg-main.c
index 72249a6b..f1e2c111 100644
--- a/ao-tools/ao-dbg/ao-dbg-main.c
+++ b/ao-tools/ao-dbg/ao-dbg-main.c
@@ -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) {
diff --git a/ao-tools/ao-dbg/ao-dbg-parse.c b/ao-tools/ao-dbg/ao-dbg-parse.c
index 5db6c01c..825d0e9c 100644
--- a/ao-tools/ao-dbg/ao-dbg-parse.c
+++ b/ao-tools/ao-dbg/ao-dbg-parse.c
@@ -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");
diff --git a/ao-tools/ao-dbg/ao-dbg.1 b/ao-tools/ao-dbg/ao-dbg.1
index f2f59a52..1f544e5b 100644
--- a/ao-tools/ao-dbg/ao-dbg.1
+++ b/ao-tools/ao-dbg/ao-dbg.1
@@ -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
diff --git a/ao-tools/ao-dbg/ao-dbg.h b/ao-tools/ao-dbg/ao-dbg.h
index f4dcce66..c1789d10 100644
--- a/ao-tools/ao-dbg/ao-dbg.h
+++ b/ao-tools/ao-dbg/ao-dbg.h
@@ -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,
diff --git a/ao-tools/ao-eeprom/ao-eeprom.c b/ao-tools/ao-eeprom/ao-eeprom.c
index 399732d9..726cc22c 100644
--- a/ao-tools/ao-eeprom/ao-eeprom.c
+++ b/ao-tools/ao-eeprom/ao-eeprom.c
@@ -18,10 +18,23 @@
#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);
diff --git a/ao-tools/ao-load/ao-load.c b/ao-tools/ao-load/ao-load.c
index b84a88a6..c27fcbe9 100644
--- a/ao-tools/ao-load/ao-load.c
+++ b/ao-tools/ao-load/ao-load.c
@@ -19,17 +19,12 @@
#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);
diff --git a/ao-tools/ao-rawload/ao-rawload.c b/ao-tools/ao-rawload/ao-rawload.c
index 5f7708fd..1f1537b9 100644
--- a/ao-tools/ao-rawload/ao-rawload.c
+++ b/ao-tools/ao-rawload/ao-rawload.c
@@ -16,8 +16,21 @@
* 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);
diff --git a/ao-tools/lib/ccdbg-io.c b/ao-tools/lib/ccdbg-io.c
index 9c6693cd..d3f87274 100644
--- a/ao-tools/lib/ccdbg-io.c
+++ b/ao-tools/lib/ccdbg-io.c
@@ -22,25 +22,32 @@
#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;
}
diff --git a/ao-tools/lib/ccdbg.h b/ao-tools/lib/ccdbg.h
index 4a2e3b9f..ca596143 100644
--- a/ao-tools/lib/ccdbg.h
+++ b/ao-tools/lib/ccdbg.h
@@ -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);
diff --git a/ao-tools/lib/cp-usb-async.c b/ao-tools/lib/cp-usb-async.c
index 6539394b..3e75b507 100644
--- a/ao-tools/lib/cp-usb-async.c
+++ b/ao-tools/lib/cp-usb-async.c
@@ -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;