altosui: Complete split out of separate java library
[fw/altos] / altosui / AltosEepromIterable.java
index bb7c7bef17d34384c5a8af3e4d03e020942ad78c..11cb97e40997c2171999e4144405e9865f829828 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 /*
  * AltosRecords with an index field so they can be sorted by tick while preserving
@@ -57,6 +58,11 @@ class AltosOrderedRecord extends AltosEepromRecord implements Comparable<AltosOr
                index = in_index;
        }
 
+       public String toString() {
+               return String.format("%d.%d %04x %04x %04x",
+                                    cmd, index, tick, a, b);
+       }
+
        public int compareTo(AltosOrderedRecord o) {
                int     tick_diff = tick - o.tick;
                if (tick_diff != 0)
@@ -75,7 +81,11 @@ public class AltosEepromIterable extends AltosRecordIterable {
        static final int        seen_gps_lat = 32;
        static final int        seen_gps_lon = 64;
 
-       static final int        seen_basic = seen_flight|seen_sensor|seen_temp_volt|seen_deploy;
+       static final int        seen_basic = seen_flight|seen_sensor;
+
+       boolean                 has_accel;
+       boolean                 has_gps;
+       boolean                 has_ignite;
 
        AltosEepromRecord       flight_record;
        AltosEepromRecord       gps_date_record;
@@ -90,6 +100,7 @@ public class AltosEepromIterable extends AltosRecordIterable {
                double  ground_pres;
                int     gps_tick;
                int     boost_tick;
+               int     sensor_tick;
 
                EepromState() {
                        seen = 0;
@@ -119,13 +130,22 @@ public class AltosEepromIterable extends AltosRecordIterable {
                                state.flight_pres = state.ground_pres;
                        } else {
                                state.flight_pres = (state.flight_pres * 15 + state.pres) / 16;
-                               state.flight_accel = (state.flight_accel * 15 + state.accel) / 16;
-                               state.flight_vel += (state.accel_plus_g - state.accel);
                        }
+                       state.flight_accel = (state.flight_accel * 15 + state.accel) / 16;
+                       if ((eeprom.seen & seen_sensor) == 0)
+                               eeprom.sensor_tick = record.tick - 1;
+                       state.flight_vel += (state.accel_plus_g - state.accel) * (record.tick - eeprom.sensor_tick);
                        eeprom.seen |= seen_sensor;
+                       eeprom.sensor_tick = record.tick;
+                       has_accel = true;
                        break;
-               case Altos.AO_LOG_HEIGHT:
-                       state.height = record.a;
+               case Altos.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 Altos.AO_LOG_TEMP_VOLT:
@@ -137,6 +157,7 @@ public class AltosEepromIterable extends AltosRecordIterable {
                        state.drogue = record.a;
                        state.main = record.b;
                        eeprom.seen |= seen_deploy;
+                       has_ignite = true;
                        break;
                case Altos.AO_LOG_STATE:
                        state.state = record.a;
@@ -161,6 +182,8 @@ public class AltosEepromIterable extends AltosRecordIterable {
                        state.gps.locked = (flags & Altos.AO_GPS_VALID) != 0;
                        state.gps.nsat = (flags & Altos.AO_GPS_NUM_SAT_MASK) >>
                                Altos.AO_GPS_NUM_SAT_SHIFT;
+                       state.new_gps = true;
+                       has_gps = true;
                        break;
                case Altos.AO_LOG_GPS_LAT:
                        int lat32 = record.a | (record.b << 16);
@@ -213,6 +236,7 @@ public class AltosEepromIterable extends AltosRecordIterable {
                case Altos.AO_LOG_SOFTWARE_VERSION:
                        break;
                }
+               state.seen |= eeprom.seen;
        }
 
        LinkedList<AltosRecord> make_list() {
@@ -245,7 +269,7 @@ public class AltosEepromIterable extends AltosRecordIterable {
                AltosRecord r = new AltosRecord(state);
                r.time = (r.tick - eeprom.boost_tick) / 100.0;
                list.add(r);
-               return list;
+       return list;
        }
 
        public Iterator<AltosRecord> iterator() {
@@ -254,6 +278,10 @@ public class AltosEepromIterable extends AltosRecordIterable {
                return list.iterator();
        }
 
+       public boolean has_gps() { return has_gps; }
+       public boolean has_accel() { return has_accel; }
+       public boolean has_ignite() { return has_ignite; }
+
        public void write_comments(PrintStream out) {
                Iterator<AltosOrderedRecord>    iterator = records.iterator();
                out.printf("# Comments\n");
@@ -281,6 +309,9 @@ public class AltosEepromIterable extends AltosRecordIterable {
                        case Altos.AO_LOG_RADIO_CAL:
                                out.printf ("# Radio cal: %d\n", record.a);
                                break;
+                       case Altos.AO_LOG_MAX_FLIGHT_LOG:
+                               out.printf ("# Max flight log: %d\n", record.a);
+                               break;
                        case Altos.AO_LOG_MANUFACTURER:
                                out.printf ("# Manufacturer: %s\n", record.data);
                                break;
@@ -293,6 +324,30 @@ public class AltosEepromIterable extends AltosRecordIterable {
                        case Altos.AO_LOG_SOFTWARE_VERSION:
                                out.printf ("# Software version: %s\n", record.data);
                                break;
+                       case Altos.AO_LOG_BARO_RESERVED:
+                               out.printf ("# Baro reserved: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_SENS:
+                               out.printf ("# Baro sens: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_OFF:
+                               out.printf ("# Baro off: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_TCS:
+                               out.printf ("# Baro tcs: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_TCO:
+                               out.printf ("# Baro tco: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_TREF:
+                               out.printf ("# Baro tref: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_TEMPSENS:
+                               out.printf ("# Baro tempsens: %d\n", record.a);
+                               break;
+                       case Altos.AO_LOG_BARO_CRC:
+                               out.printf ("# Baro crc: %d\n", record.a);
+                               break;
                        }
                }
        }