altoslib: Missed a couple of easy mini voltage API changes
[fw/altos] / src / core / ao_ignite.c
index 74bd0c5aea021a55a4e7f16d45300f9fcb97bebe..823d003c8a0a7574f43859a75de6c2af1ec7c315 100644 (file)
 
 #include "ao.h"
 #include <ao_data.h>
+#if AO_PYRO_NUM
+#include <ao_pyro.h>
+#endif
 
+#if HAS_IGNITE
 __xdata struct ao_ignition ao_ignition[2];
 
 void
@@ -110,6 +114,8 @@ ao_igniter_fire(enum ao_igniter igniter)
                        ao_delay(AO_IGNITER_FIRE_TIME);
                        AO_IGNITER_SET_MAIN(0);
                        break;
+               default:
+                       break;
                }
                break;
        case AO_IGNITE_MODE_MAIN:
@@ -123,6 +129,8 @@ ao_igniter_fire(enum ao_igniter igniter)
                        ao_delay(AO_IGNITER_FIRE_TIME);
                        AO_IGNITER_SET_MAIN(0);
                        break;
+               default:
+                       break;
                }
                break;
        }
@@ -150,6 +158,8 @@ ao_igniter(void)
        }
 }
 
+#endif
+
 void
 ao_ignite_manual(void)
 {
@@ -157,33 +167,50 @@ ao_ignite_manual(void)
        if (!ao_match_word("DoIt"))
                return;
        ao_cmd_white();
-       if (ao_cmd_lex_c == 'm') {
-               if(ao_match_word("main"))
-                       ao_igniter_fire(ao_igniter_main);
-       } else {
-               if(ao_match_word("drogue"))
-                       ao_igniter_fire(ao_igniter_drogue);
+#if HAS_IGNITE
+       if (ao_cmd_lex_c == 'm' && ao_match_word("main")) {
+               ao_igniter_fire(ao_igniter_main);
+               return;
+       }
+       if (ao_cmd_lex_c == 'd' && ao_match_word("drogue")) {
+               ao_igniter_fire(ao_igniter_drogue);
+               return;
        }
+#endif
+#if AO_PYRO_NUM
+       if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9') {
+               ao_pyro_manual(ao_cmd_lex_c - '0');
+               return;
+       }
+#endif
+       ao_cmd_status = ao_cmd_syntax_error;
 }
 
-static __code char * __code igniter_status_names[] = {
+__code char * __code ao_igniter_status_names[] = {
        "unknown", "ready", "active", "open"
 };
 
+#if HAS_IGNITE
 void
 ao_ignite_print_status(enum ao_igniter igniter, __code char *name) __reentrant
 {
        enum ao_igniter_status status = ao_igniter_status(igniter);
        printf("Igniter: %6s Status: %s\n",
               name,
-              igniter_status_names[status]);
+              ao_igniter_status_names[status]);
 }
+#endif
 
 void
 ao_ignite_test(void)
 {
+#if HAS_IGNITE
        ao_ignite_print_status(ao_igniter_drogue, "drogue");
        ao_ignite_print_status(ao_igniter_main, "main");
+#endif
+#if AO_PYRO_NUM
+       ao_pyro_print_status();
+#endif
 }
 
 __code struct ao_cmds ao_ignite_cmds[] = {
@@ -192,6 +219,7 @@ __code struct ao_cmds ao_ignite_cmds[] = {
        { 0,    NULL },
 };
 
+#if HAS_IGNITE
 __xdata struct ao_task ao_igniter_task;
 
 void
@@ -200,11 +228,14 @@ ao_ignite_set_pins(void)
        ao_enable_output(AO_IGNITER_DROGUE_PORT, AO_IGNITER_DROGUE_PIN, AO_IGNITER_DROGUE, 0);
        ao_enable_output(AO_IGNITER_MAIN_PORT, AO_IGNITER_MAIN_PIN, AO_IGNITER_MAIN, 0);
 }
+#endif
 
 void
 ao_igniter_init(void)
 {
+#if HAS_IGNITE
        ao_ignite_set_pins();
-       ao_cmd_register(&ao_ignite_cmds[0]);
        ao_add_task(&ao_igniter_task, ao_igniter, "igniter");
+#endif
+       ao_cmd_register(&ao_ignite_cmds[0]);
 }