X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao_ignite.c;h=be2915234b07d7a2c477e78c445baeb0e9f03866;hp=acb9399babe53dc737f1c3988070a2bfd972680f;hb=e9584e846b9bd7926d61451d32ba5d7a30416f7b;hpb=b32f2f0090ff967edac07ae4d7a9895ed0b96d31 diff --git a/ao_ignite.c b/ao_ignite.c index acb9399b..be291523 100644 --- a/ao_ignite.c +++ b/ao_ignite.c @@ -19,12 +19,15 @@ #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; @@ -114,10 +117,70 @@ ao_igniter(void) } } +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 {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 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"); }