X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosEepromList.java;h=f9bd2748a79ca539ac5cc248a2bd486f663dcefc;hp=ac4a29de394ec461788915d16fcf05fbbdbaaa4e;hb=19243ecc9b5bbdcc069ae24acf1ca807322c84d8;hpb=440d52e34364fdeeddc76a2d744cc6d1c934364f diff --git a/altosui/AltosEepromList.java b/altosui/AltosEepromList.java index ac4a29de..f9bd2748 100644 --- a/altosui/AltosEepromList.java +++ b/altosui/AltosEepromList.java @@ -17,18 +17,17 @@ package altosui; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; import java.util.*; import java.text.*; -import java.util.prefs.*; import java.util.concurrent.*; +import org.altusmetrum.AltosLib.*; -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; @@ -42,19 +41,31 @@ 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(); config_data = new AltosConfigData (serial_line); - if (config_data.serial == 0) - throw new IOException("no serial number found"); +// if (config_data.serial == 0) +// throw new IOException("no serial number found"); ArrayList flights = new ArrayList(); - if (config_data.flight_log_max != 0) { + + if (config_data.flight_log_max != 0 || config_data.log_format != 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 +76,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 +87,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)); + add(new AltosEepromLog(config_data, serial_line, + 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