altosdroid: Fix offline map messages to match new meanings
[fw/altos] / altoslib / AltosEepromRecord.java
index c479a6215d49b70cd44fcb3df3d9f0ea67fea1b5..22cb8f894b2f7d73ac5078032b09026304d01b06 100644 (file)
@@ -12,7 +12,7 @@
  * General Public License for more details.
  */
 
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_13;
 
 public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord> {
 
@@ -50,8 +50,22 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
                return data8(i) | (data8(i+1) << 8) | (data8(i+2) << 16) | (data8(i+3) << 24);
        }
 
+       public boolean empty(int s) {
+               for (int i = 0; i < length; i++)
+                       if (eeprom.data8(s + i) != 0xff)
+                               return false;
+               return true;
+       }
+
        public boolean valid(int s) {
-               return AltosConvert.checksum(eeprom.data, s, length) == 0;
+               int     ck = AltosConvert.checksum(eeprom.data, s, length);
+
+               if (ck != 0) {
+                       ++eeprom.errors;
+                       System.out.printf("invalid checksum 0x%x at 0x%x\n", ck, s);
+                       return false;
+               }
+               return true;
        }
 
        public boolean valid() {
@@ -83,18 +97,16 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
 
        /* AltosDataProvider */
        public void provide_data(AltosDataListener listener, AltosCalData cal_data) {
-               cal_data.set_tick(tick());
+               listener.set_tick(tick());
                if (cmd() == AltosLib.AO_LOG_FLIGHT)
                        cal_data.set_boost_tick();
                listener.set_time(cal_data.time());
 
                /* Flush any pending GPS changes */
                if (!AltosLib.is_gps_cmd(cmd())) {
-                       AltosGPS gps = cal_data.temp_gps();
-                       if (gps != null) {
+                       AltosGPS gps = listener.temp_gps();
+                       if (gps != null)
                                listener.set_gps(gps);
-                               cal_data.reset_temp_gps();
-                       }
                }
        }
 
@@ -102,25 +114,18 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
                int     s = start + length;
 
                while (s + length <= eeprom.data.size()) {
-                       if (valid(s))
+                       if (!empty(s) && valid(s))
                                return s;
                        s += length;
                }
                return -1;
        }
 
-       public boolean hasNext() {
-               return next_start() >= 0;
-       }
-
        public abstract AltosEepromRecord next();
 
        public AltosEepromRecord(AltosEeprom eeprom, int start, int length) {
                this.eeprom = eeprom;
                this.start = start;
                this.length = length;
-
-               while (start + length < eeprom.data.size() && !valid())
-                       start += length;
        }
 }