Merge remote-tracking branch 'mjb/altosui_mjb'
[fw/altos] / altosui / AltosEepromList.java
index ac4a29de394ec461788915d16fcf05fbbdbaaa4e..f9bd2748a79ca539ac5cc248a2bd486f663dcefc 100644 (file)
 
 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<AltosEepromLog> {
        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<AltosEepromFlight> flights = new ArrayList<AltosEepromFlight>();
-                       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<AltosEepromLog> {
                                        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<AltosEepromLog> {
                                                        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