altos/altosui: Report log format in the version command
[fw/altos] / altosui / AltosEepromDownload.java
index fad1646072e2890604773c14f31ab51594e4f03b..417aab000f25158489ccc7255145117824029973 100644 (file)
@@ -89,9 +89,6 @@ public class AltosEepromDownload implements Runnable {
                }
        }
 
-       static final int        log_full = 1;
-       static final int        log_tiny = 2;
-
        boolean                 done;
        int                     state;
 
@@ -155,14 +152,17 @@ public class AltosEepromDownload implements Runnable {
                                int     s = v ^ 0x8000;
 
                                if (Altos.ao_flight_startup <= s && s <= Altos.ao_flight_invalid) {
-                                       r = new AltosEepromRecord(Altos.AO_LOG_STATE, tiny_tick, s, 0);
-                                       if (s == Altos.ao_flight_landed)
+                                       state = s;
+                                       r = new AltosEepromRecord(Altos.AO_LOG_STATE, tiny_tick, state, 0);
+                                       if (state == Altos.ao_flight_landed)
                                                done = true;
+                                       state = s;
                                        any_valid = true;
                                } else {
                                        if (v != 0xffff)
                                                any_valid = true;
-                                       r = new AltosEepromRecord(Altos.AO_LOG_HEIGHT, tiny_tick, v, 0);
+
+                                       r = new AltosEepromRecord(Altos.AO_LOG_PRESSURE, tiny_tick, 0, v);
 
                                        /*
                                         * The flight software records ascent data every 100ms, and descent
@@ -183,7 +183,7 @@ public class AltosEepromDownload implements Runnable {
 
        void CaptureLog(AltosEepromLog log) throws IOException, InterruptedException, TimeoutException {
                int                     block, state_block = 0;
-               int                     log_style = 0;
+               int                     log_format = flights.config_data.log_format;
 
                state = 0;
                done = false;
@@ -212,21 +212,24 @@ public class AltosEepromDownload implements Runnable {
                        AltosEepromChunk        eechunk = new AltosEepromChunk(serial_line, block);
 
                        /*
-                        * Figure out what kind of data is there
+                        * Guess what kind of data is there if the device
+                        * didn't tell us
                         */
 
-                       if (block == log.start_block) {
-                               if (eechunk.data(0) == Altos.AO_LOG_FLIGHT)
-                                       log_style = log_full;
-                               else
-                                       log_style = log_tiny;
+                       if (log_format == Altos.AO_LOG_FORMAT_UNKNOWN) {
+                               if (block == log.start_block) {
+                                       if (eechunk.data(0) == Altos.AO_LOG_FLIGHT)
+                                               log_format = Altos.AO_LOG_FORMAT_FULL;
+                                       else
+                                               log_format = Altos.AO_LOG_FORMAT_TINY;
+                               }
                        }
 
-                       switch (log_style) {
-                       case log_full:
+                       switch (log_format) {
+                       case Altos.AO_LOG_FORMAT_FULL:
                                CaptureFull(eechunk);
                                break;
-                       case log_tiny:
+                       case Altos.AO_LOG_FORMAT_TINY:
                                CaptureTiny(eechunk);
                                break;
                        }
@@ -261,11 +264,11 @@ public class AltosEepromDownload implements Runnable {
        }
 
        public void run () {
-               if (remote)
-                       serial_line.start_remote();
-
                try {
                        boolean failed = false;
+                       if (remote)
+                               serial_line.start_remote();
+
                        for (AltosEepromLog log : flights) {
                                parse_exception = null;
                                if (log.download) {
@@ -292,11 +295,12 @@ public class AltosEepromDownload implements Runnable {
                                                   serial_line.device.toShortString()),
                                     "Connection Failed",
                                     JOptionPane.ERROR_MESSAGE);
+               } finally {
+                       if (remote)
+                               serial_line.stop_remote();
+                       serial_line.flush_output();
                }
-               if (remote)
-                       serial_line.stop_remote();
                monitor.done();
-               serial_line.flush_output();
                if (listener != null) {
                        Runnable r = new Runnable() {
                                        public void run() {