altosui: Add support for telemetry version 4
[fw/altos] / altosui / AltosEepromRecord.java
index e61a7159f19af1e4673b80ed560623ebeb7c3a47..e5196c50039a69434d36bd661f612ad50bb3ae08 100644 (file)
@@ -65,20 +65,31 @@ public class AltosEepromRecord {
                        throw new TimeoutException();
                int[] values = ParseHex(line);
 
-               if (values == null)
-                       throw new ParseException(String.format("invalid line %s", line), 0);
+               if (values == null || values.length < 9) {
+                       System.out.printf("invalid line %s", line);
+                       throw new ParseException(String.format("inalid line %s", line), 0);
+               }
                if (values[0] != (addr & 0xff))
                        throw new ParseException(String.format("data address out of sync at 0x%x",
                                                               addr), 0);
-               if (checksum(values) != 0)
-                       throw new ParseException(String.format("invalid checksum at 0x%x", addr), 0);
-
+               int i;
+               for (i = 1; i < values.length; i++)
+                       if (values[i] != 0xff)
+                               break;
                cmd = values[1];
+               tick_valid = true;
+               if (i != values.length) {
+                       if (checksum(values) != 0)
+                               throw new ParseException(String.format("invalid checksum at 0x%x in line %s", addr, line), 0);
+               } else {
+                       cmd = Altos.AO_LOG_INVALID;
+                       tick_valid = false;
+               }
+
                tick = values[3] + (values[4] << 8);
                a = values[5] + (values[6] << 8);
                b = values[7] + (values[8] << 8);
                data = null;
-               tick_valid = true;
        }
 
        public AltosEepromRecord (String line) {