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));
}
COMPANION_DESELECT();
}
+static void
+ao_companion_notify(void)
+{
+ COMPANION_SELECT();
+ ao_companion_send_command(AO_COMPANION_NOTIFY);
+ COMPANION_DESELECT();
+}
+
void
ao_companion(void)
{
- ao_companion_running = ao_companion_get_setup();
+ 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_delay(ao_companion_setup.update_period);
- ao_companion_get_data();
+ 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();
}