altos: Use state transitions to directly drive igniters
[fw/altos] / src / kernel / ao_flight.c
index afee1de710935b00c6a75e3b3f2498beb23be6a8..2142546c9b0737b186cca6f6dce65fa51c8e30ec 100644 (file)
@@ -222,6 +222,8 @@ ao_flight(void)
                                )
                        {
                                ao_flight_state = ao_flight_boost;
+                               ao_wakeup(&ao_flight_state);
+
                                ao_launch_tick = ao_boost_tick = ao_sample_tick;
 
                                /* start logging data */
@@ -242,8 +244,6 @@ ao_flight(void)
                                ao_gps_new = AO_GPS_NEW_DATA | AO_GPS_NEW_TRACKING;
                                ao_wakeup(&ao_gps_new);
 #endif
-
-                               ao_wakeup(&ao_flight_state);
                        }
                        break;
                case ao_flight_boost:
@@ -278,8 +278,8 @@ ao_flight(void)
 #else
                                ao_flight_state = ao_flight_coast;
 #endif
-                               ++ao_motor_number;
                                ao_wakeup(&ao_flight_state);
+                               ++ao_motor_number;
                        }
                        break;
 #if HAS_ACCEL && HAS_BARO
@@ -327,11 +327,9 @@ ao_flight(void)
 #endif
                                )
                        {
-#if HAS_IGNITE
-                               /* ignite the drogue charge */
-                               ao_ignite(ao_igniter_drogue);
-#endif
-
+                               /* enter drogue state */
+                               ao_flight_state = ao_flight_drogue;
+                               ao_wakeup(&ao_flight_state);
 #if HAS_TELEMETRY
                                /* slow down the telemetry system */
                                ao_telemetry_set_interval(AO_TELEMETRY_INTERVAL_RECOVER);
@@ -339,10 +337,6 @@ ao_flight(void)
                                /* Turn the RDF beacon back on */
                                ao_rdf_set(1);
 #endif
-
-                               /* and enter drogue state */
-                               ao_flight_state = ao_flight_drogue;
-                               ao_wakeup(&ao_flight_state);
                        }
                        else
 #else /* not HAS_BARO */
@@ -362,12 +356,11 @@ ao_flight(void)
                                    ao_interval_max_accel_through - ao_interval_min_accel_through <= ao_data_accel_to_sample(MAX_QUIET_ACCEL))
                                {
                                        ao_flight_state = ao_flight_landed;
+                                       ao_wakeup(&ao_flight_state);
 #if HAS_ADC
                                        /* turn off the ADC capture */
                                        ao_timer_set_adc_interval(0);
 #endif
-
-                                       ao_wakeup(&ao_flight_state);
                                }
 
                                /* Reset interval values */
@@ -410,9 +403,8 @@ ao_flight(void)
                         */
                        if (ao_height <= ao_config.main_deploy)
                        {
-#if HAS_IGNITE
-                               ao_ignite(ao_igniter_main);
-#endif
+                               ao_flight_state = ao_flight_main;
+                               ao_wakeup(&ao_flight_state);
 
                                /*
                                 * Start recording min/max height
@@ -423,9 +415,6 @@ ao_flight(void)
                                ao_interval_end = ao_sample_tick + AO_INTERVAL_TICKS;
 
                                ao_interval_min_height = ao_interval_max_height = ao_avg_height;
-
-                               ao_flight_state = ao_flight_main;
-                               ao_wakeup(&ao_flight_state);
                        }
                        break;
 
@@ -445,13 +434,11 @@ ao_flight(void)
                                if (ao_interval_max_height - ao_interval_min_height <= AO_M_TO_HEIGHT(4))
                                {
                                        ao_flight_state = ao_flight_landed;
-
+                                       ao_wakeup(&ao_flight_state);
 #if HAS_ADC
                                        /* turn off the ADC capture */
                                        ao_timer_set_adc_interval(0);
 #endif
-
-                                       ao_wakeup(&ao_flight_state);
                                }
                                ao_interval_min_height = ao_interval_max_height = ao_avg_height;
                                ao_interval_end = ao_sample_tick + AO_INTERVAL_TICKS;
@@ -491,20 +478,27 @@ ao_flight_dump(void)
 
        printf ("sample:\n");
        printf ("  tick        %d\n", ao_sample_tick);
+#if HAS_BARO
        printf ("  raw pres    %d\n", ao_sample_pres);
+#endif
 #if HAS_ACCEL
        printf ("  raw accel   %d\n", ao_sample_accel);
 #endif
+#if HAS_BARO
        printf ("  ground pres %d\n", ao_ground_pres);
        printf ("  ground alt  %d\n", ao_ground_height);
+#endif
 #if HAS_ACCEL
        printf ("  raw accel   %d\n", ao_sample_accel);
        printf ("  groundaccel %d\n", ao_ground_accel);
        printf ("  accel_2g    %d\n", ao_accel_2g);
 #endif
 
+#if HAS_BARO
        printf ("  alt         %d\n", ao_sample_alt);
        printf ("  height      %d\n", ao_sample_height);
+#endif
+
 #if HAS_ACCEL
        printf ("  accel       %d.%02d\n", int_part(accel), frac_part(accel));
 #endif