X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_pyro.c;h=4f37e9793e6cbe0c37dc424119e93445adc8a89f;hb=ec9e1186dce079a2f2b7be8050216ddb1bc1af66;hp=162f5e1ea978a8fcc8430f8d801fdaf57059c180;hpb=6581eefbdbd8d3e94f615bdf11652a000d131c8e;p=fw%2Faltos diff --git a/src/core/ao_pyro.c b/src/core/ao_pyro.c index 162f5e1e..4f37e979 100644 --- a/src/core/ao_pyro.c +++ b/src/core/ao_pyro.c @@ -20,6 +20,15 @@ #include #include +#if IS_COMPANION +#include +#define ao_accel ao_companion_command.accel +#define ao_speed ao_companion_command.speed +#define ao_height ao_companion_command.height +#define ao_flight_state ao_companion_command.flight_state +#define ao_motor_number ao_companion_command.motor_number +#endif + #define ao_lowbit(x) ((x) & (-x)) /* @@ -103,7 +112,7 @@ ao_pyro_ready(struct ao_pyro *pyro) case ao_pyro_delay: /* handled separately */ continue; - + default: continue; } @@ -117,7 +126,7 @@ ao_pyro_ready(struct ao_pyro *pyro) ao_delay(AO_MS_TO_TICKS(50)); \ ao_gpio_set(port, bit, pin, 0); \ } while (0) - + static void ao_pyro_fire(uint8_t p) @@ -152,6 +161,8 @@ ao_pyro_fire(uint8_t p) ao_delay(AO_MS_TO_TICKS(50)); } +uint8_t ao_pyro_wakeup; + static void ao_pyro(void) { @@ -163,7 +174,9 @@ ao_pyro(void) ao_sleep(&ao_flight_state); for (;;) { - ao_delay(AO_MS_TO_TICKS(100)); + ao_alarm(AO_MS_TO_TICKS(100)); + ao_sleep(&ao_pyro_wakeup); + ao_clear_alarm(); for (p = 0; p < AO_PYRO_NUM; p++) { pyro = &ao_config.pyro[p]; @@ -246,7 +259,7 @@ const struct { { "A", ao_pyro_ascending, NO_VALUE, HELP("ascending") }, { "D", ao_pyro_descending, NO_VALUE, HELP("descending") }, - + { "m", ao_pyro_after_motor, offsetof(struct ao_pyro, motor), HELP("after motor") }, { "d", ao_pyro_delay, offsetof(struct ao_pyro, delay), HELP("delay before firing (s * 100)") }, @@ -275,7 +288,7 @@ ao_pyro_help(void) } } #endif - + void ao_pyro_show(void) { @@ -340,7 +353,7 @@ ao_pyro_set(void) ao_cmd_white(); if (ao_cmd_lex_c == '\n') break; - + for (c = 0; c < AO_PYRO_NAME_LEN - 1; c++) { if (ao_cmd_is_white()) break; @@ -370,6 +383,25 @@ ao_pyro_set(void) _ao_config_edit_finish(); } +static void +ao_pyro_manual(void) +{ + ao_cmd_white(); + if (!ao_match_word("DoIt")) + return; + ao_cmd_white(); + ao_cmd_decimal(); + if (ao_cmd_lex_i < 0 || AO_PYRO_NUM <= ao_cmd_lex_i) + return; + ao_pyro_fire(ao_cmd_lex_i); + +} + +const struct ao_cmds ao_pyro_cmds[] = { + { ao_pyro_manual, "P DoIt \0Fire igniter" }, + { 0, NULL } +}; + void ao_pyro_init(void) { @@ -397,5 +429,6 @@ ao_pyro_init(void) #if AO_PYRO_NUM > 7 ao_enable_output(AO_PYRO_PORT_7, AO_PYRO_PIN_7, AO_PYRO_7, 0); #endif + ao_cmd_register(&ao_pyro_cmds[0]); ao_add_task(&ao_pyro_task, ao_pyro, "pyro"); }