From c3fec2c4c65db71e88ef0c05c69463438a7cfc6c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 26 Apr 2009 15:38:28 -0700 Subject: [PATCH] Add manual ignition and igniter test commands --- ao_cmd.c | 2 +- ao_ignite.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) 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 {main|drogue} Fire igniter. 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"); } -- 2.30.2