summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-04-26 15:38:28 -0700
committerKeith Packard <keithp@keithp.com>2009-04-26 15:38:28 -0700
commitc3fec2c4c65db71e88ef0c05c69463438a7cfc6c (patch)
tree5be4442701f1435b8f03ce325c5e4a52d063ef7e
parent819f1de8dd6010fae050bcef930943c7923929f9 (diff)
Add manual ignition and igniter test commands
-rw-r--r--ao_cmd.c2
-rw-r--r--ao_ignite.c57
2 files changed, 58 insertions, 1 deletions
diff --git a/ao_cmd.c b/ao_cmd.c
index 91abe7f0..abab1463 100644
--- a/ao_cmd.c
+++ b/ao_cmd.c
@@ -214,7 +214,7 @@ echo(void)
static const uint8_t help_txt[] = "All numbers are in hex";
-#define NUM_CMDS 10
+#define NUM_CMDS 11
static __code struct ao_cmds *__xdata (ao_cmds[NUM_CMDS]);
static __xdata uint8_t ao_ncmds;
diff --git a/ao_ignite.c b/ao_ignite.c
index ece40bf3..b89fd2f7 100644
--- a/ao_ignite.c
+++ b/ao_ignite.c
@@ -117,6 +117,62 @@ ao_igniter(void)
}
}
+static uint8_t
+ao_match_word(__code uint8_t *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 uint8_t *igniter_status_names[] = {
+ "unknown", "ready", "active", "open"
+};
+
+void
+ao_ignite_print_status(enum ao_igniter igniter, __code uint8_t *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
@@ -125,5 +181,6 @@ 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");
}