altoslib: Move computed state from AltosRecord to AltosState
[fw/altos] / altoslib / AltosEepromMegaIterable.java
index f62cc45bac38ed3bec280b9cef1d3cd58b9058ef..50f9d33de4b64f0aefa06e98d5480376258ad8d6 100644 (file)
@@ -20,52 +20,6 @@ package org.altusmetrum.AltosLib;
 import java.io.*;
 import java.util.*;
 import java.text.*;
-import java.util.prefs.*;
-import java.util.concurrent.LinkedBlockingQueue;
-
-/*
- * AltosRecords with an index field so they can be sorted by tick while preserving
- * the original ordering for elements with matching ticks
- */
-class AltosOrderedMegaRecord extends AltosEepromMega implements Comparable<AltosOrderedMegaRecord> {
-
-       public int      index;
-
-       public AltosOrderedMegaRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid)
-               throws ParseException {
-               super(line);
-               if (prev_tick_valid) {
-                       tick |= (prev_tick & ~0xffff);
-                       if (tick < prev_tick) {
-                               if (prev_tick - tick > 0x8000)
-                                       tick += 0x10000;
-                       } else {
-                               if (tick - prev_tick > 0x8000)
-                                       tick -= 0x10000;
-                       }
-               }
-               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)
-                       return tick_diff;
-               return index - o.index;
-       }
-}
 
 public class AltosEepromMegaIterable extends AltosRecordIterable {
 
@@ -152,15 +106,6 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                        eeprom.sensor_tick = record.tick;
                        has_accel = true;
                        break;
-               case AltosLib.AO_LOG_PRESSURE:
-                       state.pres = record.b;
-                       state.flight_pres = state.pres;
-                       if (eeprom.n_pad_samples == 0) {
-                               eeprom.n_pad_samples++;
-                               state.ground_pres = state.pres;
-                       }
-                       eeprom.seen |= seen_sensor;
-                       break;
                case AltosLib.AO_LOG_TEMP_VOLT:
                        state.v_batt = record.v_batt();
                        state.v_pyro = record.v_pbatt();
@@ -168,14 +113,6 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                                state.sense[i] = record.sense(i);
                        eeprom.seen |= seen_temp_volt;
                        break;
-//
-//             case AltosLib.AO_LOG_DEPLOY:
-//                     state.drogue = record.a;
-//                     state.main = record.b;
-//                     eeprom.seen |= seen_deploy;
-//                     has_ignite = true;
-//                     break;
-
                case AltosLib.AO_LOG_STATE:
                        state.state = record.state();
                        break;
@@ -285,7 +222,7 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                Iterator<AltosOrderedMegaRecord>        iterator = records.iterator();
                AltosOrderedMegaRecord          record = null;
                AltosRecordMM                   state = new AltosRecordMM();
-               boolean                         last_reported = false;
+               //boolean                               last_reported = false;
                EepromState                     eeprom = new EepromState();
 
                state.state = AltosLib.ao_flight_pad;
@@ -393,40 +330,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
@@ -452,8 +355,6 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {
                                if (line == null)
                                        break;
                                AltosOrderedMegaRecord record = new AltosOrderedMegaRecord(line, index++, prev_tick, prev_tick_valid);
-                               if (record == null)
-                                       break;
                                if (record.cmd == AltosLib.AO_LOG_INVALID)
                                        continue;
                                prev_tick = record.tick;
@@ -464,48 +365,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 */