diff options
author | Bdale Garbee <bdale@gag.com> | 2009-08-18 18:09:38 -0600 |
---|---|---|
committer | Bdale Garbee <bdale@gag.com> | 2009-08-18 18:09:38 -0600 |
commit | 4685fc541466afbeefc151bcb64cd054739c048b (patch) | |
tree | d7e0f521bd51897a59dd9c355d74218132da4b75 /ao-tools | |
parent | 1c2a0b6653623b689d68d7349a6b2dce3e20a4a6 (diff) | |
parent | c29275b72438637d46d7a50742882d2736eb176a (diff) |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Conflicts:
ao-tools/ao-bitbang/Makefile.am
ao-tools/ao-eeprom/Makefile.am
ao-tools/ao-load/Makefile.am
ao-tools/ao-load/ao-load.c
ao-tools/ao-rawload/Makefile.am
Diffstat (limited to 'ao-tools')
-rw-r--r-- | ao-tools/ao-bitbang/Makefile.am | 2 | ||||
-rw-r--r-- | ao-tools/ao-bitbang/ao-bitbang.1 | 196 | ||||
-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 | 54 | ||||
-rw-r--r-- | ao-tools/ao-dbg/ao-dbg.h | 1 | ||||
-rw-r--r-- | ao-tools/ao-eeprom/Makefile.am | 2 | ||||
-rw-r--r-- | ao-tools/ao-eeprom/ao-eeprom.1 | 33 | ||||
-rw-r--r-- | ao-tools/ao-eeprom/ao-eeprom.c | 33 | ||||
-rw-r--r-- | ao-tools/ao-load/Makefile.am | 2 | ||||
-rw-r--r-- | ao-tools/ao-load/ao-load.1 | 38 | ||||
-rw-r--r-- | ao-tools/ao-load/ao-load.c | 55 | ||||
-rw-r--r-- | ao-tools/ao-rawload/Makefile.am | 2 | ||||
-rw-r--r-- | ao-tools/ao-rawload/ao-rawload.1 | 36 | ||||
-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 |
19 files changed, 468 insertions, 61 deletions
diff --git a/ao-tools/ao-bitbang/Makefile.am b/ao-tools/ao-bitbang/Makefile.am index f094c7bd..f01cddd4 100644 --- a/ao-tools/ao-bitbang/Makefile.am +++ b/ao-tools/ao-bitbang/Makefile.am @@ -8,3 +8,5 @@ ao_bitbang_DEPENDENCIES = $(AO_BITBANG_LIBS) ao_bitbang_LDADD=$(AO_BITBANG_LIBS) $(LIBUSB_LIBS) ao_bitbang_SOURCES = ao-bitbang.c + +man_MANS=ao-bitbang.1 diff --git a/ao-tools/ao-bitbang/ao-bitbang.1 b/ao-tools/ao-bitbang/ao-bitbang.1 new file mode 100644 index 00000000..44eea1ec --- /dev/null +++ b/ao-tools/ao-bitbang/ao-bitbang.1 @@ -0,0 +1,196 @@ +.\" +.\" Copyright © 2009 Keith Packard <keithp@keithp.com> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License along +.\" with this program; if not, write to the Free Software Foundation, Inc., +.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +.\" +.\" +.TH AO-BITBANG 1 "ao-bitbang" "" +.SH NAME +ao-bitbang \- Low-level cc1111 interface diagnostic tool +.SH SYNOPSIS +.B "ao-bitbang" +.SH DESCRIPTION +.I ao-bitbang +connects through a CP2103 usb-to-serial converter and uses the GPIO +pins to communicate with the debug port on a cc1111 device. It +provides raw access to the debug pins to help debug the lowest level +communication path. +.SH USAGE +.I ao-bitbang +reads a sequence of bit manipulations from stdin, sends them to the +device and reports status on stdout. +.P +Each line on stdin should contain a single letter command for each of +the three debug lines on the cc1111 -- clock, data and reset. Each bit +can be in one of three states -- on (C, D or R), off (.) or tri-state +(-) for input. Empty lines, or lines starting with '#' are +ignored. Anything beyond the last bit in a line is also ignored. The +bits must be listed in the correct order, and the 'on' values must +match the desired bit. +.SH EXAMPLE +.IP "Reset the target device" +# reset +.br +C D R +.br +C D R +.br +C D R +.br +C D R +.IP "Get Chip ID" +# +.br +# Debug mode - drive RESET_N low for two clock cycles +.br +# +.br +C D R +.br +. D . +.br +C D . +.br +. D . +.br +C D . +.br +. D R +.br + +.br +# +.br +# GET_CHIP_ID +.br + +.br +C . R 0 +.br +. . R +.br +C D R 1 +.br +. D R +.br +C D R 1 +.br +. D R +.br +C . R 0 +.br +. . R +.br + +.br +C D R 1 +.br +. D R +.br +C . R 0 +.br +. . R +.br +C . R 0 +.br +. . R +.br +C . R 0 +.br +. . R +.br + +.br +# +.br +# start reading again +.br + +.br +C D R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br + +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br + +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br + +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br +C - R +.br +. - R +.br + +.br +C D R +.SH AUTHOR +Keith Packard 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..a850c454 100644 --- a/ao-tools/ao-dbg/ao-dbg.1 +++ b/ao-tools/ao-dbg/ao-dbg.1 @@ -16,11 +16,11 @@ .\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. .\" .\" -.TH S51 1 "s51" "" +.TH AO-DBG 1 "ao-dbg" "" .SH NAME -s51 \- hex debugger for cc1111 processors +ao-dbg \- hex debugger for cc1111 processors .SH SYNOPSIS -.B "s51" +.B "ao-dbg" [\-t \fIcpu-type\fP] [\-X \fIfrequency\fP] [\-c] @@ -34,14 +34,16 @@ 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 -converter board, using the GPIO pins available on that chip. It provides an -interface compatible with the 8051 emulator of the same name (s51), but -communicating with the real chip instead of an emulation. Using a modified -version of the SDCC debugger (sdcdb), you can control program execution -on the target machine at source-level. +.I ao-dbg +connects to a cc1111 processor through either a suitable cc1111 board +or a cp2103 usb to serial converter board, using the GPIO pins +available on that chip. It provides an interface compatible with the +8051 emulator from sdcc called s51, but communicating with the real +chip instead of an emulation. Using a modified version of the SDCC +debugger (sdcdb), you can control program execution on the target +machine at source-level. .SH OPTIONS The command line options are designed to be compatible with the 8051 @@ -64,9 +66,9 @@ The emulator and sdcdb communicate through a network socket. This option switches the debugger from communicating through stdin/stdout to listening on a specific network port instead. Once a connection is made, the debugger continues on, using that network port for command input and output. The -debugger uses port 9756, and attempts to connect before launching s51, so if -s51 is listening on this port before sdcdb is started, sdcdb will end up -talking to the existing s51 instance. That's often useful for debugging s51 +debugger uses port 9756, and attempts to connect before launching ao-dbg, so if +ao-dbg is listening on this port before sdcdb is started, sdcdb will end up +talking to the existing ao-dbg instance. That's often useful for debugging ao-dbg itself. .IP "\-p \fIprompt\fP" This sets the command prompt to the specified string. @@ -76,14 +78,19 @@ sdcdb. .IP "\-h" 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 +This option is not present in the original 8051 emulator, and causes ao-dbg 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. The special name 'BITBANG' directs ao-dbg to use +the cp2103 connection, otherwise this should be a usb serial port +connected to a suitable cc1111 debug node. .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 -connection to sdcdb. +Once started, ao-dbg connects to the cc1111 and then reads and +executes commands, either from stdin, or the nework connection to +sdcdb. .PP -Unlike the command line, s51 contains built-in help for each of these +Unlike the command line, ao-dbg contains built-in help for each of these commands, via the 'help' command. Most of the commands are available in a long form and a single character short form. Below, the short form follows the long form after a comma. @@ -155,13 +162,12 @@ the original 8051 emulator. While the original purpose for this program was to connect the source debugger with the hardware, it can also be used as a low-level hex debugger all on its own. In particular, all of the cc1111 peripherals can be -manipulated directly from the s51 command line. -.IP "Starting s51" -If the CP2103 is plugged in, and the CC1111 is connected correctly, the -\'s51\' command itself should connect to the device without trouble. -Note that the CP2103 must have the GPIO pins configured correctly as well. +manipulated directly from the ao-dbg command line. +.IP "Starting ao-dbg" +First ensure that the target cc1111 device and intermediate cp2103 or +cc111 board are all hooked up correctly. .IP -$ s51 +$ ao-dbg .br Welcome to the non-simulated processor .br 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/Makefile.am b/ao-tools/ao-eeprom/Makefile.am index 587acee7..efeed976 100644 --- a/ao-tools/ao-eeprom/Makefile.am +++ b/ao-tools/ao-eeprom/Makefile.am @@ -8,3 +8,5 @@ ao_eeprom_DEPENDENCIES = $(AO_EEPROM_LIBS) ao_eeprom_LDADD=$(AO_EEPROM_LIBS) $(LIBUSB_LIBS) ao_eeprom_SOURCES = ao-eeprom.c + +man_MANS = ao-eeprom.1 diff --git a/ao-tools/ao-eeprom/ao-eeprom.1 b/ao-tools/ao-eeprom/ao-eeprom.1 new file mode 100644 index 00000000..8caff9d1 --- /dev/null +++ b/ao-tools/ao-eeprom/ao-eeprom.1 @@ -0,0 +1,33 @@ +.\" +.\" Copyright © 2009 Keith Packard <keithp@keithp.com> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License along +.\" with this program; if not, write to the Free Software Foundation, Inc., +.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +.\" +.\" +.TH AO-EEPROM 1 "ao-eeprom" "" +.SH NAME +ao-eeprom \- Fetch eeprom contents from TeleMetrum device +.SH SYNOPSIS +.B "ao-eeprom" +[\-tty \fItty-device\fP] +.SH DESCRIPTION +.I ao-eeprom +downloads the eeprom contents from a connected TeleMetrum device. +.SH USAGE +.I ao-eeprom +connects to the specified target device and dumps each block of the +eeprom to stdout in hexidecimal bytes. +.SH AUTHOR +Keith Packard 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/Makefile.am b/ao-tools/ao-load/Makefile.am index 8a8392af..3c48dc27 100644 --- a/ao-tools/ao-load/Makefile.am +++ b/ao-tools/ao-load/Makefile.am @@ -8,3 +8,5 @@ ao_load_DEPENDENCIES = $(AO_LOAD_LIBS) ao_load_LDADD=$(AO_LOAD_LIBS) $(LIBUSB_LIBS) ao_load_SOURCES = ao-load.c + +man_MANS = ao-load.1 diff --git a/ao-tools/ao-load/ao-load.1 b/ao-tools/ao-load/ao-load.1 new file mode 100644 index 00000000..10484f3b --- /dev/null +++ b/ao-tools/ao-load/ao-load.1 @@ -0,0 +1,38 @@ +.\" +.\" Copyright © 2009 Keith Packard <keithp@keithp.com> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License along +.\" with this program; if not, write to the Free Software Foundation, Inc., +.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +.\" +.\" +.TH AO-LOAD 1 "ao-load" "" +.SH NAME +ao-load \- flash a program to a AltOS device +.SH SYNOPSIS +.B "ao-load" +[\-tty \fItty-device\fP] +\fIfile.ihx\fP +\fIdevice serial number\fP +.SH DESCRIPTION +.I ao-load +loads the specified .ihx file into the target device flash memory, +customizing the AltOS image with the specified serial number. +.SH USAGE +.I ao-load +reads the specified .ihx file into memory, locates the matching .map +file and edits the image to customize it using the specified serial +number. It then connects to the specified target device and writes the +program to the target device flash memory. +.SH AUTHOR +Keith Packard diff --git a/ao-tools/ao-load/ao-load.c b/ao-tools/ao-load/ao-load.c index 6966dd3a..642af2fe 100644 --- a/ao-tools/ao-load/ao-load.c +++ b/ao-tools/ao-load/ao-load.c @@ -25,13 +25,6 @@ #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; @@ -96,7 +89,21 @@ rewrite(struct hex_image *image, unsigned addr, char *data, int len) memcpy(image->data + addr - image->address, data, len); } +<<<<<<< HEAD:ao-tools/ao-load/ao-load.c static const struct option +======= +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); +} + +>>>>>>> c29275b72438637d46d7a50742882d2736eb176a:ao-tools/ao-load/ao-load.c int main (int argc, char **argv) { @@ -105,12 +112,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]; @@ -118,8 +125,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); @@ -128,7 +147,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]); @@ -163,7 +182,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; @@ -204,7 +223,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/Makefile.am b/ao-tools/ao-rawload/Makefile.am index 24013a85..d2c55658 100644 --- a/ao-tools/ao-rawload/Makefile.am +++ b/ao-tools/ao-rawload/Makefile.am @@ -8,3 +8,5 @@ ao_rawload_DEPENDENCIES = $(AO_RAWLOAD_LIBS) ao_rawload_LDADD=$(AO_RAWLOAD_LIBS) $(LIBUSB_LIBS) ao_rawload_SOURCES = ao-rawload.c + +man_MANS=ao-rawload.1 diff --git a/ao-tools/ao-rawload/ao-rawload.1 b/ao-tools/ao-rawload/ao-rawload.1 new file mode 100644 index 00000000..e79645f1 --- /dev/null +++ b/ao-tools/ao-rawload/ao-rawload.1 @@ -0,0 +1,36 @@ +.\" +.\" Copyright © 2009 Keith Packard <keithp@keithp.com> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License along +.\" with this program; if not, write to the Free Software Foundation, Inc., +.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +.\" +.\" +.TH AO-RAWLOAD 1 "ao-rawload" "" +.SH NAME +ao-rawload \- flash a program to a AltOS device +.SH SYNOPSIS +.B "ao-rawload" +[\-tty \fItty-device\fP] +\fIfile.ihx\fP +.SH DESCRIPTION +.I ao-rawload +loads the specified .ihx file, without modification, into the target +device flash memory. +.SH USAGE +.I ao-rawload +reads the specified .ihx file into memory. It then connects to the +specified target device and writes the program to the target device +flash memory. +.SH AUTHOR +Keith Packard 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; |