altos: Rename telemetry to telemetry_orig
[fw/altos] / altosui / AltosEepromRecord.java
index 5a6738177601a8e60dc9008d01e5ee22599936d6..52acb43568c11e48f3a43feb6fc7c475ef45187d 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,53 @@ public class AltosEepromRecord {
        public String   data;
        public boolean  tick_valid;
 
+       static final int        record_length = 8;
+
+       int[] ParseHex(String line) {
+               String[] tokens = line.split("\\s+");
+               int[] array = new int[tokens.length];
+
+               for (int i = 0; i < tokens.length; i++)
+                       try {
+                               array[i] = Integer.parseInt(tokens[i], 16);
+                       } catch (NumberFormatException ne) {
+                               return null;
+                       }
+               return array;
+       }
+
+       int checksum(int[] data, int start) {
+               int     csum = 0x5a;
+               for (int i = 0; i < record_length; i++)
+                       csum += data[i + start];
+               return csum & 0xff;
+       }
+
+       public AltosEepromRecord (AltosEepromChunk chunk, int start) throws ParseException {
+
+               cmd = chunk.data(start);
+               tick_valid = true;
+
+               int i;
+               for (i = 0; i < record_length; i++)
+                       if (chunk.data[start + i] != 0xff)
+                               break;
+               if (i != 8) {
+                       if (checksum(chunk.data, start) != 0)
+                               throw new ParseException(String.format("invalid checksum at 0x%x",
+                                                                      chunk.address + start), 0);
+               } else {
+                       cmd = Altos.AO_LOG_INVALID;
+                       tick_valid = false;
+               }
+
+               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 +131,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];