X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao-tools%2Fao-usbload%2Fao-usbload.c;h=0c8a23dfc60115786aa0be0c57c243cc6d0c159a;hp=860eb8a5d4778a47f3defdb6d397941bea9c4bed;hb=25aaf6122cbddcbc6a80460dac8ccb9f45743ae0;hpb=ebb36d56c732ffe9cdb8d2ea53d00e1d4ece8f97 diff --git a/ao-tools/ao-usbload/ao-usbload.c b/ao-tools/ao-usbload/ao-usbload.c index 860eb8a5..0c8a23df 100644 --- a/ao-tools/ao-usbload/ao-usbload.c +++ b/ao-tools/ao-usbload/ao-usbload.c @@ -82,6 +82,7 @@ check_flashed(struct cc_usb *cc) static const struct option options[] = { { .name = "tty", .has_arg = 1, .val = 'T' }, { .name = "device", .has_arg = 1, .val = 'D' }, + { .name = "raw", .has_arg = 0, .val = 'r' }, { .name = "cal", .has_arg = 1, .val = 'c' }, { .name = "serial", .has_arg = 1, .val = 's' }, { .name = "verbose", .has_arg = 1, .val = 'v' }, @@ -90,7 +91,7 @@ static const struct option options[] = { static void usage(char *program) { - fprintf(stderr, "usage: %s [--verbose=] [--device=] [-tty=] [--cal=] [--serial=] file.{elf,ihx}\n", program); + fprintf(stderr, "usage: %s [--raw] [--verbose=] [--device=] [-tty=] [--cal=] [--serial=] file.{elf,ihx}\n", program); exit(1); } @@ -119,6 +120,7 @@ main (int argc, char **argv) char *device = NULL; char *filename; Elf *e; + int raw = 0; char *serial_end; unsigned int serial = 0; char *serial_ucs2; @@ -141,7 +143,7 @@ main (int argc, char **argv) struct ao_sym *file_symbols; int num_file_symbols; - while ((c = getopt_long(argc, argv, "T:D:c:s:v:", options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "rT:D:c:s:v:", options, NULL)) != -1) { switch (c) { case 'T': tty = optarg; @@ -149,6 +151,9 @@ main (int argc, char **argv) case 'D': device = optarg; break; + case 'r': + raw = 1; + break; case 'c': cal = strtoul(optarg, &cal_end, 10); if (cal_end == optarg || *cal_end != '\0') @@ -184,9 +189,11 @@ main (int argc, char **argv) } else usage(argv[0]); - if (!ao_editaltos_find_symbols(file_symbols, num_file_symbols, ao_symbols, ao_num_symbols)) { - fprintf(stderr, "Cannot find required symbols\n"); - usage(argv[0]); + if (!raw) { + if (!ao_editaltos_find_symbols(file_symbols, num_file_symbols, ao_symbols, ao_num_symbols)) { + fprintf(stderr, "Cannot find required symbols\n"); + usage(argv[0]); + } } { @@ -198,7 +205,7 @@ main (int argc, char **argv) if (!this_tty) this_tty = cc_usbdevs_find_by_arg(device, "AltosFlash"); if (!this_tty) - this_tty = cc_usbdevs_find_by_arg(device, "MegaMetrum"); + this_tty = cc_usbdevs_find_by_arg(device, "TeleMega"); if (!this_tty) this_tty = getenv("ALTOS_TTY"); if (!this_tty) @@ -255,34 +262,36 @@ main (int argc, char **argv) #endif } - /* Go fetch existing config values - * if available - */ - was_flashed = check_flashed(cc); + if (!raw) { + /* Go fetch existing config values + * if available + */ + was_flashed = check_flashed(cc); - if (!serial) { - if (!was_flashed) { - fprintf (stderr, "Must provide serial number\n"); - done(cc, 1); + if (!serial) { + if (!was_flashed) { + fprintf (stderr, "Must provide serial number\n"); + done(cc, 1); + } + serial = get_uint16(cc, AO_SERIAL_NUMBER); + if (!serial || serial == 0xffff) { + fprintf (stderr, "Invalid existing serial %d\n", serial); + done(cc, 1); + } } - serial = get_uint16(cc, AO_SERIAL_NUMBER); - if (!serial || serial == 0xffff) { - fprintf (stderr, "Invalid existing serial %d\n", serial); - done(cc, 1); + + if (!cal && AO_RADIO_CAL && was_flashed) { + cal = get_uint32(cc, AO_RADIO_CAL); + if (!cal || cal == 0xffffffff) { + fprintf (stderr, "Invalid existing rf cal %d\n", cal); + done(cc, 1); + } } - } - if (!cal && AO_RADIO_CAL && was_flashed) { - cal = get_uint32(cc, AO_RADIO_CAL); - if (!cal || cal == 0xffffffff) { - fprintf (stderr, "Invalid existing rf cal %d\n", cal); + if (!ao_editaltos(load, serial, cal)) done(cc, 1); - } } - if (!ao_editaltos(load, serial, cal)) - done(cc, 1); - /* And flash the resulting image to the device */ success = ao_self_write(cc, load);