From 494467c27661d176f5004d3c777a5850c8d23c2d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 28 May 2014 19:42:18 -0700 Subject: [PATCH] ao-tools: Create ao-sendfake to send flight data for simulation runs This sends a binary data stream to the flight computer over USB to simulate flights using as much of the real firmware as possible. Signed-off-by: Keith Packard --- ao-tools/Makefile.am | 4 +- ao-tools/ao-sendfake/Makefile.am | 12 +++ ao-tools/ao-sendfake/ao-sendfake.1 | 81 +++++++++++++++++++ ao-tools/ao-sendfake/ao-sendfake.c | 123 +++++++++++++++++++++++++++++ configure.ac | 1 + 5 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 ao-tools/ao-sendfake/Makefile.am create mode 100644 ao-tools/ao-sendfake/ao-sendfake.1 create mode 100644 ao-tools/ao-sendfake/ao-sendfake.c diff --git a/ao-tools/Makefile.am b/ao-tools/Makefile.am index dfb19e10..15f3c7b0 100644 --- a/ao-tools/Makefile.am +++ b/ao-tools/Makefile.am @@ -2,8 +2,8 @@ SUBDIRS=lib ao-rawload ao-dbg ao-bitbang ao-eeprom ao-list \ ao-load ao-telem ao-send-telem ao-sky-flash \ ao-dumpflash ao-edit-telem ao-dump-up ao-elftohex \ ao-flash ao-usbload ao-test-igniter ao-test-baro \ - ao-test-flash ao-cal-accel ao-fakeflight ao-test-gps ao-usbtrng \ - ao-cal-freq ao-chaosread ao-makebin + ao-test-flash ao-cal-accel ao-fakeflight ao-sendfake \ + ao-test-gps ao-usbtrng ao-cal-freq ao-chaosread ao-makebin if LIBSTLINK SUBDIRS += ao-stmload endif diff --git a/ao-tools/ao-sendfake/Makefile.am b/ao-tools/ao-sendfake/Makefile.am new file mode 100644 index 00000000..19b7c66c --- /dev/null +++ b/ao-tools/ao-sendfake/Makefile.am @@ -0,0 +1,12 @@ +bin_PROGRAMS=ao-sendfake + +AM_CFLAGS=-I$(top_srcdir)/ao-tools/lib $(LIBUSB_CFLAGS) +AO_STMLOAD_LIBS=$(top_builddir)/ao-tools/lib/libao-tools.a + +ao_sendfake_DEPENDENCIES = $(AO_STMLOAD_LIBS) + +ao_sendfake_LDADD=$(AO_STMLOAD_LIBS) $(LIBUSB_LIBS) + +ao_sendfake_SOURCES=ao-sendfake.c ao-sendfake.h + +man_MANS = ao-sendfake.1 diff --git a/ao-tools/ao-sendfake/ao-sendfake.1 b/ao-tools/ao-sendfake/ao-sendfake.1 new file mode 100644 index 00000000..d59a3f87 --- /dev/null +++ b/ao-tools/ao-sendfake/ao-sendfake.1 @@ -0,0 +1,81 @@ +.\" +.\" Copyright © 2009 Keith Packard +.\" +.\" 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-sendfake" "" +.SH NAME +ao-sendfake \- flash a program to an ARM-based AltOS device +.SH SYNOPSIS +.B "ao-sendfake" +[\-T \fItty-device\fP] +[\--tty \fItty-device\fP] +[\-D \fIaltos-device\fP] +[\--device \fIaltos-device\fP] +[\--cal \fIradio-calibration\fP] +[\--serial \fserial-number\fP] +\fIfile.elf\fP or \fIfile.ihx\fP +.SH DESCRIPTION +.I ao-sendfake +loads the specified .elf or .ihx file into the target device flash +memory via the AltOS boot loader, using either existing serial number +and radio calibration values or taking either of those from the +command line. +.SH OPTIONS +.TP +\-T tty-device | --tty tty-device +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. +.TP +\-D AltOS-device | --device AltOS-device +Search for a connected device. This requires an argument of one of the +following forms: +.IP +TeleMega:2 +.br +TeleMega +.br +2 +.IP +Leaving out the product name will cause the tool to select a suitable +product, leaving out the serial number will cause the tool to match +one of the available devices. +.TP +\-s serial-number | --serial serial-number +This programs the device serial number into the image. If no serial +number is specified, then the existing serial number, if any, will be +read from the device. +.TP +\-c radio-calibration | --cal radio-calibration This programs the +radio calibration value into the image for hardware which doesn't have +any eeprom storage for this value. If no calibration value is +specified, an existing calibration value will be used. The value here +can be computed given the current radio calibration value, the +measured frequency and the desired frequency: +.IP + cal' = cal * (desired/measured) +.IP +The default calibration value is 7119667. +.SH USAGE +.I ao-sendfake +reads the specified .elf file into memory, edits the image to +customize it using the specified serial number and radio calibration +values. It then connects to the debug dongle and writes the program to +the target device flash memory. +.SH AUTHOR +Keith Packard diff --git a/ao-tools/ao-sendfake/ao-sendfake.c b/ao-tools/ao-sendfake/ao-sendfake.c new file mode 100644 index 00000000..20bfd608 --- /dev/null +++ b/ao-tools/ao-sendfake/ao-sendfake.c @@ -0,0 +1,123 @@ +/* + * Copyright © 2012 Keith Packard + * + * 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; version 2 of the License. + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ccdbg.h" +#include "cc-usb.h" +#include "cc.h" +#include "ao-verbose.h" + + +static const struct option options[] = { + { .name = "tty", .has_arg = 1, .val = 'T' }, + { .name = "device", .has_arg = 1, .val = 'D' }, + { .name = "verbose", .has_arg = 0, .val = 'v' }, + { 0, 0, 0, 0}, +}; + +static void usage(char *program) +{ + fprintf(stderr, "usage: %s [--device=] [-tty=] [--verbose] file\n", program); + exit(1); +} + +void +done(struct cc_usb *cc, int code) +{ +/* cc_usb_printf(cc, "a\n"); */ + cc_usb_close(cc); + exit (code); +} + +int +main (int argc, char **argv) +{ + char *device = NULL; + char *filename; + unsigned int s; + int i; + int string_num; + int c; + int tries; + struct cc_usb *cc = NULL; + char *tty = NULL; + int success; + int verbose = 0; + FILE *file; + char buf[1024]; + + while ((c = getopt_long(argc, argv, "vT:D:", options, NULL)) != -1) { + switch (c) { + case 'T': + tty = optarg; + break; + case 'D': + device = optarg; + break; + case 'v': + verbose++; + break; + default: + usage(argv[0]); + break; + } + } + + ao_verbose = verbose; + + if (verbose > 1) + ccdbg_add_debug(CC_DEBUG_BITBANG); + + filename = argv[optind]; + if (filename == NULL) + usage(argv[0]); + + file = fopen(filename, "r"); + if (!file) { + perror (filename); + usage(argv[0]); + } + + if (!tty) + tty = cc_usbdevs_find_by_arg(device, "TeleMega"); + if (!tty) + tty = getenv("ALTOS_TTY"); + if (!tty) + tty="/dev/ttyACM0"; + + cc = cc_usb_open(tty); + + if (!cc) + exit(1); + + /* And dump the resulting bits to the device + */ + + while ((c = fread(buf, 1, sizeof(buf), file)) > 0) + cc_usb_write(cc, buf, c); + + done(cc, 0); +} diff --git a/configure.ac b/configure.ac index b4ecfb98..9c851a2b 100644 --- a/configure.ac +++ b/configure.ac @@ -553,6 +553,7 @@ ao-tools/ao-edit-telem/Makefile ao-tools/ao-dump-up/Makefile ao-tools/ao-elftohex/Makefile ao-tools/ao-usbload/Makefile +ao-tools/ao-sendfake/Makefile ao-tools/ao-flash/Makefile ao-tools/ao-test-igniter/Makefile ao-tools/ao-test-baro/Makefile -- 2.30.2