#define AO_IGNITER_DROGUE P2_3
#define AO_IGNITER_MAIN P2_4
+#define AO_IGNITER_DIR P2DIR
+#define AO_IGNITER_DROGUE_BIT (1 << 3)
+#define AO_IGNITER_MAIN_BIT (1 << 4)
-/* XXX test these values with real igniters */
-#define AO_IGNITER_OPEN 100
-#define AO_IGNITER_CLOSED 20000
-#define AO_IGNITER_FIRE_TIME AO_MS_TO_TICKS(50)
-#define AO_IGNITER_CHARGE_TIME AO_MS_TO_TICKS(200)
+/* test these values with real igniters */
+#define AO_IGNITER_OPEN 1000
+#define AO_IGNITER_CLOSED 7000
+#define AO_IGNITER_FIRE_TIME AO_MS_TO_TICKS(500)
+#define AO_IGNITER_CHARGE_TIME AO_MS_TO_TICKS(2000)
struct ao_ignition {
uint8_t request;
}
}
+static uint8_t
+ao_match_word(__code char *word)
+{
+ while (*word) {
+ if (ao_cmd_lex_c != *word) {
+ ao_cmd_status = ao_cmd_syntax_error;
+ return 0;
+ }
+ word++;
+ ao_cmd_lex();
+ }
+ return 1;
+}
+
+void
+ao_ignite_manual(void)
+{
+ ao_cmd_white();
+ 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);
+ }
+}
+
+static __code char *igniter_status_names[] = {
+ "unknown", "ready", "active", "open"
+};
+
+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]);
+}
+
+void
+ao_ignite_test(void)
+{
+ ao_ignite_print_status(ao_igniter_drogue, "drogue");
+ ao_ignite_print_status(ao_igniter_main, "main");
+}
+
+__code struct ao_cmds ao_ignite_cmds[] = {
+ { 'i', ao_ignite_manual, "i <key> {main|drogue} Fire igniter. <key> is doit with D&I" },
+ { 't', ao_ignite_test, "t Test igniter continuity" },
+ { 0, ao_ignite_manual, NULL },
+};
+
__xdata struct ao_task ao_igniter_task;
void
ao_igniter_init(void)
{
+ AO_IGNITER_DROGUE = 0;
+ AO_IGNITER_MAIN = 0;
+ AO_IGNITER_DIR |= AO_IGNITER_DROGUE_BIT | AO_IGNITER_MAIN_BIT;
+ ao_cmd_register(&ao_ignite_cmds[0]);
ao_add_task(&ao_igniter_task, ao_igniter, "igniter");
}