X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fao_companion.c;h=4c8f4269588769054a541535b5e939934f82aac7;hb=458f816ad23fd6784757b13b244057d4be64260e;hp=e2e6d05ae81c0f6b468dd044b0857e3af16821cb;hpb=f87f0787fa5aa528674f3f4919eb22646c87c25a;p=fw%2Faltos diff --git a/src/ao_companion.c b/src/ao_companion.c index e2e6d05a..4c8f4269 100644 --- a/src/ao_companion.c +++ b/src/ao_companion.c @@ -43,6 +43,8 @@ ao_companion_send_command(uint8_t command) ao_companion_command.command = command; ao_companion_command.flight_state = ao_flight_state; ao_companion_command.tick = ao_time(); + ao_companion_command.serial = ao_serial_number; + ao_companion_command.flight = ao_flight_number; ao_spi_send(&ao_companion_command, sizeof (ao_companion_command)); } @@ -53,9 +55,8 @@ ao_companion_get_setup(void) ao_companion_send_command(AO_COMPANION_SETUP); ao_spi_recv(&ao_companion_setup, sizeof (ao_companion_setup)); COMPANION_DESELECT(); - if (ao_companion_setup.board_id != ~ao_companion_setup.board_id) - return 0; - return 1; + return (ao_companion_setup.board_id == + ~ao_companion_setup.board_id_inverse); } static void @@ -69,15 +70,31 @@ ao_companion_get_data(void) COMPANION_DESELECT(); } +static void +ao_companion_notify(void) +{ + COMPANION_SELECT(); + ao_companion_send_command(AO_COMPANION_NOTIFY); + COMPANION_DESELECT(); +} + void ao_companion(void) { - if (!ao_companion_get_setup()) - ao_exit(); - ao_companion_running = 1; - for (;;) { - ao_delay(ao_companion_setup.update_period); - ao_companion_get_data(); + uint8_t i; + while (!ao_flight_number) + ao_sleep(&ao_flight_number); + for (i = 0; i < 10; i++) { + ao_delay(AO_SEC_TO_TICKS(1)); + if ((ao_companion_running = ao_companion_get_setup())) + break; + } + while (ao_companion_running) { + ao_alarm(ao_companion_setup.update_period); + if (ao_sleep(DATA_TO_XDATA(&ao_flight_state))) + ao_companion_get_data(); + else + ao_companion_notify(); } ao_exit(); } @@ -85,6 +102,15 @@ ao_companion(void) void ao_companion_status(void) __reentrant { + uint8_t i; + printf("Companion running: %d\n", ao_companion_running); + printf("device: %d\n", ao_companion_setup.board_id); + printf("update period: %d\n", ao_companion_setup.update_period); + printf("channels: %d\n", ao_companion_setup.channels); + printf("data:"); + for(i = 0; i < ao_companion_setup.channels; i++) + printf(" %5u", ao_companion_data[i]); + printf("\n"); } __code struct ao_cmds ao_companion_cmds[] = { @@ -102,6 +128,5 @@ ao_companion_init(void) COMPANION_CS_SEL &= ~COMPANION_CS_MASK; /* set CS pins as GPIO */ ao_cmd_register(&ao_companion_cmds[0]); - ao_add_task(&ao_companion_task, ao_companion, "companion"); }