altoslib: MegaMetrum eeprom never loses GPS date
authorKeith Packard <keithp@keithp.com>
Sun, 21 Oct 2012 20:42:00 +0000 (13:42 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 21 Oct 2012 20:42:00 +0000 (13:42 -0700)
TeleMetrum had a firmware bug that would fail to record the GPS date
and time correctly, that was hacked around in altosui, but isn't
needed for MegaMetrum. Remove those hacks from the MM path.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosEepromMega.java
altoslib/AltosEepromMegaIterable.java
altoslib/AltosOrderedMegaRecord.java

index 26bacf8d854e33474457c4c8ef1a485e47232918..25a29fb2f9e81a9cb4b3059d4c7d9a8cfaaf69e3 100644 (file)
@@ -66,12 +66,7 @@ public class AltosEepromMega {
        public int mag_x() { return data16(20); }
        public int mag_y() { return data16(22); }
        public int mag_z() { return data16(24); }
-       public int accel() {
-               int a = data16(26);
-               if (a != 0xffff)
-                       return a;
-               return accel_y();
-       }
+       public int accel() { return data16(26); }
 
        /* AO_LOG_VOLT elements */
        public int v_batt() { return data16(0); }
index 1ab2fcc8b473aee35e45a4306c5f32d481e19d89..003bff44a8f9128bcf2724632aef4ffe01af3ebb 100644 (file)
@@ -347,40 +347,6 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                }
        }
 
-       /*
-        * Given an AO_LOG_GPS_TIME record with correct time, and one
-        * missing time, rewrite the missing time values with the good
-        * ones, assuming that the difference between them is 'diff' seconds
-        */
-       void update_time(AltosOrderedMegaRecord good, AltosOrderedMegaRecord bad) {
-
-               int diff = (bad.tick - good.tick + 50) / 100;
-
-               int hour = (good.a & 0xff);
-               int minute = (good.a >> 8);
-               int second = (good.b & 0xff);
-               int flags = (good.b >> 8);
-               int seconds = hour * 3600 + minute * 60 + second;
-
-               /* Make sure this looks like a good GPS value */
-               if ((flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> AltosLib.AO_GPS_NUM_SAT_SHIFT < 4)
-                       flags = (flags & ~AltosLib.AO_GPS_NUM_SAT_MASK) | (4 << AltosLib.AO_GPS_NUM_SAT_SHIFT);
-               flags |= AltosLib.AO_GPS_RUNNING;
-               flags |= AltosLib.AO_GPS_VALID;
-
-               int new_seconds = seconds + diff;
-               if (new_seconds < 0)
-                       new_seconds += 24 * 3600;
-               int new_second = (new_seconds % 60);
-               int new_minutes = (new_seconds / 60);
-               int new_minute = (new_minutes % 60);
-               int new_hours = (new_minutes / 60);
-               int new_hour = (new_hours % 24);
-
-               bad.a = new_hour + (new_minute << 8);
-               bad.b = new_second + (flags << 8);
-       }
-
        /*
         * Read the whole file, dumping records into a RB tree so
         * we can enumerate them in time order -- the eeprom data
@@ -416,48 +382,6 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                                        continue;
                                }
 
-                               /* Two firmware bugs caused the loss of some GPS data.
-                                * The flight date would never be recorded, and often
-                                * the flight time would get overwritten by another
-                                * record. Detect the loss of the GPS date and fix up the
-                                * missing time records
-                                */
-                               if (record.cmd == AltosLib.AO_LOG_GPS_DATE) {
-                                       gps_date_record = record;
-                                       continue;
-                               }
-
-                               /* go back and fix up any missing time values */
-                               if (record.cmd == AltosLib.AO_LOG_GPS_TIME) {
-                                       last_gps_time = record;
-                                       if (missing_time) {
-                                               Iterator<AltosOrderedMegaRecord> iterator = records.iterator();
-                                               while (iterator.hasNext()) {
-                                                       AltosOrderedMegaRecord old = iterator.next();
-                                                       if (old.cmd == AltosLib.AO_LOG_GPS_TIME &&
-                                                           old.a == -1 && old.b == -1)
-                                                       {
-                                                               update_time(record, old);
-                                                       }
-                                               }
-                                               missing_time = false;
-                                       }
-                               }
-
-                               if (record.cmd == AltosLib.AO_LOG_GPS_LAT) {
-                                       if (last_gps_time == null || last_gps_time.tick != record.tick) {
-                                               AltosOrderedMegaRecord add_gps_time = new AltosOrderedMegaRecord(AltosLib.AO_LOG_GPS_TIME,
-                                                                                                        record.tick,
-                                                                                                        -1, -1, index-1);
-                                               if (last_gps_time != null)
-                                                       update_time(last_gps_time, add_gps_time);
-                                               else
-                                                       missing_time = true;
-
-                                               records.add(add_gps_time);
-                                               record.index = index++;
-                                       }
-                               }
                                records.add(record);
 
                                /* Bail after reading the 'landed' record; we're all done */
index 05423dd94f1ad240bfd1ba0d25f35588b726e415..3aaf7b5b56066c173ce687ae112b7ee2a6f6da2e 100644 (file)
@@ -43,18 +43,6 @@ class AltosOrderedMegaRecord extends AltosEepromMega implements Comparable<Altos
                index = in_index;
        }
 
-       public AltosOrderedMegaRecord(int in_cmd, int in_tick, int in_a, int in_b, int in_index) {
-               super(in_cmd, in_tick);
-               a = in_a;
-               b = in_b;
-               index = in_index;
-       }
-
-       public String toString() {
-               return String.format("%d.%d %04x %04x %04x",
-                                    cmd, index, tick, a, b);
-       }
-
        public int compareTo(AltosOrderedMegaRecord o) {
                int     tick_diff = tick - o.tick;
                if (tick_diff != 0)