altos: Silence radio while firing igniters
[fw/altos] / src / ao_ignite.c
index 512ec6224ef2461f8b5c9799188ac7c645d3705e..ac1d28e767e5a482e4910373e492914707758810 100644 (file)
@@ -90,6 +90,7 @@ ao_igniter_status(enum ao_igniter igniter)
 void
 ao_igniter_fire(enum ao_igniter igniter) __critical
 {
+       ao_mutex_get(&ao_radio_mutex);
        ao_ignition[igniter].firing = 1;
        switch(ao_config.ignite_mode) {
        case AO_IGNITE_MODE_DUAL:
@@ -134,6 +135,7 @@ ao_igniter_fire(enum ao_igniter igniter) __critical
                break;
        }
        ao_ignition[igniter].firing = 0;
+       ao_mutex_put(&ao_radio_mutex);
 }
 
 void
@@ -202,11 +204,17 @@ __code struct ao_cmds ao_ignite_cmds[] = {
 __xdata struct ao_task ao_igniter_task;
 
 void
-ao_igniter_init(void)
+ao_ignite_set_pins(void)
 {
        AO_IGNITER_DROGUE = 0;
        AO_IGNITER_MAIN = 0;
        AO_IGNITER_DIR |= AO_IGNITER_DROGUE_BIT | AO_IGNITER_MAIN_BIT;
+}
+
+void
+ao_igniter_init(void)
+{
+       ao_ignite_set_pins();
        ao_cmd_register(&ao_ignite_cmds[0]);
        ao_add_task(&ao_igniter_task, ao_igniter, "igniter");
 }