Merge branch 'master' into new-state
[fw/altos] / altosui / AltosEepromDownload.java
index d1e5fdf0484cd2d51c3a70ef10f9e56761e81a46..95b17e2ae39c9133e6a0ac8589a2ac19c0574c26 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.*;
+import org.altusmetrum.altoslib_1.*;
 
 public class AltosEepromDownload implements Runnable {
 
@@ -113,7 +107,7 @@ public class AltosEepromDownload implements Runnable {
 
                extension = "eeprom";
                set_serial(flights.config_data.serial);
-               for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromRecord.record_length) {
+               for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromRecord.record_length) {
                        try {
                                AltosEepromRecord r = new AltosEepromRecord(eechunk, i);
                                if (r.cmd == Altos.AO_LOG_FLIGHT)
@@ -134,7 +128,8 @@ public class AltosEepromDownload implements Runnable {
                                }
                                if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed)
                                        done = true;
-                               any_valid = true;
+                               if (r.cmd != AltosLib.AO_LOG_INVALID)
+                                       any_valid = true;
                                Log(r);
                        } catch (ParseException pe) {
                                if (parse_exception == null)
@@ -219,7 +214,7 @@ public class AltosEepromDownload implements Runnable {
                boolean any_valid = false;
 
                extension = "science";
-               for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) {
+               for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) {
                        try {
                                AltosEepromTeleScience r = new AltosEepromTeleScience(eechunk, i);
                                if (r.type == AltosEepromTeleScience.AO_LOG_TELESCIENCE_START) {
@@ -272,7 +267,7 @@ public class AltosEepromDownload implements Runnable {
 
                extension = "mega";
                set_serial(flights.config_data.serial);
-               for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromMega.record_length) {
+               for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMega.record_length) {
                        try {
                                AltosEepromMega r = new AltosEepromMega(eechunk, i);
                                if (r.cmd == Altos.AO_LOG_FLIGHT)
@@ -288,13 +283,14 @@ public class AltosEepromDownload implements Runnable {
                                if (r.cmd == Altos.AO_LOG_GPS_TIME) {
                                        year = 2000 + r.data8(14);
                                        month = r.data8(15);
-                                       day = r.data8(14);
+                                       day = r.data8(16);
                                        want_file = true;
                                }
 
                                if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed)
                                        done = true;
-                               any_valid = true;
+                               if (r.cmd != AltosLib.AO_LOG_INVALID)
+                                       any_valid = true;
                                LogMega(r);
                        } catch (ParseException pe) {
                                if (parse_exception == null)
@@ -307,6 +303,53 @@ public class AltosEepromDownload implements Runnable {
                CheckFile(false);
        }
        
+       void LogMini(AltosEepromMini r) throws IOException {
+               if (r.cmd != Altos.AO_LOG_INVALID) {
+                       String log_line = String.format("%c %4x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n",
+                                                       r.cmd, r.tick,
+                                                       r.data8[0], r.data8[1], r.data8[2], r.data8[3],
+                                                       r.data8[4], r.data8[5], r.data8[6], r.data8[7],
+                                                       r.data8[8], r.data8[9], r.data8[10], r.data8[11]);
+                       if (eeprom_file != null)
+                               eeprom_file.write(log_line);
+                       else
+                               eeprom_pending.add(log_line);
+               }
+       }
+
+       void CaptureMini(AltosEepromChunk eechunk) throws IOException {
+               boolean any_valid = false;
+
+               extension = "mini";
+               set_serial(flights.config_data.serial);
+               for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMini.record_length) {
+                       try {
+                               AltosEepromMini r = new AltosEepromMini(eechunk, i);
+                               if (r.cmd == Altos.AO_LOG_FLIGHT)
+                                       set_flight(r.data16(0));
+
+                               /* Monitor state transitions to update display */
+                               if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) <= Altos.ao_flight_landed) {
+                                       state = r.data16(0);
+                                       if (state > Altos.ao_flight_pad)
+                                               want_file = true;
+                               }
+
+                               if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed)
+                                       done = true;
+                               any_valid = true;
+                               LogMini(r);
+                       } catch (ParseException pe) {
+                               if (parse_exception == null)
+                                       parse_exception = pe;
+                       }
+               }
+               if (!any_valid)
+                       done = true;
+
+               CheckFile(false);
+       }
+       
        void CaptureTelemetry(AltosEepromChunk eechunk) throws IOException {
                
        }
@@ -319,11 +362,9 @@ public class AltosEepromDownload implements Runnable {
                done = false;
                start = true;
 
-//             if (flights.config_data.serial == 0)
-//                     throw new IOException("no serial number found");
+               if (flights.config_data.serial < 0)
+                       throw new IOException("no serial number found");
 
-               log_format = 5;
-               System.out.printf ("log format: %d\n", log_format);
                /* Reset per-capture variables */
                flight = 0;
                year = 0;
@@ -338,7 +379,7 @@ public class AltosEepromDownload implements Runnable {
 
                state = 0; state_block = log.start_block;
                for (block = log.start_block; !done && block < log.end_block; block++) {
-                       monitor.set_value(Altos.state_to_string[state], state, block - state_block);
+                       monitor.set_value(AltosLib.state_name(state), state, block - state_block, block - log.start_block);
 
                        AltosEepromChunk        eechunk = new AltosEepromChunk(serial_line, block, block == log.start_block);
 
@@ -373,9 +414,15 @@ public class AltosEepromDownload implements Runnable {
                                extension = "science";
                                CaptureTeleScience(eechunk);
                                break;
-                       case AltosLib.AO_LOG_FORMAT_MEGAMETRUM:
+                       case AltosLib.AO_LOG_FORMAT_TELEMEGA:
                                extension = "mega";
                                CaptureMega(eechunk);
+                               break;
+                       case AltosLib.AO_LOG_FORMAT_EASYMINI:
+                       case AltosLib.AO_LOG_FORMAT_TELEMINI:
+                               extension = "eeprom";
+                               CaptureMini(eechunk);
+                               break;
                        }
                }
                CheckFile(true);