diff options
| author | Keith Packard <keithp@keithp.com> | 2009-08-18 12:19:31 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2009-08-18 14:39:15 -0700 | 
| commit | 9b03d620722dc54630539afba40720c30de69b2d (patch) | |
| tree | 49450794239dfcfaab32190ccb7c81e2e71c2bbc | |
| parent | 7c790fe859dff062692964338091ffbbcdf63257 (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>
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | ao-tools/ao-bitbang/ao-bitbang.c | 2 | ||||
| -rw-r--r-- | ao-tools/ao-dbg/ao-dbg-main.c | 12 | ||||
| -rw-r--r-- | ao-tools/ao-dbg/ao-dbg-parse.c | 6 | ||||
| -rw-r--r-- | ao-tools/ao-dbg/ao-dbg.1 | 4 | ||||
| -rw-r--r-- | ao-tools/ao-dbg/ao-dbg.h | 1 | ||||
| -rw-r--r-- | ao-tools/ao-eeprom/ao-eeprom.c | 33 | ||||
| -rw-r--r-- | ao-tools/ao-load/ao-load.c | 54 | ||||
| -rw-r--r-- | ao-tools/ao-rawload/ao-rawload.c | 33 | ||||
| -rw-r--r-- | ao-tools/lib/ccdbg-io.c | 19 | ||||
| -rw-r--r-- | ao-tools/lib/ccdbg.h | 2 | ||||
| -rw-r--r-- | ao-tools/lib/cp-usb-async.c | 1 | ||||
| -rw-r--r-- | ao-view/aoview.glade | 1 | ||||
| -rw-r--r-- | ao-view/aoview.h | 4 | ||||
| -rw-r--r-- | ao-view/aoview_main.c | 16 | 
15 files changed, 146 insertions, 43 deletions
@@ -12,6 +12,7 @@  *.rst  *.sym  .deps +TAGS  aclocal.m4  src/ao_flight_test  src/ao_gps_test 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; diff --git a/ao-view/aoview.glade b/ao-view/aoview.glade index df08b83c..3481a779 100644 --- a/ao-view/aoview.glade +++ b/ao-view/aoview.glade @@ -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"><filename></property> diff --git a/ao-view/aoview.h b/ao-view/aoview.h index 62d0640b..e8334e5b 100644 --- a/ao-view/aoview.h +++ b/ao-view/aoview.h @@ -308,4 +308,8 @@ aoview_flite_start(void);  void  aoview_flite_stop(void); +/* aoview_main.c */ + +extern char *aoview_tty; +  #endif /* _AOVIEW_H_ */ diff --git a/ao-view/aoview_main.c b/ao-view/aoview_main.c index 36a82e0e..64c1c027 100644 --- a/ao-view/aoview_main.c +++ b/ao-view/aoview_main.c @@ -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();  | 
