+__xdata uint16_t ao_launch_ignite;
+
+static void
+ao_launch_run(void)
+{
+ for (;;) {
+ while (!ao_launch_ignite)
+ ao_sleep(&ao_launch_ignite);
+ while (ao_launch_ignite) {
+ ao_launch_ignite = 0;
+
+ ao_ignition[ao_igniter_drogue].firing = 1;
+ ao_ignition[ao_igniter_main].firing = 1;
+ AO_IGNITER_DROGUE = 1;
+ ao_delay(AO_MS_TO_TICKS(500));
+ AO_IGNITER_DROGUE = 0;
+ ao_ignition[ao_igniter_drogue].firing = 0;
+ ao_ignition[ao_igniter_main].firing = 0;
+ }
+ }
+}
+
+static void
+ao_launch_status(void)
+{
+ uint8_t i;
+ for (;;) {
+ ao_delay(AO_SEC_TO_TICKS(1));
+ if (ao_igniter_status(ao_igniter_drogue) == ao_igniter_ready) {
+ if (ao_igniter_status(ao_igniter_main) == ao_igniter_ready) {
+ for (i = 0; i < 5; i++) {
+ ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(50));
+ ao_delay(AO_MS_TO_TICKS(100));
+ }
+ } else {
+ ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200));
+ }
+ }
+ }
+}
+
+static __pdata uint8_t ao_launch_armed;
+static __pdata uint16_t ao_launch_arm_time;
+