-void
-ao_spi_telescience(void)
-{
- static union {
- struct ao_companion_command command;
- struct ao_companion_setup setup;
- struct ao_adc data;
- } u;
-
- for (;;) {
- ao_spi_slave_read((uint8_t *) &u.command, sizeof (struct ao_companion_command));
- switch (u.command.command) {
- case AO_COMPANION_SETUP:
- u.setup.board_id = AO_idProduct_NUMBER;
- u.setup.board_id_inverse = ~AO_idProduct_NUMBER;
- u.setup.update_period = 10;
- u.setup.channels = NUM_ADC;
- ao_spi_slave_write((uint8_t *) &u.setup,
- sizeof (struct ao_companion_setup));
- break;
- case AO_COMPANION_FETCH:
- ao_adc_get(&u.data);
- ao_spi_slave_write((uint8_t *) &u.data.adc,
- NUM_ADC * sizeof (uint16_t));
- if (u.command.flight_state >= ao_flight_boost &&
- u.command.flight_state < ao_flight_landed) {
- if (!ao_log_running)
- ao_log_start();
- } else {
- if (ao_log_running)
- ao_log_stop();
- }
- break;
- }
- }
-}
-