altos: Don't wait after igniter in manual mode
authorKeith Packard <keithp@keithp.com>
Tue, 27 Oct 2020 04:53:54 +0000 (21:53 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 18 Nov 2020 05:40:21 +0000 (21:40 -0800)
There's no reason to delay between igniter firings in manual mode, and
it slows down testing.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/kernel/ao_ignite.c

index e4e4843e1cb8383ba1597699988fc0c67a57bf6f..d197239a991e60db1ce9d90b38b8611335e4b184 100644 (file)
@@ -75,7 +75,7 @@ ao_igniter_status(enum ao_igniter igniter)
 #endif
 
 static void
-ao_igniter_fire(enum ao_igniter igniter)
+ao_igniter_fire(enum ao_igniter igniter, bool wait)
 {
        if (!ao_ignition[igniter].fired) {
                ao_ignition[igniter].firing = 1;
@@ -93,7 +93,8 @@ ao_igniter_fire(enum ao_igniter igniter)
                        break;
                }
                ao_ignition[igniter].firing = 0;
-               ao_delay(AO_IGNITER_CHARGE_TIME);
+               if (wait)
+                       ao_delay(AO_IGNITER_CHARGE_TIME);
        }
 }
 
@@ -111,27 +112,27 @@ ao_igniter(void)
                switch(ao_config.ignite_mode) {
                case AO_IGNITE_MODE_DUAL:
                        if (ao_flight_drogue <= ao_flight_state && ao_flight_state < ao_flight_landed)
-                               ao_igniter_fire(ao_igniter_drogue);
+                               ao_igniter_fire(ao_igniter_drogue, true);
                        if (ao_flight_main <= ao_flight_state && ao_flight_state < ao_flight_landed)
-                               ao_igniter_fire(ao_igniter_main);
+                               ao_igniter_fire(ao_igniter_main, true);
                        break;
                case AO_IGNITE_MODE_APOGEE:
                        if (ao_flight_drogue <= ao_flight_state && ao_flight_state < ao_flight_landed) {
-                               ao_igniter_fire(ao_igniter_drogue);
-                               ao_igniter_fire(ao_igniter_main);
+                               ao_igniter_fire(ao_igniter_drogue, true);
+                               ao_igniter_fire(ao_igniter_main, true);
                        }
                        break;
                case AO_IGNITE_MODE_MAIN:
                        if (ao_flight_main <= ao_flight_state && ao_flight_state < ao_flight_landed) {
-                               ao_igniter_fire(ao_igniter_drogue);
-                               ao_igniter_fire(ao_igniter_main);
+                               ao_igniter_fire(ao_igniter_drogue, true);
+                               ao_igniter_fire(ao_igniter_main, true);
                        }
                        break;
                case AO_IGNITE_MODE_BOOSTER:
                        if (ao_flight_fast <= ao_flight_state && ao_flight_state < ao_flight_landed)
-                               ao_igniter_fire(ao_igniter_main);
+                               ao_igniter_fire(ao_igniter_main, true);
                        if (ao_flight_drogue <= ao_flight_state && ao_flight_state < ao_flight_landed)
-                               ao_igniter_fire(ao_igniter_drogue);
+                               ao_igniter_fire(ao_igniter_drogue, true);
                        break;
                }
        }
@@ -149,12 +150,12 @@ ao_ignite_manual(void)
 #if HAS_IGNITE
        if (ao_cmd_lex_c == 'm' && ao_match_word("main")) {
                ao_ignition[ao_igniter_main].fired = 0;
-               ao_igniter_fire(ao_igniter_main);
+               ao_igniter_fire(ao_igniter_main, false);
                return;
        }
        if (ao_cmd_lex_c == 'd' && ao_match_word("drogue")) {
                ao_ignition[ao_igniter_drogue].fired = 0;
-               ao_igniter_fire(ao_igniter_drogue);
+               ao_igniter_fire(ao_igniter_drogue, false);
                return;
        }
 #endif