Add EasyTimer configuration support
[fw/altos] / altoslib / AltosConfigData.java
index 3c5f6c06678977f6a7790c850e125a543dbc0611..5d58566ecb3dc0b9836e1bd676a5857f04a1cde1 100644 (file)
@@ -89,6 +89,7 @@ public class AltosConfigData {
 
        /* Log listing replies */
        public int      stored_flight;
+       public AltosEepromFlight[] flights;
 
        /* HAS_TRACKER */
        public int      tracker_motion;
@@ -162,7 +163,7 @@ public class AltosConfigData {
        public int log_available() {
                switch (log_format) {
                case AltosLib.AO_LOG_FORMAT_TINY:
-                       if (stored_flight == 0)
+                       if (flights == null)
                                return 1;
                        return 0;
                case AltosLib.AO_LOG_FORMAT_TELEMETRY:
@@ -175,10 +176,10 @@ public class AltosConfigData {
                        int     log_space = log_space();
                        int     log_used;
 
-                       if (stored_flight <= 0)
+                       if (flights == null)
                                log_used = 0;
                        else
-                               log_used = stored_flight * log_max;
+                               log_used = flights.length * log_max;
                        int     log_avail;
 
                        if (log_used >= log_space)
@@ -306,7 +307,8 @@ public class AltosConfigData {
 
                storage_size = AltosLib.MISSING;
                storage_erase_unit = AltosLib.MISSING;
-               stored_flight = AltosLib.MISSING;
+               stored_flight = 0;
+               flights = null;
 
                accel_zero_along = AltosLib.MISSING;
                accel_zero_across = AltosLib.MISSING;
@@ -318,8 +320,12 @@ public class AltosConfigData {
                adjust_accel_cal();
                switch (pad_orientation) {
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                        return accel_cal_plus_cooked;
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                        return invert_accel_value(accel_cal_minus_cooked);
                default:
                        return AltosLib.MISSING;
@@ -331,8 +337,12 @@ public class AltosConfigData {
                adjust_accel_cal();
                switch (pad_orientation) {
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                        return accel_cal_minus_cooked;
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                        return invert_accel_value(accel_cal_plus_cooked);
                default:
                        return AltosLib.MISSING;
@@ -351,11 +361,15 @@ public class AltosConfigData {
                {
                        switch (pad_orientation) {
                        case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+                       case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+                       case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                                accel_cal_plus_cooked = accel_cal_plus;
                                accel_cal_minus_cooked = accel_cal_minus;
                                accel_cal_adjusted = true;
                                break;
                        case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+                       case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+                       case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                                accel_cal_plus_cooked = invert_accel_value(accel_cal_minus);
                                accel_cal_minus_cooked = invert_accel_value(accel_cal_plus);
                                accel_cal_adjusted = true;
@@ -484,7 +498,32 @@ public class AltosConfigData {
                try { storage_erase_unit = get_int(line, "Storage erase unit:"); } catch (Exception e) {}
 
                /* Log listing replies */
-               try { get_int(line, "flight"); stored_flight++; }  catch (Exception e) {}
+               try {
+                       int flight = get_int(line, "flight");
+                       String[] tokens = line.split("\\s+");
+                       if (tokens.length >= 6) {
+                               int     start = -1, end = -1;
+                               try {
+                                       if (tokens[2].equals("start"))
+                                               start = AltosParse.parse_hex(tokens[3]);
+                                       if (tokens[4].equals("end"))
+                                               end = AltosParse.parse_hex(tokens[5]);
+                                       if (flight != 0 && start >= 0 && end > 0) {
+                                               int len;
+                                               if (flights == null)
+                                                       len = 0;
+                                               else
+                                                       len = flights.length;
+                                               AltosEepromFlight [] new_flights = new AltosEepromFlight[len + 1];
+                                               for (int i = 0; i < len; i++)
+                                                       new_flights[i] = flights[i];
+                                               new_flights[len] = new AltosEepromFlight(flight, start, end);
+                                               flights = new_flights;
+                                               stored_flight = flights.length;
+                                       }
+                               } catch (ParseException pe) { System.out.printf("Parse error %s\n", pe.toString()); }
+                       }
+               }  catch (Exception e) {}
 
                /* HAS_GYRO */
                try {
@@ -701,14 +740,14 @@ public class AltosConfigData {
                        max_enabled = false;
                        break;
                default:
-                       if (stored_flight != AltosLib.MISSING)
+                       if (flights != null)
                                max_enabled = false;
                        break;
                }
 
                dest.set_flight_log_max_enabled(max_enabled);
                dest.set_radio_enable(radio_enable);
-               dest.set_flight_log_max_limit(log_space() / 1024);
+               dest.set_flight_log_max_limit(log_space() >> 10, storage_erase_unit >> 10);
                dest.set_flight_log_max(flight_log_max);
                dest.set_ignite_mode(ignite_mode);
                dest.set_pad_orientation(pad_orientation);
@@ -801,7 +840,7 @@ public class AltosConfigData {
                        link.printf("c a %d %d\n", plus, minus);
 
                /* HAS_LOG */
-               if (flight_log_max != 0)
+               if (flight_log_max != 0 && flight_log_max != AltosLib.MISSING)
                        link.printf("c l %d\n", flight_log_max);
 
                /* HAS_IGNITE */