X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_ignite.c;h=e9d04dcce4ba848641e73d9fbfa06f5bac3d04e5;hb=HEAD;hp=6c19a94cf3051a8a9d04e5a8bd6762af65259cf9;hpb=3058ecdeafdee959b1103965f3df4ffcd59683e4;p=fw%2Faltos diff --git a/src/kernel/ao_ignite.c b/src/kernel/ao_ignite.c index 6c19a94c..9e6df199 100644 --- a/src/kernel/ao_ignite.c +++ b/src/kernel/ao_ignite.c @@ -18,9 +18,7 @@ #include "ao.h" #include -#if AO_PYRO_NUM #include -#endif #if HAS_IGNITE struct ao_ignition ao_ignition[2]; @@ -55,12 +53,7 @@ ao_igniter_status(enum ao_igniter igniter) value = AO_SENSE_MAIN(&packet); break; } - if (value < AO_IGNITER_OPEN) - return ao_igniter_open; - else if (value > AO_IGNITER_CLOSED) - return ao_igniter_ready; - else - return ao_igniter_unknown; + return ao_igniter_check(value, AO_SENSE_PBATT(&packet)); } #define AO_IGNITER_SET_DROGUE(v) ao_gpio_set(AO_IGNITER_DROGUE_PORT, AO_IGNITER_DROGUE_PIN, v) @@ -75,13 +68,16 @@ 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; ao_ignition[igniter].fired = 1; switch (igniter) { case ao_igniter_drogue: + if (wait && ao_config.apogee_delay && + ao_config.ignite_mode != AO_IGNITE_MODE_MAIN) + ao_delay(AO_SEC_TO_TICKS(ao_config.apogee_delay)); AO_IGNITER_SET_DROGUE(1); ao_delay(AO_IGNITER_FIRE_TIME); AO_IGNITER_SET_DROGUE(0); @@ -93,7 +89,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 +108,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; } } @@ -148,11 +145,13 @@ ao_ignite_manual(void) ao_cmd_white(); #if HAS_IGNITE if (ao_cmd_lex_c == 'm' && ao_match_word("main")) { - ao_igniter_fire(ao_igniter_main); + ao_ignition[ao_igniter_main].fired = 0; + ao_igniter_fire(ao_igniter_main, false); return; } if (ao_cmd_lex_c == 'd' && ao_match_word("drogue")) { - ao_igniter_fire(ao_igniter_drogue); + ao_ignition[ao_igniter_drogue].fired = 0; + ao_igniter_fire(ao_igniter_drogue, false); return; } #endif