X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosEepromList.java;h=185fec9118a146d228367b8ff813a3ac36383f16;hp=ac4a29de394ec461788915d16fcf05fbbdbaaa4e;hb=3336d0f726afd1d43cf62280940e5fb91dab2e91;hpb=440d52e34364fdeeddc76a2d744cc6d1c934364f diff --git a/altosui/AltosEepromList.java b/altosui/AltosEepromList.java index ac4a29de..185fec91 100644 --- a/altosui/AltosEepromList.java +++ b/altosui/AltosEepromList.java @@ -30,6 +30,12 @@ import java.util.concurrent.*; import libaltosJNI.*; +/* + * Temporary structure to hold the list of stored flights; + * each of these will be queried in turn to generate more + * complete information + */ + class AltosEepromFlight { int flight; int start; @@ -42,10 +48,16 @@ class AltosEepromFlight { } } +/* + * Construct a list of flights available in a connected device + */ + public class AltosEepromList extends ArrayList { AltosConfigData config_data; - public AltosEepromList (AltosSerial serial_line, boolean remote) throws IOException, InterruptedException, TimeoutException { + public AltosEepromList (AltosSerial serial_line, boolean remote) + throws IOException, InterruptedException, TimeoutException + { try { if (remote) serial_line.start_remote(); @@ -54,7 +66,13 @@ public class AltosEepromList extends ArrayList { throw new IOException("no serial number found"); ArrayList flights = new ArrayList(); + if (config_data.flight_log_max != 0) { + + /* Devices with newer firmware will support the 'l' + * command which will list the region of storage + * occupied by each available flight + */ serial_line.printf("l\n"); for (;;) { String line = serial_line.get_reply(5000); @@ -65,7 +83,6 @@ public class AltosEepromList extends ArrayList { if (line.contains("Syntax")) continue; String[] tokens = line.split("\\s+"); - System.out.printf("got line %s (%d tokens)\n", line, tokens.length); if (tokens.length < 6) break; @@ -77,27 +94,32 @@ public class AltosEepromList extends ArrayList { start = AltosParse.parse_hex(tokens[3]); if (tokens[4].equals("end")) end = AltosParse.parse_hex(tokens[5]); - System.out.printf("parsed flight %d %x %x\n", flight, start, end); if (flight > 0 && start >= 0 && end > 0) flights.add(new AltosEepromFlight(flight, start, end)); } catch (ParseException pe) { System.out.printf("Parse error %s\n", pe.toString()); } } } else { + + /* Older devices will hold only a single + * flight. This also assumes that any older + * device will have a 1MB flash device + */ flights.add(new AltosEepromFlight(0, 0, 0xfff)); } + + /* With the list of flights collected, collect more complete + * information on them by reading the first block or two of + * data. This will add GPS coordinates and a date. For older + * firmware, this will also extract the flight number. + */ for (AltosEepromFlight flight : flights) { - System.out.printf("Scanning flight %d %x %x\n", flight.flight, flight.start, flight.end); add(new AltosEepromLog(serial_line, config_data.serial, - flight.start, flight.end)); + flight.flight, flight.start, flight.end)); } } finally { if (remote) serial_line.stop_remote(); serial_line.flush_output(); } - for (int i = 0; i < size(); i++) { - AltosEepromLog l = get(i); - System.out.printf("Found flight %d at %x - %x\n", l.flight, l.start_block, l.end_block); - } } } \ No newline at end of file