altos: Support staging by going back to boost as needed
[fw/altos] / altosui / AltosEepromRecord.java
index 5a6738177601a8e60dc9008d01e5ee22599936d6..d8a07951a72369f7a73fa7cecd45565bb3c51476 100644 (file)
@@ -26,7 +26,9 @@ import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
-import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.*;
+
+import libaltosJNI.*;
 
 public class AltosEepromRecord {
        public int      cmd;
@@ -36,6 +38,29 @@ public class AltosEepromRecord {
        public String   data;
        public boolean  tick_valid;
 
+       static final int        record_length = 8;
+
+       public AltosEepromRecord (AltosEepromChunk chunk, int start) throws ParseException {
+
+               cmd = chunk.data(start);
+               tick_valid = true;
+
+               tick_valid = !chunk.erased(start, record_length);
+               if (tick_valid) {
+                       if (AltosConvert.checksum(chunk.data, start, record_length) != 0)
+                               throw new ParseException(String.format("invalid checksum at 0x%x",
+                                                                      chunk.address + start), 0);
+               } else {
+                       cmd = Altos.AO_LOG_INVALID;
+               }
+
+               tick = chunk.data16(start + 2);
+               a = chunk.data16(start + 4);
+               b = chunk.data16(start + 6);
+
+               data = null;
+       }
+
        public AltosEepromRecord (String line) {
                tick_valid = false;
                tick = 0;
@@ -82,6 +107,9 @@ public class AltosEepromRecord {
                                } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
                                        cmd = Altos.AO_LOG_RADIO_CAL;
                                        a = Integer.parseInt(tokens[2]);
+                               } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
+                                       cmd = Altos.AO_LOG_MAX_FLIGHT_LOG;
+                                       a = Integer.parseInt(tokens[3]);
                                } else if (tokens[0].equals("manufacturer")) {
                                        cmd = Altos.AO_LOG_MANUFACTURER;
                                        data = tokens[1];
@@ -91,6 +119,9 @@ public class AltosEepromRecord {
                                } else if (tokens[0].equals("serial-number")) {
                                        cmd = Altos.AO_LOG_SERIAL_NUMBER;
                                        a = Integer.parseInt(tokens[1]);
+                               } else if (tokens[0].equals("log-format")) {
+                                       cmd = Altos.AO_LOG_LOG_FORMAT;
+                                       a = Integer.parseInt(tokens[1]);
                                } else if (tokens[0].equals("software-version")) {
                                        cmd = Altos.AO_LOG_SOFTWARE_VERSION;
                                        data = tokens[1];