altoslib: Re-initialize cal data for eeprom record set
[fw/altos] / altoslib / AltosEepromRecordSet.java
index 27f81df6d31f86bfdf094d0cc97898ff861810e6..94a4f643029afc3bf5a94623ca4be614712169b4 100644 (file)
@@ -21,29 +21,38 @@ public class AltosEepromRecordSet implements AltosRecordSet {
        AltosEeprom                     eeprom;
        TreeSet<AltosEepromRecord>      ordered;
        AltosCalData                    cal_data;
+       boolean                         valid;
 
        public AltosConfigData config_data() {
                return eeprom.config_data();
        }
 
+       private void init_cal_data() {
+               for (AltosEepromRecord record : ordered) {
+                       if (record.cmd() == AltosLib.AO_LOG_FLIGHT) {
+                               cal_data.set_tick(record.tick());
+                               cal_data.set_boost_tick();
+                               cal_data.set_state(AltosLib.ao_flight_pad);
+                               break;
+                       }
+               }
+       }
+
        public AltosCalData cal_data() {
                if (cal_data == null) {
                        cal_data = new AltosCalData(config_data());
-                       for (AltosEepromRecord record : ordered) {
-                               if (record.cmd() == AltosLib.AO_LOG_FLIGHT) {
-                                       cal_data.set_tick(record.tick());
-                                       cal_data.set_boost_tick();
-                                       break;
-                               }
-                       }
+                       init_cal_data();
                }
                return cal_data;
        }
 
        public void capture_series(AltosDataListener listener) {
-               AltosCalData    cal_data = cal_data();
-
-               cal_data.reset();
+               if (cal_data == null) {
+                       cal_data();
+               } else {
+                       cal_data.reset();
+                       init_cal_data();
+               }
                listener.set_log_format(config_data().log_format);
 
                for (AltosEepromRecord record : ordered) {
@@ -52,6 +61,10 @@ public class AltosEepromRecordSet implements AltosRecordSet {
                listener.finish();
        }
 
+       public boolean valid() {
+               return valid;
+       }
+
        public AltosEepromRecordSet(AltosEeprom eeprom) {
                this.eeprom = eeprom;
 
@@ -71,6 +84,8 @@ public class AltosEepromRecordSet implements AltosRecordSet {
                case AltosLib.AO_LOG_FORMAT_TELEMEGA:
                case AltosLib.AO_LOG_FORMAT_TELEMEGA_3:
                case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
+               case AltosLib.AO_LOG_FORMAT_EASYMEGA_2:
+               case AltosLib.AO_LOG_FORMAT_TELEMEGA_4:
                        record = new AltosEepromRecordMega(eeprom);
                        break;
                case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
@@ -88,13 +103,20 @@ public class AltosEepromRecordSet implements AltosRecordSet {
                case AltosLib.AO_LOG_FORMAT_TELEFIRETWO:
                        record = new AltosEepromRecordFireTwo(eeprom);
                        break;
+               case AltosLib.AO_LOG_FORMAT_MICROPEAK2:
+                       record = new AltosEepromRecordMicroPeak2(eeprom);
+                       break;
                }
 
+               ordered = new TreeSet<AltosEepromRecord>();
+
                if (record == null) {
                        System.out.printf("failed to parse log format %d\n", config_data.log_format);
+                       valid = false;
                        return;
                }
-               ordered = new TreeSet<AltosEepromRecord>();
+               valid = true;
+
                int     tick = 0;
                boolean first = true;