From: Keith Packard Date: Sat, 1 Dec 2012 01:36:40 +0000 (-0800) Subject: ao-tools: Add ao-sky-flash to update GPS firmware X-Git-Tag: 1.1.9.3~34 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=dd8b2eadab12965d232640449b1d1c9f2484238c ao-tools: Add ao-sky-flash to update GPS firmware This uses a new feature of AltOS to directly connect the GPS chip to the USB link to reprogram the former. Signed-off-by: Keith Packard --- diff --git a/ao-tools/Makefile.am b/ao-tools/Makefile.am index 257fdaec..871b8205 100644 --- a/ao-tools/Makefile.am +++ b/ao-tools/Makefile.am @@ -1 +1 @@ -SUBDIRS=lib ao-rawload ao-dbg ao-bitbang ao-eeprom ao-list ao-load ao-telem ao-stmload ao-send-telem +SUBDIRS=lib ao-rawload ao-dbg ao-bitbang ao-eeprom ao-list ao-load ao-telem ao-stmload ao-send-telem ao-sky-flash diff --git a/ao-tools/ao-sky-flash/Makefile.am b/ao-tools/ao-sky-flash/Makefile.am new file mode 100644 index 00000000..f6c5089a --- /dev/null +++ b/ao-tools/ao-sky-flash/Makefile.am @@ -0,0 +1,18 @@ +bin_PROGRAMS=ao-sky-flash + +AM_CFLAGS=-I$(top_srcdir)/ao-tools/lib $(LIBUSB_CFLAGS) +AO_SKY_FLASH_LIBS=$(top_builddir)/ao-tools/lib/libao-tools.a + +ao_sky_flash_DEPENDENCIES = $(AO_SKY_FLASH_LIBS) + +ao_sky_flash_LDADD=$(AO_SKY_FLASH_LIBS) $(LIBUSB_LIBS) + +ao_sky_flash_SOURCES = \ + sky_bin.c \ + sky_debug.c \ + sky_flash.c \ + sky_flash.h \ + sky_serial.c \ + sky_srec.c + +man_MANS = ao-sky-flash.1 diff --git a/ao-tools/ao-sky-flash/STI_01.04.42-01.10.23_4x_9600_Bin_20100901.bin b/ao-tools/ao-sky-flash/STI_01.04.42-01.10.23_4x_9600_Bin_20100901.bin new file mode 100644 index 00000000..c698add2 Binary files /dev/null and b/ao-tools/ao-sky-flash/STI_01.04.42-01.10.23_4x_9600_Bin_20100901.bin differ diff --git a/ao-tools/ao-sky-flash/STI_01.06.10-01.07.23_balloon_CRC_7082_9600_20120913.bin b/ao-tools/ao-sky-flash/STI_01.06.10-01.07.23_balloon_CRC_7082_9600_20120913.bin new file mode 100644 index 00000000..9e256897 Binary files /dev/null and b/ao-tools/ao-sky-flash/STI_01.06.10-01.07.23_balloon_CRC_7082_9600_20120913.bin differ diff --git a/ao-tools/ao-sky-flash/ao-sky-flash.1 b/ao-tools/ao-sky-flash/ao-sky-flash.1 new file mode 100644 index 00000000..d61c9c9d --- /dev/null +++ b/ao-tools/ao-sky-flash/ao-sky-flash.1 @@ -0,0 +1,85 @@ +.\" +.\" 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-SKY-FLASH 1 "ao-sky-flash" "" +.SH NAME +ao-sky-flash \- flash GPS firmware program to a SkyTraq GPS chip +.SH SYNOPSIS +.B "ao-sky-flash" +[\-T \fItty-device\fP] +[\--tty \fItty-device\fP] +[\-D \fIaltos-device\fP] +[\--device \fIaltos-device\fP] +[\--loader \fIboot-loader\fP] +[\--firmware \fIgps-firmware\fP] +[\--query] +[\--quiet] +[\--raw] +.SH DESCRIPTION +.I ao-sky-flash +loads the specified GPS firmware file into the target GPS chip flash +memory using the specified boot loader. +.SH OPTIONS +.TP +\-T tty-device | --tty tty-device +This selects which tty device the debugger uses to communicate with +the target device. +.TP +\-D AltOS-device | --device AltOS-device +Search for a connected device. This requires an argument of one of the +following forms: +.IP +TeleMetrum:2 +.br +TeleMetrum +.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 +\--loader boot-loader +This specifies the desired boot loader to use for reflashing the +device. You should use srec_115200.bin unless you have a good reason +not to. This should be in S record format. +.TP +\--firmware gps-firmware +This specifies the new GPS firmware image to load onto the target GPS +chip. No checking is done on this device at all; flash garbage and the +GPS chip will probably fail to boot. +.TP +\--query +Instead of loading new firmware, query the current version of firmware +running on the target device. +.TP +\--quiet +Normally, ao-spy-flash is quite chatty. This shuts it up, except for +error messages. +.TP +\--raw +The expected target for reflashing is an Altus Metrum product with the +GPS chip connected to the CPU on that board and not directly to the +USB serial port. This option says that the target GPS chip is directly +connected, which changes how things are initialized a bit. +.SH USAGE +.I ao-sky-flash +loads the specified bootloader into device RAM and then uses that to +load new firmware to flash. +.SH AUTHOR +Keith Packard diff --git a/ao-tools/ao-sky-flash/sky_bin.c b/ao-tools/ao-sky-flash/sky_bin.c new file mode 100644 index 00000000..e693c892 --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_bin.c @@ -0,0 +1,75 @@ +/* + * 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 "sky_flash.h" +#include +#include + +#define FLASHBYTES 8192 + +int +skytraq_send_bin(int fd, const char *filename) +{ + FILE *file; + char buf[FLASHBYTES]; + int count; + unsigned char cksum; + int c; + long size; + long pos; + char message[1024]; + int ret; + + file = fopen(filename, "r"); + if (!file) { + perror(filename); + return -1; + } + + printf ("computing checksum...\n"); fflush(stdout); + /* Compute checksum, figure out how long the file */ + cksum = 0; + while ((c = getc(file)) != EOF) + cksum += (unsigned char) c; + size = ftell(file); + rewind(file); + printf ("checksum: %d\n", cksum); fflush(stdout); + + sprintf(message, "BINSIZE = %d Checksum = %d Loopnumber = %d ", size, cksum, 1); + + ret = skytraq_cmd_wait(fd, message, strlen(message) + 1, "OK", 20000); + if (ret < 0) + printf ("waitstatus failed %d\n", ret); + + pos = 0; + for (;;) { + count = fread(buf, 1, sizeof (buf), file); + if (count < 0) { + perror("fread"); + fclose(file); + return -1; + } + if (count == 0) + break; + printf ("write %ld of %ld ", pos + count, size); fflush(stdout); + pos += count; + ret = skytraq_cmd_wait(fd, buf, count, "OK", 20000); + if (ret < 0) + return ret; + } + return skytraq_waitstatus(fd, "END", 30000); +} diff --git a/ao-tools/ao-sky-flash/sky_debug.c b/ao-tools/ao-sky-flash/sky_debug.c new file mode 100644 index 00000000..32571f0e --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_debug.c @@ -0,0 +1,111 @@ +/* + * 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 "sky_flash.h" + +static int dbg_input; +static int dbg_newline = 1; + +int +skytraq_millis(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000 + tv.tv_usec / 1000; +} + +static void +skytraq_dbg_time(void) +{ + int delta = skytraq_millis() - skytraq_open_time; + + if (!skytraq_verbose) + return; + printf ("%4d.%03d ", delta / 1000, delta % 1000); +} + +void +skytraq_dbg_newline(void) +{ + if (!skytraq_verbose) + return; + if (!dbg_newline) { + putchar('\n'); + dbg_newline = 1; + } +} + +static void +skytraq_dbg_set(int input) +{ + if (!skytraq_verbose) + return; + if (input != dbg_input) { + skytraq_dbg_newline(); + if (input) + putchar('\t'); + dbg_input = input; + } +} + +void +skytraq_dbg_char(int input, char c) +{ + if (!skytraq_verbose) + return; + skytraq_dbg_set(input); + if (dbg_newline) + skytraq_dbg_time(); + if (c < ' ' || c > '~') + printf ("\\%02x", (unsigned char) c); + else + putchar(c); + dbg_newline = 0; + if (c == '\n') + dbg_input = 2; + fflush(stdout); +} + +void +skytraq_dbg_buf(int input, const char *buf, int len) +{ + if (!skytraq_verbose) + return; + while (len--) + skytraq_dbg_char(input, *buf++); +} + +void +skytraq_dbg_printf(int input, const char *fmt, ...) +{ + va_list ap; + + if (!skytraq_verbose) + return; + skytraq_dbg_set(input); + if (dbg_newline) + skytraq_dbg_time(); + va_start (ap, fmt); + vprintf(fmt, ap); + va_end(ap); + dbg_newline = 0; +} diff --git a/ao-tools/ao-sky-flash/sky_flash.c b/ao-tools/ao-sky-flash/sky_flash.c new file mode 100644 index 00000000..55cb2cb6 --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_flash.c @@ -0,0 +1,259 @@ +/* + * 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 "sky_flash.h" +#include +#include +#include +#include +#include +#include +#include "cc.h" + +static const struct option options[] = { + { .name = "tty", .has_arg = 1, .val = 'T' }, + { .name = "device", .has_arg = 1, .val = 'D' }, + { .name = "loader", .has_arg = 1, .val = 'l' }, + { .name = "firmware", .has_arg = 1, .val = 'f' }, + { .name = "query", .has_arg = 0, .val = 'q' }, + { .name = "raw", .has_arg = 0, .val = 'r' }, + { .name = "quiet", .has_arg = 0, .val = 'Q' }, + { 0, 0, 0, 0}, +}; + +static uint8_t query_version[] = { + 0xa0, 0xa1, 0x00, 0x02, 0x02, 0x01, 0x03, 0x0d, 0x0a +}; + +static void +usage(char *program) +{ + fprintf(stderr, + "usage: %s [--tty ]\n" + " [--device ]\n" + " [--loader ]\n" + " [--firmware ]\n" + " [--query]\n" + " [--quiet]\n" + " [--raw]\n", program); + exit(1); +} + +int +skytraq_expect(int fd, uint8_t want, int timeout) { + int c; + + c = skytraq_waitchar(fd, timeout); + if (c < 0) + return -1; + if (c == want) + return 1; + return 0; +} + +int +skytraq_wait_reply(int fd, uint8_t reply, uint8_t *buf, uint8_t reply_len) { + + for(;;) { + uint8_t a, b; + uint8_t cksum_computed, cksum_read; + int len; + switch (skytraq_expect(fd, 0xa0, 10000)) { + case -1: + return -1; + case 0: + continue; + case 1: + break; + } + switch (skytraq_expect(fd, 0xa1, 1000)) { + case -1: + return -1; + case 0: + continue; + } + a = skytraq_waitchar(fd, 1000); + b = skytraq_waitchar(fd, 1000); + switch (skytraq_expect(fd, reply, 1000)) { + case -1: + return -1; + case 0: + continue; + } + len = (a << 16) | b; + if (len != reply_len) + continue; + *buf++ = reply; + len--; + cksum_computed = reply; + while (len--) { + a = skytraq_waitchar(fd, 1000); + if (a < 0) + return a; + cksum_computed ^= a; + *buf++ = a; + } + switch (skytraq_expect(fd, cksum_computed, 1000)) { + case -1: + return -1; + case 0: + continue; + } + switch (skytraq_expect(fd, 0x0d, 1000)) { + case -1: + return -1; + case 0: + continue; + } + switch (skytraq_expect(fd, 0x0a, 1000)) { + case -1: + return -1; + case 0: + continue; + } + break; + } + return 0; +} + +int +main(int argc, char **argv) +{ + int fd; + char buf[512]; + int ret; + FILE *input; + long size; + unsigned char cksum; + int c; + char message[1024]; + char *tty = NULL; + char *device = NULL; + char *loader = "srec_115200.bin"; + char *file = NULL; + int query = 0; + int raw = 0; + + while ((c = getopt_long(argc, argv, "T:D:l:f:qQr", options, NULL)) != -1) { + switch (c) { + case 'T': + tty = optarg; + break; + case 'D': + device = optarg; + break; + case 'l': + loader = optarg; + break; + case 'f': + file = optarg; + break; + case 'q': + query = 1; + break; + case 'Q': + skytraq_verbose = 0; + break; + case 'r': + raw = 1; + break; + default: + usage(argv[0]); + break; + } + } + + if (!tty) + tty = cc_usbdevs_find_by_arg(device, "TeleMetrum"); + if (!tty) + tty = getenv("ALTOS_TTY"); + if (!tty) + tty="/dev/ttyACM0"; + fd = skytraq_open(tty); + if (fd < 0) + exit(1); + + if (raw) { + /* Set the baud rate to 115200 */ + skytraq_setcomm(fd, 115200); + sleep(1); + skytraq_setspeed(fd, 115200); + } else { + /* Connect TM to the device */ + skytraq_write(fd, "U\n", 2); + } + + /* Wait for the device to stabilize after baud rate changes */ + for (c = 0; c < 6; c++) { + skytraq_flush(fd); + sleep(1); + } + + if (query) { + uint8_t query_reply[14]; + + uint8_t software_type; + uint32_t kernel_version; + uint32_t odm_version; + uint32_t revision; + + skytraq_write(fd, query_version, 9); + if (skytraq_wait_reply(fd, 0x80, query_reply, sizeof (query_reply)) != 0) { + fprintf(stderr, "query reply failed\n"); + exit(1); + } + +#define i8(o) query_reply[(o)-1] +#define i32(o) ((i8(o) << 24) | (i8(o+1) << 16) | (i8(o+2) << 8) | (i8(o+3))) + software_type = i8(2); + kernel_version = i32(3); + odm_version = i32(7); + revision = i32(11); + skytraq_dbg_printf(0, "\n"); + printf ("Software Type %d. Kernel Version %d.%d.%d. ODM Version %d.%d.%d. Revision %d.%d.%d.\n", + software_type, + kernel_version >> 16 & 0xff, + kernel_version >> 8 & 0xff, + kernel_version >> 0 & 0xff, + odm_version >> 16 & 0xff, + odm_version >> 8 & 0xff, + odm_version >> 0 & 0xff, + revision >> 16 & 0xff, + revision >> 8 & 0xff, + revision >> 0 & 0xff); + exit(0); + } + + if (!file) + usage(argv[0]); + + ret = skytraq_send_srec(fd, "srec_115200.bin"); + skytraq_dbg_printf (0, "srec ret %d\n", ret); + if (ret < 0) + exit(1); + + sleep(2); + +// ret = skytraq_send_bin(fd, "STI_01.04.42-01.10.23_4x_9600_Bin_20100901.bin"); + ret = skytraq_send_bin(fd, "STI_01.06.10-01.07.23_balloon_CRC_7082_9600_20120913.bin"); + + printf ("bin ret %d\n", ret); + if (ret < 0) + exit(1); + + return 0; +} diff --git a/ao-tools/ao-sky-flash/sky_flash.h b/ao-tools/ao-sky-flash/sky_flash.h new file mode 100644 index 00000000..77f4c742 --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_flash.h @@ -0,0 +1,67 @@ +/* + * 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. + */ + +/* sky_serial.c */ + +extern int skytraq_open_time; +extern int skytraq_verbose; + +int +skytraq_open(const char *path); + +int +skytraq_setspeed(int fd, int baud); + +int +skytraq_setcomm(int fd, int baudrate); + +int +skytraq_write(int fd, const char *data, int len); + +int +skytraq_waitchar(int fd, int timeout); + +int +skytraq_waitstatus(int fd, const char *status, int timeout); + +void +skytraq_flush(int fd); + +int +skytraq_cmd_wait(int fd, const char *message, int len, const char *status, int timeout); + +int +skytraq_cmd_nowait(int fd, const char *message, int len); + +/* sky_debug.c */ + +void +skytraq_dbg_printf(int input, const char *fmt, ...); + +void +skytraq_dbg_buf(int input, const char *buf, int len); + +void +skytraq_dbg_char(int input, char c); + +/* sky_srec.c */ +int +skytraq_send_srec(int fd, const char *file); + +/* sky_bin.c */ +int +skytraq_send_bin(int fd, const char *filename); diff --git a/ao-tools/ao-sky-flash/sky_serial.c b/ao-tools/ao-sky-flash/sky_serial.c new file mode 100644 index 00000000..4aeb1458 --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_serial.c @@ -0,0 +1,259 @@ +/* + * 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. + */ + +#define _BSD_SOURCE +#include +#include +#include +#include +#include +#include +#include "sky_flash.h" +#include +#include +#include +#include +#include + +int skytraq_verbose = 1; + +int +skytraq_setspeed(int fd, int baud) +{ + int b; + int ret; + struct termios term; + + switch (baud) { + case 9600: + b = B9600; + break; + case 38400: + b = B38400; + break; + case 115200: + b = B115200; + break; + default: + fprintf (stderr, "Invalid baudrate %d\n", baud); + return -1; + } + ret = tcgetattr(fd, &term); + cfmakeraw(&term); +#ifdef USE_POLL + term.c_cc[VMIN] = 1; + term.c_cc[VTIME] = 0; +#else + term.c_cc[VMIN] = 0; + term.c_cc[VTIME] = 1; +#endif + + cfsetspeed(&term, b); + + ret = tcsetattr(fd, TCSAFLUSH, &term); + return ret; +} + +int skytraq_open_time; + +int +skytraq_open(const char *path) +{ + int fd; + int ret; + + fd = open(path, O_RDWR | O_NOCTTY); + if (fd < 0) { + perror (path); + return -1; + } + + ret = skytraq_setspeed(fd, 9600); + if (ret < 0) { + close (fd); + return -1; + } + skytraq_open_time = skytraq_millis(); + return fd; +} + + +#define BAUD 57600 +#define BPS (BAUD/10 * 9/10) +#define US_PER_CHAR (1000000 / BPS) + +int +skytraq_write(int fd, const char *data, int len) +{ + const char *d = data; + int r; + int us; + + while (len) { + int this_time = len; + if (this_time > 128) + this_time = 128; + if (this_time < 70) { + skytraq_dbg_printf (0, "%4d: ", this_time); + skytraq_dbg_buf(0, data, this_time); + } else { + skytraq_dbg_printf (0, "%d bytes (%d remain)", this_time, len); + } + fflush(stdout); + r = write(fd, data, this_time); + if (r <= 0) + return r; + us = r * US_PER_CHAR; + usleep(r * US_PER_CHAR); + data += r; + len -= r; + } + skytraq_dbg_newline(); + return 1; +} + +int +skytraq_setcomm(int fd, int baudrate) +{ + uint8_t msg[11]; + int i; + uint8_t cksum; + + int target_baudrate; + switch(baudrate) + { + case 4800: + target_baudrate=0; + break; + case 9600: + target_baudrate=1; + break; + case 19200: + target_baudrate=2; + break; + case 38400: + target_baudrate=3; + break; + case 57600: + target_baudrate=4; + break; + case 115200: + target_baudrate=5; + break; + case 230400: + target_baudrate=6; + break; + } + msg[0] = 0xa0; /* header */ + msg[1] = 0xa1; + msg[2] = 0x00; /* length */ + msg[3] = 0x04; + msg[4] = 0x05; /* configure serial port */ + msg[5] = 0x00; /* COM 1 */ + msg[6] = target_baudrate; + msg[7] = 0x00; /* update to SRAM only */ + + cksum = 0; + for (i = 4; i < 8; i++) + cksum ^= msg[i]; + msg[8] = cksum; + msg[9] = 0x0d; + msg[10] = 0x0a; + return skytraq_write(fd, msg, 11); +} + +int +skytraq_waitchar(int fd, int timeout) +{ + struct pollfd fds[1]; + int ret; + unsigned char c; + + for (;;) { + fds[0].fd = fd; + fds[0].events = POLLIN; + ret = poll(fds, 1, timeout); + if (ret >= 1) { + if (fds[0].revents & POLLIN) { + ret = read(fd, &c, 1); + if (ret == 1) { + skytraq_dbg_char(1, c); + return c; + } + } + } else if (ret == 0) + return -2; + else { + perror("poll"); + return -1; + } + } +} + +int +skytraq_waitstatus(int fd, const char *status, int timeout) +{ + const char *s; + int c; + + for (;;) { + c = skytraq_waitchar(fd, timeout); + if (c < 0) { + skytraq_dbg_newline(); + return c; + } + if ((char) c == *status) { + s = status + 1; + for (;;) { + c = skytraq_waitchar(fd, timeout); + if (c < 0) { + skytraq_dbg_newline(); + return c; + } + if ((char) c != *s) + break; + if (!*s) { + skytraq_dbg_newline(); + return 0; + } + s++; + } + } + } +} + +void +skytraq_flush(int fd) +{ + while (skytraq_waitchar(fd, 1) >= 0) + ; +} + +int +skytraq_cmd_wait(int fd, const char *message, int len, const char *status, int timeout) +{ + skytraq_flush(fd); + skytraq_write(fd, message, len); + return skytraq_waitstatus(fd, status, timeout); +} + +int +skytraq_cmd_nowait(int fd, const char *message, int len) +{ + skytraq_flush(fd); + return skytraq_write(fd, message, len); +} diff --git a/ao-tools/ao-sky-flash/sky_srec.c b/ao-tools/ao-sky-flash/sky_srec.c new file mode 100644 index 00000000..6d00f58c --- /dev/null +++ b/ao-tools/ao-sky-flash/sky_srec.c @@ -0,0 +1,60 @@ +/* + * 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 "sky_flash.h" +#include +#include + +static const char loader_start[] = "$LOADER DOWNLOAD"; + +int +skytraq_send_srec(int fd, const char *filename) +{ + FILE *file; + int ret; + char line[1024]; + + file = fopen(filename, "r"); + if (!file) { + perror(filename); + return -1; + } + + ret = skytraq_cmd_wait(fd, loader_start, strlen(loader_start) + 1, "OK", 1000); + if (ret) + return ret; + + for (;;) { + char *s; + int len; + + s = fgets(line, sizeof(line), file); + if (!s) + break; + len = strlen(s); + if (len < 3) /* Terminated with \r\n */ + break; + s[len-2] = '\n'; /* Smash \r */ + s[len-1] = '\0'; /* Smash \n */ + skytraq_cmd_nowait(fd, s, len); + } + fclose(file); + + ret = skytraq_waitstatus(fd, "END", 10000); + skytraq_dbg_newline(); + return ret; +} diff --git a/ao-tools/ao-sky-flash/srec_115200.bin b/ao-tools/ao-sky-flash/srec_115200.bin new file mode 100644 index 00000000..8ea8e7cd --- /dev/null +++ b/ao-tools/ao-sky-flash/srec_115200.bin @@ -0,0 +1,346 @@ +S0130000666C6173683131353230302E73726563DA +S31550000000033FFFF7821063209DE380011920000013 +S31550000010D2030000173FFFF79612E3E4AC07BFF890 +S31550000020D225800BD005800B133FFFC0900A0009E4 +S3155000003090122977D0230000E00320901B0800136C +S31550000040C0232090D20320149E136018D225800B13 +S31550000050D005800B1300180090120009900A3FF04B +S31550000060D0232014D20300001100003FD225800B6C +S31550000070D405800B901223FF940A800813043E0087 +S3155000008094128009D4230000D003C0009A13601C38 +S31550000090D025800BD205800B11004000902A4008D5 +S315500000A0D023C000D403400011000040D425800B5B +S315500000B0D205800BA00C204092124008A13C20068D +S315500000C011140005E02A2180D2234000B8102000E8 +S315500000D0400004C890102005130004004000017031 +S315500000E090102001213FFFF84000036F90058010CB +S315500000F0A014200A92058010B6102000B4102000DB +S31550000100A6102000AE10200096102000D00A400005 +S3155000011080A2202002800006920260019602E00131 +S3155000012080A2E06324BFFFFBD00A40009810200055 +S3155000013080A3000B1680000F113FFFF89012200A83 +S31550000140940580089810000B912CE0029002001341 +S31550000150D20A8000912A200190020009A6023FD0BF +S3155000016098833FFF12BFFFF99402A0019810000B2D +S315500001709205800C113FFFF894024008961020001B +S315500001809002800BD20A201680A2602002800007BF +S3155000019080A2E0009602E00180A2E06304BFFFFA6D +S315500001A09002800B80A2E0000480000F113FFFF800 +S315500001B09205800C9012201698024008900DE0FF90 +S315500001C0932A2002D40B000092024008932A600121 +S315500001D094028009AE02BFD09682FFFF12BFFFF88D +S315500001E098032001133FFFF794126384921263869B +S315500001F090078009400001A89207800A80A220003B +S3155000020002800122153FFFF79012A386D21780086D +S3155000021080A2601C0280010E9012A384113FFFF74A +S31550000220961223849012238692102037D237800854 +S31550000230941020B5D437800B900F2001213FFFF743 +S31550000240AB2A201392142386110001E1D41780099A +S3155000025090122154A2142384A4054008D617801165 +S3155000026090100012400002289210202080A22000F8 +S31550000270028000CA11140005B0100010B21000110F +S31550000280A0102000113FFFEA80A420000280000445 +S315500002909212225511000015921221AA912A60102D +S315500002A0A8162386A3322010D617801990048010E2 +S315500002B0D417801492102002400001DA98100011D1 +S315500002C080A22000028000B511140005D0148010C1 +S315500002D080A44008128000B0A004200280A420030D +S315500002E004BFFFEA113FFFEA213FFFF79214238430 +S315500002F0D617800990100012D417801440000202BD +S3155000030092102020170001DF9012E3F8D20200006D +S31550000310941423E4D225800AA01423E0C02580102B +S31550000320D005800A80A23FFF228000BB9012E3FCDA +S31550000330113FFFF7A2122384A0122386110001C198 +S31550000340D417801090122154D61780119210202065 +S31550000350400001ED90054008110001E9D4178010C6 +S3155000036090122154D617801192102020400001E699 +S3155000037090054008110001F1D417801090122154B5 +S31550000380D617801192102020400001DF90054008BA +S31550000390133FFFF8D00D800980A220421280000B37 +S315500003A0A410001392058009D00A600180A220494A +S315500003B03280000721140005D00A600280A2204E28 +S315500003C022800008D417801021140005400002F640 +S315500003D09014202890142028400002F39E03FCF02D +S315500003E090102000D6178011400001C792100013BC +S315500003F080A2200022800069111400051114000506 +S31550000400400002E990122030400000BE010000007A +S3155000041011000007A81223FFB010001480A4801406 +S31550000420148000031300000892100012113FFFF8C9 +S315500004304000036F90058008A2922000028000734E +S31550000440A010200080A40011B40680111A8000214B +S31550000450A4248011333FFFF71100003FAA1223FF57 +S31550000460BA1663849810001092102000A00420023F +S31550000470173FFFF89005800CD40A000B932A6008AA +S315500004809803200180A3001006BFFFFB9212400A7A +S31550000490912A60109932201080A300150280000A1C +S315500004A090166386D417800892102002D617801DA6 +S315500004B04000015C9010001B80A220000280003793 +S315500004C01114000580A400110ABFFFE7B606E0022A +S315500004D0900E801880A0000892603FFF80A0001206 +S315500004E090603FFF809240080280000680A68013ED +S315500004F011140005400002AC9012203080A68013E3 +S3155000050012BFFFC880A480149410200080A28013CC +S315500005101680000996102000D21280009132600891 +S315500005209002C0089402A00280A2801306BFFFFB6F +S3155000053096020009920AE0FF900DE0FF80A2400863 +S31550000540028000041114000510BFFFA49012203839 +S31550000550153FFFF79012A3E0D205800880A26001F4 +S31550000560128000109212A3849012A386D41780088A +S3155000057098102A01D6178009110001DF901223FC2A +S31550000580400001289210200280A22000128000060E +S31550000590211400051114000510BFFF909012202061 +S315500005A02114000540000280901420404000027E35 +S315500005B090142040901020F013080013D0302000E3 +S315500005C092126020D012400015200000900A3FFE83 +S315500005D0D03240009612A04C90102010D022C0006D +S315500005E0D802C0009412A0B813080004D822800084 +S315500005F092126014D0024000900A3FFED022400072 +S3155000060010800000010000001114000510BFFF7398 +S3155000061090122048D20200001102807FD225800A13 +S31550000620901223FFD0258010D205800AD005801065 +S3155000063080A2400832BFFF40113FFFF790102001C3 +S31550000640D025801010BFFF3C113FFFF7D61780080A +S31550000650921AE0B980A0000994603FFF901AE0DA40 +S3155000066080A0000892603FFF8092800902BFFEED95 +S31550000670113FFFF780A2E0DA22BFFEF0B81020014A +S3155000068010BFFEEF900F20012114000540000246D6 +S315500006909014205030BFFFFE01000000941020F04F +S315500006A019080013D430200098132020170800048E +S315500006B0D41300008212E01417200000940ABFFEE3 +S315500006C09A12E0B8D4330000900A20FF9612E04CFC +S315500006D0D222C00080A22001128000070100000033 +S315500006E0D202C000D2234000D0004000900A3FFE04 +S315500006F0D02040000100000081C3E0080100000046 +S315500007001308000492126014D00240009012200187 +S31550000710D02240000100000081C3E0080100000023 +S315500007209C03BF90D233A066D213A06696100008E1 +S31550000730920A6080D012000080A0000994402000E8 +S31550000740900A208080A000089240200080A2400A93 +S315500007500280000D01000000D012C000808A2020C7 +S315500007601280000901000000D012C000900A2080BB +S3155000077080A000089240200080A2400A12BFFFF7D6 +S3155000078001000000D012C000900A208080A000080E +S3155000079090402000901A000A901A20010100000093 +S315500007A081C3E0089C23BF909DE3BF90B20E60FFCB +S315500007B0A0100018C027BFF480A660BA14800006A7 +S315500007C080A660DA80A660B916800006153FFFEA5B +S315500007D080A660B512800027B0102000153FFFEAB2 +S315500007E096102AAA9412A2AA13000015D432C00059 +S315500007F09212615598102554113FFFE0D2330000F4 +S3155000080090122080D032C000D432C000D2330000C3 +S315500008101100000C2300003F90122030130000C33B +S31550000820D0340000A412613FB21463FF921463FFE8 +S315500008307FFFFFBC90100010B0100008D007BFF427 +S3155000084090022001D027BFF4D214000080A64009A0 +S315500008500280000880A620011280000601000000D8 +S31550000860D007BFF480A2001208BFFFF2921463FFB4 +S31550000870D007BFF4130000C39212613F80A2400814 +S3155000088094403FFFB00E000A0100000081C7E00807 +S3155000089081E80000153FFFEA98102AAA9412A2AAEE +S315500008A0D4330000170000159612E155153FFFE4AA +S315500008B0D63025549412A090D4330000D61022007E +S315500008C09A100008960AE0FFD6320000901030F0D9 +S315500008D0D0330000D613400098100009901AE03724 +S315500008E080A0000894603FFF901AE01C80A000088A +S315500008F092603FFF8092800912800007821020008C +S3155000090080A2E0C20280000480A2E0201280004251 +S3155000091090102000113FFFEA94102AAA901222AAA2 +S31550000920D03280001300001592126155113FFFE43A +S31550000930D230255490122090D0328000D21022020C +S31550000940901030F0920A60FFD2330000D03280000F +S31550000950D013400080A220370280002A80A2202097 +S31550000960D41300000280001D912AA0109002BF47A8 +S31550000970912A201091322010952AA01080A2200290 +S315500009809532A01092602000901AA0B580A0000861 +S31550000990920A600190603FFF809240083280000BBF +S315500009A08210200180A2A0B90280000A80A2A0BABB +S315500009B00280000880A2A0EF0280000680A2A0DA82 +S315500009C02280000282102001108000139010000136 +S315500009D010BFFFFE821020019132201080A220EE1F +S315500009E012BFFFE49002BF479010201CD033400046 +S315500009F0921020B9D233000010BFFFDD941020B9F9 +S31550000A00D413000080A2A03402BFFFF880A2202099 +S31550000A1030BFFFD50100000081C3E008010000008F +S31550000A209DE3BF88B72EE010C037BFF4B736E0104D +S31550000A30A0100018C027BFEC80A6E0BA14800006AC +S31550000A4080A6E0DA80A6E0B916800006113FFFEADC +S31550000A5080A6E0B512800023B0102000113FFFEAB7 +S31550000A6094102AAA901222AAD032800013000015A0 +S31550000A7092126155113FFFE8D2302554901220A0B2 +S31550000A80D0328000F837BFF2D017BFF2130000C340 +S31550000A90D0340000B612613FD217BFF27FFFFF215C +S31550000AA090100010B0100008D007BFEC9002200143 +S31550000AB0D027BFECD2140000D017BFF280A2000995 +S31550000AC00280000880A62001128000060100000066 +S31550000AD0D007BFEC80A2001B08BFFFF0010000004A +S31550000AE0D007BFEC130000C39212613F80A24008AA +S31550000AF094403FFFB00E000A0100000081C7E00895 +S31550000B0081E800009DE3BF9811140005D4022150DE +S31550000B10A210200080A4400AA410001B9A102000A6 +S31550000B20A0102000A610200116800012961020005A +S31550000B30912EA010B5322010932EE0109810000A76 +S31550000B40111400059332601094122060D002A00C4C +S31550000B5080A2001A22800048D002A0109602E0011E +S31550000B6080A2C00C06BFFFFA9402A05011140005D3 +S31550000B70D202215080A2C009028000449010200168 +S31550000B8080A6200008800016912AE0029002000BF1 +S31550000B9013140005B4126060992A20049E10200197 +S31550000BA0912C200290020010912A200290030008F6 +S31550000BB09002001AD4022004A2046001D202200836 +S31550000BC080A4400A932BC0099A034009A0643FFFB2 +S31550000BD080A6000D18BFFFF4912C200280A660005D +S31550000BE00480001F932AE0029202400BB60CA0FF2D +S31550000BF011140005A4122060B52A60049210001B3F +S31550000C007FFFFEEA90100018932C200292024010AB +S31550000C10932A6002920680099402401280A2200014 +S31550000C2002800013A2046001D202A0089010200195 +S31550000C30912A000980A64008B00600080680000ADE +S31550000C40B2264008D002A00480A44008A0643FFF0A +S31550000C5080A6600014BFFFEB9210001B1080000BA3 +S31550000C6090100013108000099010200110BFFFFC57 +S31550000C70A610200080A2000932BFFFBA9602E001FA +S31550000C8010BFFFBC1114000581C7E00891E80008A9 +S31550000C9013140005D40A61801708000013000013CE +S31550000CA09212630C952AA00294028009D202C00ABD +S31550000CB0941000089132601F80A22001028000002B +S31550000CC09132601D808A20012280000490102001FC +S31550000CD0C022800030800002D022800081C3E0080C +S31550000CE09010000911140005D20A21801508000041 +S31550000CF0110000139012230C932A600292024008AE +S31550000D00D20280099132601F80A220010280000029 +S31550000D100100000081C3E008901000099DE3BF90D8 +S31550000D2011140005E00A2180B00E20FF11140005B1 +S31550000D3090122154B12E2002E2020018A12C20025A +S31550000D40110000139012230CA00400087FFFFFD15E +S31550000D509007BFF4D207BFF411060000932A601E15 +S31550000D60921240112308000092124008D2244010DB +S31550000D707FFFFFC89007BFF4D207BFF411070000EA +S31550000D80932A601E92124008D22440107FFFFFC162 +S31550000D909007BFF4D207BFF411030000932A601ED8 +S31550000DA092124008D22440107FFFFFBA9007BFF43A +S31550000DB0D207BFF41104000090122003932A601E3C +S31550000DC092124008D22440107FFFFFB29007BFF422 +S31550000DD0D207BFF411050000932A601E92124008F4 +S31550000DE0D22440107FFFFFC0010000000100000028 +S31550000DF081C7E00881E800009DE3BF90111400050B +S31550000E00E00A218025080000110000139012230CDF +S31550000E10A12C2002A00400087FFFFF9E9007BFF47C +S31550000E20D207BFF411050000932A601E92124008A3 +S31550000E30D22480107FFFFF979007BFF4A2100008BE +S31550000E40D007BFF427040000912A201E90120013E9 +S31550000E50D02480107FFFFF8F9007BFF4D207BFF4D6 +S31550000E6011040004932A601E92124008D224801066 +S31550000E707FFFFF889007BFF4D007BFF4A20C60FF36 +S31550000E80912A201E9012001190120013D024801027 +S31550000E907FFFFF95010000000100000081C7E008B8 +S31550000EA081E800009DE3BF9011140005D20A21800D +S31550000EB02708000011000013932A60029012230C99 +S31550000EC09202400893326002AC100009AB2A6002CD +S31550000ED0AE1000097FFFFF6F9007BFF4D007BFF435 +S31550000EE023030000912A201E90120011D024C01511 +S31550000EF07FFFFF7D0100000091322016A08A200F4F +S31550000F0032800011A2102000A4100011A32DA002BF +S31550000F107FFFFF609007BFF4D207BFF4932A601E8D +S31550000F2092124012D224C0117FFFFF6F01000000C1 +S31550000F3091322016A08A200F02BFFFF60100000052 +S31550000F40A210200080A440101ABFFFE3A52DE00296 +S31550000F50290100007FFFFF4F9007BFF4D007BFF471 +S31550000F60A2046001912A201E90120014D024C012AF +S31550000F707FFFFF5D01000000D02E0000808A20FF19 +S31550000F8002800006B006200180A440100ABFFFF27E +S31550000F900100000030BFFFD00100000081C7E0080B +S31550000FA081E800009DE3BF9011140005D20A21800C +S31550000FB025080000D40E000011000013932A600289 +S31550000FC09012230C80A2A000028000849202400856 +S31550000FD0AD2A60109135A012A72A2002AA10000847 +S31550000FE0A81000137FFFFF2B9007BFF4D007BFF464 +S31550000FF021030000912A201E90120010D024801345 +S315500010007FFFFF3901000000900A200680A22006CB +S315500010100280001001000000A2100010A12D6002F5 +S315500010207FFFFF1C9007BFF4D207BFF4932A601EC0 +S3155000103092124011D22480107FFFFF2B0100000036 +S31550001040900A200680A2200612BFFFF6010000007B +S315500010507FFFFF109007BFF4D007BFF4D20E0000F9 +S31550001060912A201E90120009D02480147FFFFF1E63 +S31550001070B0062001D00E000080A2200012BFFFDA79 +S31550001080010000009135A010D404800880A2A00071 +S315500010900680004C010000009132A01D808A20017C +S315500010A00280004690102001C027BFF4D007BFF43D +S315500010B013030000912A201E901200099335A010A8 +S315500010C0D0248009D404800980A2A0000680003470 +S315500010D0900AA00680A22006028000169135A01222 +S315500010E09A1000089E102001972A2002190300002A +S315500010F09132A01D808A2001128000039210200098 +S315500011009210000F912A601E9012000CD024800B72 +S31550001110D404800B80A2A0000680001A900AA00674 +S3155000112080A2200612BFFFF49132A01DD227BFF431 +S315500011309132A01D808A200102800010901020015B +S31550001140C027BFF4D007BFF49335A010912A201EB4 +S31550001150D0248009D404800980A2A00016800021E2 +S3155000116090100009D404800880A2A00006BFFFFE9C +S31550001170010000003080001B10BFFFF3D027BFF4E2 +S31550001180912B6002D404800880A2A00006BFFFFE07 +S315500011900100000010BFFFE3900AA006901000095E +S315500011A0D404800880A2A00006BFFFFE0100000004 +S315500011B010BFFFC9900AA00610BFFFBDD027BFF4CD +S315500011C0D404800880A2A00006BFFFFE01000000E4 +S315500011D010BFFFB39132A01D10BFFFABAD2A6010F8 +S315500011E00100000081C7E00881E800009DE3BF9838 +S315500011F035140005F60EA180921000183500001324 +S31550001200B416A30CB72EE002B606C01A992EE010FB +S31550001210B53320129B2EA002A210001AA610001958 +S315500012203B080000961020009410000DA410001AE0 +S31550001230F807400D80A7200006800064B137201DB6 +S31550001240B00E200180A00018B0603FFFB12E201EC6 +S3155000125033030000B0160019F027400AF807400A79 +S3155000126080A7200006800052B1372016B48E200F7A +S315500012701280001A82102000B3332012310003D09E +S31550001280901000199E162240B32E600237030000BC +S3155000129080A0400F8200600118800053B0102000DB +S315500012A0B137201DB00E200180A00018B0603FFF5E +S315500012B0B12E201EB016001BF0274019F807401912 +S315500012C080A7200006800033B1372016B48E200F39 +S315500012D002BFFFF180A0400F8210200080A0401A6C +S315500012E01ABFFFD4B1332012B72E20029010001827 +S315500012F09E10001BA0100018F807401B80A7200066 +S315500013000680001DB137201DB00E200180A00018A8 +S31550001310B0603FFFB12E201E33010000B0160019F9 +S31550001320F027400FF807400F80A720000680000CDA +S31550001330B12C20029602E001F82A400080A2C01388 +S3155000134002800029B010000B8200600180A0401A74 +S315500013500ABFFFEA9202600130BFFFB6F807401895 +S3155000136080A7200006BFFFFE0100000010BFFFF35C +S315500013709602E001B12A2002F807401880A7200003 +S3155000138006BFFFFE0100000010BFFFE0B137201D71 +S31550001390B12A2002F807401880A7200006BFFFFE9A +S315500013A00100000010BFFFCAB1372016B12CA002B1 +S315500013B0F807401880A7200006BFFFFE0100000076 +S315500013C010BFFFABB1372016B12C6002F80740189A +S315500013D080A7200006BFFFFE0100000010BFFF9946 +S315500013E0B137201D0100000081C7E00881E80000E8 +S315500013F09DE3BF987FFFFE81B00E20FF7FFFFE4822 +S3155000140081E800000100000000000000000000001C +S315500014100000000000000000000000000000000076 +S315500014204572726F723400004572726F72330000EB +S315500014304F4B0000000000004572726F7232000080 +S31550001440454E4400000000004572726F7235000030 +S315500014504572726F723100000000000000000000FB +S3155000146000000000000000010000000E00000037E0 +S31550001470000000B500004000000000030000000D11 +S3155000148000000037000000B5000080000000000496 +S315500014900000000F00000037000000B500010000FA +S315500014A00000000B0000001000000037000000B5DF +S315500014B00000000000000007000000100000001CA3 +S315500014C0000000B900007000000000080000000F86 +S315500014D00000001C000000B9000078000000000A5F +S315500014E00000000D0000001C000000B900007C0048 +S315500014F00000000B0000000E0000001C000000B9A8 +S31550001500000000000000000F000000100000001C4A +S31550001510000000DA00007000000000100000000F0C +S315500015200000001C000000DA0000700000000012ED +S315500015300000000D0000001C000000DA00007000E2 +S31550001540000000130000000E0000001C000000DA2E +S3155000155000000003000001AA000000D50000006A48 +S3155000156000000035000000230000001100000008B4 +S3115000157000000000000000000000000019 +S70550000000AA diff --git a/ao-tools/ao-sky-flash/srec_9600.bin b/ao-tools/ao-sky-flash/srec_9600.bin new file mode 100644 index 00000000..9a29ab1b --- /dev/null +++ b/ao-tools/ao-sky-flash/srec_9600.bin @@ -0,0 +1,346 @@ +S0190000666C6173685F3139646F74355F393630302E737265638A +S31550000000033FFFF7821063209DE380011920000013 +S31550000010D2030000173FFFF79612E3E4AC07BFF890 +S31550000020D225800BD005800B133FFFC0900A0009E4 +S3155000003090122977D0230000E00320901B0800136C +S31550000040C0232090D20320149E136018D225800B13 +S31550000050D005800B1300180090120009900A3FF04B +S31550000060D0232014D20300001100003FD225800B6C +S31550000070D405800B901223FF940A800813043E0087 +S3155000008094128009D4230000D003C0009A13601C38 +S31550000090D025800BD205800B11004000902A4008D5 +S315500000A0D023C000D403400011000040D425800B5B +S315500000B0D205800BA00C204092124008A13C20068D +S315500000C011140005E02A2180D2234000B8102000E8 +S315500000D0400004C890102001130004004000017035 +S315500000E090102001213FFFF84000036F90058010CB +S315500000F0A014200A92058010B6102000B4102000DB +S31550000100A6102000AE10200096102000D00A400005 +S3155000011080A2202002800006920260019602E00131 +S3155000012080A2E06324BFFFFBD00A40009810200055 +S3155000013080A3000B1680000F113FFFF89012200A83 +S31550000140940580089810000B912CE0029002001341 +S31550000150D20A8000912A200190020009A6023FD0BF +S3155000016098833FFF12BFFFF99402A0019810000B2D +S315500001709205800C113FFFF894024008961020001B +S315500001809002800BD20A201680A2602002800007BF +S3155000019080A2E0009602E00180A2E06304BFFFFA6D +S315500001A09002800B80A2E0000480000F113FFFF800 +S315500001B09205800C9012201698024008900DE0FF90 +S315500001C0932A2002D40B000092024008932A600121 +S315500001D094028009AE02BFD09682FFFF12BFFFF88D +S315500001E098032001133FFFF794126384921263869B +S315500001F090078009400001A89207800A80A220003B +S3155000020002800122153FFFF79012A386D21780086D +S3155000021080A2601C0280010E9012A384113FFFF74A +S31550000220961223849012238692102037D237800854 +S31550000230941020B5D437800B900F2001213FFFF743 +S31550000240AB2A201392142386110001E1D41780099A +S3155000025090122154A2142384A4054008D617801165 +S3155000026090100012400002289210202080A22000F8 +S31550000270028000CA11140005B0100010B21000110F +S31550000280A0102000113FFFEA80A420000280000445 +S315500002909212225511000015921221AA912A60102D +S315500002A0A8162386A3322010D617801990048010E2 +S315500002B0D417801492102002400001DA98100011D1 +S315500002C080A22000028000B511140005D0148010C1 +S315500002D080A44008128000B0A004200280A420030D +S315500002E004BFFFEA113FFFEA213FFFF79214238430 +S315500002F0D617800990100012D417801440000202BD +S3155000030092102020170001DF9012E3F8D20200006D +S31550000310941423E4D225800AA01423E0C02580102B +S31550000320D005800A80A23FFF228000BB9012E3FCDA +S31550000330113FFFF7A2122384A0122386110001C198 +S31550000340D417801090122154D61780119210202065 +S31550000350400001ED90054008110001E9D4178010C6 +S3155000036090122154D617801192102020400001E699 +S3155000037090054008110001F1D417801090122154B5 +S31550000380D617801192102020400001DF90054008BA +S31550000390133FFFF8D00D800980A220421280000B37 +S315500003A0A410001392058009D00A600180A220494A +S315500003B03280000721140005D00A600280A2204E28 +S315500003C022800008D417801021140005400002F640 +S315500003D09014202890142028400002F39E03FCF02D +S315500003E090102000D6178011400001C792100013BC +S315500003F080A2200022800069111400051114000506 +S31550000400400002E990122030400000BE010000007A +S3155000041011000007A81223FFB010001480A4801406 +S31550000420148000031300000892100012113FFFF8C9 +S315500004304000036F90058008A2922000028000734E +S31550000440A010200080A40011B40680111A8000214B +S31550000450A4248011333FFFF71100003FAA1223FF57 +S31550000460BA1663849810001092102000A00420023F +S31550000470173FFFF89005800CD40A000B932A6008AA +S315500004809803200180A3001006BFFFFB9212400A7A +S31550000490912A60109932201080A300150280000A1C +S315500004A090166386D417800892102002D617801DA6 +S315500004B04000015C9010001B80A220000280003793 +S315500004C01114000580A400110ABFFFE7B606E0022A +S315500004D0900E801880A0000892603FFF80A0001206 +S315500004E090603FFF809240080280000680A68013ED +S315500004F011140005400002AC9012203080A68013E3 +S3155000050012BFFFC880A480149410200080A28013CC +S315500005101680000996102000D21280009132600891 +S315500005209002C0089402A00280A2801306BFFFFB6F +S3155000053096020009920AE0FF900DE0FF80A2400863 +S31550000540028000041114000510BFFFA49012203839 +S31550000550153FFFF79012A3E0D205800880A26001F4 +S31550000560128000109212A3849012A386D41780088A +S3155000057098102A01D6178009110001DF901223FC2A +S31550000580400001289210200280A22000128000060E +S31550000590211400051114000510BFFF909012202061 +S315500005A02114000540000280901420404000027E35 +S315500005B090142040901020F013080013D0302000E3 +S315500005C092126020D012400015200000900A3FFE83 +S315500005D0D03240009612A04C90102010D022C0006D +S315500005E0D802C0009412A0B813080004D822800084 +S315500005F092126014D0024000900A3FFED022400072 +S3155000060010800000010000001114000510BFFF7398 +S3155000061090122048D20200001102807FD225800A13 +S31550000620901223FFD0258010D205800AD005801065 +S3155000063080A2400832BFFF40113FFFF790102001C3 +S31550000640D025801010BFFF3C113FFFF7D61780080A +S31550000650921AE0B980A0000994603FFF901AE0DA40 +S3155000066080A0000892603FFF8092800902BFFEED95 +S31550000670113FFFF780A2E0DA22BFFEF0B81020014A +S3155000068010BFFEEF900F20012114000540000246D6 +S315500006909014205030BFFFFE01000000941020F04F +S315500006A019080013D430200098132020170800048E +S315500006B0D41300008212E01417200000940ABFFEE3 +S315500006C09A12E0B8D4330000900A20FF9612E04CFC +S315500006D0D222C00080A22001128000070100000033 +S315500006E0D202C000D2234000D0004000900A3FFE04 +S315500006F0D02040000100000081C3E0080100000046 +S315500007001308000492126014D00240009012200187 +S31550000710D02240000100000081C3E0080100000023 +S315500007209C03BF90D233A066D213A06696100008E1 +S31550000730920A6080D012000080A0000994402000E8 +S31550000740900A208080A000089240200080A2400A93 +S315500007500280000D01000000D012C000808A2020C7 +S315500007601280000901000000D012C000900A2080BB +S3155000077080A000089240200080A2400A12BFFFF7D6 +S3155000078001000000D012C000900A208080A000080E +S3155000079090402000901A000A901A20010100000093 +S315500007A081C3E0089C23BF909DE3BF90B20E60FFCB +S315500007B0A0100018C027BFF480A660BA14800006A7 +S315500007C080A660DA80A660B916800006153FFFEA5B +S315500007D080A660B512800027B0102000153FFFEAB2 +S315500007E096102AAA9412A2AA13000015D432C00059 +S315500007F09212615598102554113FFFE0D2330000F4 +S3155000080090122080D032C000D432C000D2330000C3 +S315500008101100000C2300003F90122030130000C33B +S31550000820D0340000A412613FB21463FF921463FFE8 +S315500008307FFFFFBC90100010B0100008D007BFF427 +S3155000084090022001D027BFF4D214000080A64009A0 +S315500008500280000880A620011280000601000000D8 +S31550000860D007BFF480A2001208BFFFF2921463FFB4 +S31550000870D007BFF4130000C39212613F80A2400814 +S3155000088094403FFFB00E000A0100000081C7E00807 +S3155000089081E80000153FFFEA98102AAA9412A2AAEE +S315500008A0D4330000170000159612E155153FFFE4AA +S315500008B0D63025549412A090D4330000D61022007E +S315500008C09A100008960AE0FFD6320000901030F0D9 +S315500008D0D0330000D613400098100009901AE03724 +S315500008E080A0000894603FFF901AE01C80A000088A +S315500008F092603FFF8092800912800007821020008C +S3155000090080A2E0C20280000480A2E0201280004251 +S3155000091090102000113FFFEA94102AAA901222AAA2 +S31550000920D03280001300001592126155113FFFE43A +S31550000930D230255490122090D0328000D21022020C +S31550000940901030F0920A60FFD2330000D03280000F +S31550000950D013400080A220370280002A80A2202097 +S31550000960D41300000280001D912AA0109002BF47A8 +S31550000970912A201091322010952AA01080A2200290 +S315500009809532A01092602000901AA0B580A0000861 +S31550000990920A600190603FFF809240083280000BBF +S315500009A08210200180A2A0B90280000A80A2A0BABB +S315500009B00280000880A2A0EF0280000680A2A0DA82 +S315500009C02280000282102001108000139010000136 +S315500009D010BFFFFE821020019132201080A220EE1F +S315500009E012BFFFE49002BF479010201CD033400046 +S315500009F0921020B9D233000010BFFFDD941020B9F9 +S31550000A00D413000080A2A03402BFFFF880A2202099 +S31550000A1030BFFFD50100000081C3E008010000008F +S31550000A209DE3BF88B72EE010C037BFF4B736E0104D +S31550000A30A0100018C027BFEC80A6E0BA14800006AC +S31550000A4080A6E0DA80A6E0B916800006113FFFEADC +S31550000A5080A6E0B512800023B0102000113FFFEAB7 +S31550000A6094102AAA901222AAD032800013000015A0 +S31550000A7092126155113FFFE8D2302554901220A0B2 +S31550000A80D0328000F837BFF2D017BFF2130000C340 +S31550000A90D0340000B612613FD217BFF27FFFFF215C +S31550000AA090100010B0100008D007BFEC9002200143 +S31550000AB0D027BFECD2140000D017BFF280A2000995 +S31550000AC00280000880A62001128000060100000066 +S31550000AD0D007BFEC80A2001B08BFFFF0010000004A +S31550000AE0D007BFEC130000C39212613F80A24008AA +S31550000AF094403FFFB00E000A0100000081C7E00895 +S31550000B0081E800009DE3BF9811140005D4022150DE +S31550000B10A210200080A4400AA410001B9A102000A6 +S31550000B20A0102000A610200116800012961020005A +S31550000B30912EA010B5322010932EE0109810000A76 +S31550000B40111400059332601094122060D002A00C4C +S31550000B5080A2001A22800048D002A0109602E0011E +S31550000B6080A2C00C06BFFFFA9402A05011140005D3 +S31550000B70D202215080A2C009028000449010200168 +S31550000B8080A6200008800016912AE0029002000BF1 +S31550000B9013140005B4126060992A20049E10200197 +S31550000BA0912C200290020010912A200290030008F6 +S31550000BB09002001AD4022004A2046001D202200836 +S31550000BC080A4400A932BC0099A034009A0643FFFB2 +S31550000BD080A6000D18BFFFF4912C200280A660005D +S31550000BE00480001F932AE0029202400BB60CA0FF2D +S31550000BF011140005A4122060B52A60049210001B3F +S31550000C007FFFFEEA90100018932C200292024010AB +S31550000C10932A6002920680099402401280A2200014 +S31550000C2002800013A2046001D202A0089010200195 +S31550000C30912A000980A64008B00600080680000ADE +S31550000C40B2264008D002A00480A44008A0643FFF0A +S31550000C5080A6600014BFFFEB9210001B1080000BA3 +S31550000C6090100013108000099010200110BFFFFC57 +S31550000C70A610200080A2000932BFFFBA9602E001FA +S31550000C8010BFFFBC1114000581C7E00891E80008A9 +S31550000C9013140005D40A61801708000013000013CE +S31550000CA09212630C952AA00294028009D202C00ABD +S31550000CB0941000089132601F80A22001028000002B +S31550000CC09132601D808A20012280000490102001FC +S31550000CD0C022800030800002D022800081C3E0080C +S31550000CE09010000911140005D20A21801508000041 +S31550000CF0110000139012230C932A600292024008AE +S31550000D00D20280099132601F80A220010280000029 +S31550000D100100000081C3E008901000099DE3BF90D8 +S31550000D2011140005E00A2180B00E20FF11140005B1 +S31550000D3090122154B12E2002E2020018A12C20025A +S31550000D40110000139012230CA00400087FFFFFD15E +S31550000D509007BFF4D207BFF411060000932A601E15 +S31550000D60921240112308000092124008D2244010DB +S31550000D707FFFFFC89007BFF4D207BFF411070000EA +S31550000D80932A601E92124008D22440107FFFFFC162 +S31550000D909007BFF4D207BFF411030000932A601ED8 +S31550000DA092124008D22440107FFFFFBA9007BFF43A +S31550000DB0D207BFF41104000090122003932A601E3C +S31550000DC092124008D22440107FFFFFB29007BFF422 +S31550000DD0D207BFF411050000932A601E92124008F4 +S31550000DE0D22440107FFFFFC0010000000100000028 +S31550000DF081C7E00881E800009DE3BF90111400050B +S31550000E00E00A218025080000110000139012230CDF +S31550000E10A12C2002A00400087FFFFF9E9007BFF47C +S31550000E20D207BFF411050000932A601E92124008A3 +S31550000E30D22480107FFFFF979007BFF4A2100008BE +S31550000E40D007BFF427040000912A201E90120013E9 +S31550000E50D02480107FFFFF8F9007BFF4D207BFF4D6 +S31550000E6011040004932A601E92124008D224801066 +S31550000E707FFFFF889007BFF4D007BFF4A20C60FF36 +S31550000E80912A201E9012001190120013D024801027 +S31550000E907FFFFF95010000000100000081C7E008B8 +S31550000EA081E800009DE3BF9011140005D20A21800D +S31550000EB02708000011000013932A60029012230C99 +S31550000EC09202400893326002AC100009AB2A6002CD +S31550000ED0AE1000097FFFFF6F9007BFF4D007BFF435 +S31550000EE023030000912A201E90120011D024C01511 +S31550000EF07FFFFF7D0100000091322016A08A200F4F +S31550000F0032800011A2102000A4100011A32DA002BF +S31550000F107FFFFF609007BFF4D207BFF4932A601E8D +S31550000F2092124012D224C0117FFFFF6F01000000C1 +S31550000F3091322016A08A200F02BFFFF60100000052 +S31550000F40A210200080A440101ABFFFE3A52DE00296 +S31550000F50290100007FFFFF4F9007BFF4D007BFF471 +S31550000F60A2046001912A201E90120014D024C012AF +S31550000F707FFFFF5D01000000D02E0000808A20FF19 +S31550000F8002800006B006200180A440100ABFFFF27E +S31550000F900100000030BFFFD00100000081C7E0080B +S31550000FA081E800009DE3BF9011140005D20A21800C +S31550000FB025080000D40E000011000013932A600289 +S31550000FC09012230C80A2A000028000849202400856 +S31550000FD0AD2A60109135A012A72A2002AA10000847 +S31550000FE0A81000137FFFFF2B9007BFF4D007BFF464 +S31550000FF021030000912A201E90120010D024801345 +S315500010007FFFFF3901000000900A200680A22006CB +S315500010100280001001000000A2100010A12D6002F5 +S315500010207FFFFF1C9007BFF4D207BFF4932A601EC0 +S3155000103092124011D22480107FFFFF2B0100000036 +S31550001040900A200680A2200612BFFFF6010000007B +S315500010507FFFFF109007BFF4D007BFF4D20E0000F9 +S31550001060912A201E90120009D02480147FFFFF1E63 +S31550001070B0062001D00E000080A2200012BFFFDA79 +S31550001080010000009135A010D404800880A2A00071 +S315500010900680004C010000009132A01D808A20017C +S315500010A00280004690102001C027BFF4D007BFF43D +S315500010B013030000912A201E901200099335A010A8 +S315500010C0D0248009D404800980A2A0000680003470 +S315500010D0900AA00680A22006028000169135A01222 +S315500010E09A1000089E102001972A2002190300002A +S315500010F09132A01D808A2001128000039210200098 +S315500011009210000F912A601E9012000CD024800B72 +S31550001110D404800B80A2A0000680001A900AA00674 +S3155000112080A2200612BFFFF49132A01DD227BFF431 +S315500011309132A01D808A200102800010901020015B +S31550001140C027BFF4D007BFF49335A010912A201EB4 +S31550001150D0248009D404800980A2A00016800021E2 +S3155000116090100009D404800880A2A00006BFFFFE9C +S31550001170010000003080001B10BFFFF3D027BFF4E2 +S31550001180912B6002D404800880A2A00006BFFFFE07 +S315500011900100000010BFFFE3900AA006901000095E +S315500011A0D404800880A2A00006BFFFFE0100000004 +S315500011B010BFFFC9900AA00610BFFFBDD027BFF4CD +S315500011C0D404800880A2A00006BFFFFE01000000E4 +S315500011D010BFFFB39132A01D10BFFFABAD2A6010F8 +S315500011E00100000081C7E00881E800009DE3BF9838 +S315500011F035140005F60EA180921000183500001324 +S31550001200B416A30CB72EE002B606C01A992EE010FB +S31550001210B53320129B2EA002A210001AA610001958 +S315500012203B080000961020009410000DA410001AE0 +S31550001230F807400D80A7200006800064B137201DB6 +S31550001240B00E200180A00018B0603FFFB12E201EC6 +S3155000125033030000B0160019F027400AF807400A79 +S3155000126080A7200006800052B1372016B48E200F7A +S315500012701280001A82102000B3332012310003D09E +S31550001280901000199E162240B32E600237030000BC +S3155000129080A0400F8200600118800053B0102000DB +S315500012A0B137201DB00E200180A00018B0603FFF5E +S315500012B0B12E201EB016001BF0274019F807401912 +S315500012C080A7200006800033B1372016B48E200F39 +S315500012D002BFFFF180A0400F8210200080A0401A6C +S315500012E01ABFFFD4B1332012B72E20029010001827 +S315500012F09E10001BA0100018F807401B80A7200066 +S315500013000680001DB137201DB00E200180A00018A8 +S31550001310B0603FFFB12E201E33010000B0160019F9 +S31550001320F027400FF807400F80A720000680000CDA +S31550001330B12C20029602E001F82A400080A2C01388 +S3155000134002800029B010000B8200600180A0401A74 +S315500013500ABFFFEA9202600130BFFFB6F807401895 +S3155000136080A7200006BFFFFE0100000010BFFFF35C +S315500013709602E001B12A2002F807401880A7200003 +S3155000138006BFFFFE0100000010BFFFE0B137201D71 +S31550001390B12A2002F807401880A7200006BFFFFE9A +S315500013A00100000010BFFFCAB1372016B12CA002B1 +S315500013B0F807401880A7200006BFFFFE0100000076 +S315500013C010BFFFABB1372016B12C6002F80740189A +S315500013D080A7200006BFFFFE0100000010BFFF9946 +S315500013E0B137201D0100000081C7E00881E80000E8 +S315500013F09DE3BF987FFFFE81B00E20FF7FFFFE4822 +S3155000140081E800000100000000000000000000001C +S315500014100000000000000000000000000000000076 +S315500014204572726F723400004572726F72330000EB +S315500014304F4B0000000000004572726F7232000080 +S31550001440454E4400000000004572726F7235000030 +S315500014504572726F723100000000000000000000FB +S3155000146000000000000000010000000E00000037E0 +S31550001470000000B500004000000000030000000D11 +S3155000148000000037000000B5000080000000000496 +S315500014900000000F00000037000000B500010000FA +S315500014A00000000B0000001000000037000000B5DF +S315500014B00000000000000007000000100000001CA3 +S315500014C0000000B900007000000000080000000F86 +S315500014D00000001C000000B9000078000000000A5F +S315500014E00000000D0000001C000000B900007C0048 +S315500014F00000000B0000000E0000001C000000B9A8 +S31550001500000000000000000F000000100000001C4A +S31550001510000000DA00007000000000100000000F0C +S315500015200000001C000000DA0000700000000012ED +S315500015300000000D0000001C000000DA00007000E2 +S31550001540000000130000000E0000001C000000DA2E +S3155000155000000003000001FB000000FD0000007EBB +S315500015600000003F0000002A000000150000000A9D +S3115000157000000000000000000000000019 +S70550000000AA diff --git a/configure.ac b/configure.ac index bee9480d..0fcd97e2 100644 --- a/configure.ac +++ b/configure.ac @@ -163,6 +163,7 @@ ao-tools/ao-load/Makefile ao-tools/ao-telem/Makefile ao-tools/ao-stmload/Makefile ao-tools/ao-send-telem/Makefile +ao-tools/ao-sky-flash/Makefile ao-utils/Makefile src/Version ])