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' },
static void usage(char *program)
{
- fprintf(stderr, "usage: %s [--verbose=<verbose>] [--device=<device>] [-tty=<tty>] [--cal=<radio-cal>] [--serial=<serial>] file.{elf,ihx}\n", program);
+ fprintf(stderr, "usage: %s [--raw] [--verbose=<verbose>] [--device=<device>] [-tty=<tty>] [--cal=<radio-cal>] [--serial=<serial>] file.{elf,ihx}\n", program);
exit(1);
}
char *device = NULL;
char *filename;
Elf *e;
+ int raw = 0;
char *serial_end;
unsigned int serial = 0;
char *serial_ucs2;
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;
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')
} 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");
+ 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]);
+ }
+ }
{
int is_loader;
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)
#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);