log.u.flight.flight = ao_log_dump_flight + 1;
ao_log_data(&log);
for (;;) {
- /* Write state change to EEPROM */
- if (ao_flight_state != ao_log_state) {
- ao_log_state = ao_flight_state;
- log.type = AO_LOG_STATE;
- log.tick = ao_flight_tick;
- log.u.state.state = ao_log_state;
- log.u.state.reason = 0;
- ao_log_data(&log);
- }
+ while (!ao_log_running)
+ ao_sleep(&ao_log_running);
+
/* Write samples to EEPROM */
while (ao_log_adc_pos != ao_adc_head) {
log.type = AO_LOG_SENSOR;
log.u.sensor.accel = ao_adc_ring[ao_log_adc_pos].accel;
log.u.sensor.pres = ao_adc_ring[ao_log_adc_pos].pres;
ao_log_data(&log);
- if (ao_log_adc_pos == 0) {
+ if ((ao_log_adc_pos & 0x1f) == 0) {
log.type = AO_LOG_TEMP_VOLT;
log.tick = ao_adc_ring[ao_log_adc_pos].tick;
log.u.temp_volt.temp = ao_adc_ring[ao_log_adc_pos].temp;
log.u.deploy.main = ao_adc_ring[ao_log_adc_pos].sense_m;
ao_log_data(&log);
}
- ao_log_adc_pos++;
- if (ao_log_adc_pos == AO_ADC_RING)
- ao_log_adc_pos = 0;
+ ao_log_adc_pos = ao_adc_ring_next(ao_log_adc_pos);
+ }
+ /* Write state change to EEPROM */
+ if (ao_flight_state != ao_log_state) {
+ ao_log_state = ao_flight_state;
+ log.type = AO_LOG_STATE;
+ log.tick = ao_flight_tick;
+ log.u.state.state = ao_log_state;
+ log.u.state.reason = 0;
+ ao_log_data(&log);
+
+ if (ao_log_state == ao_flight_landed)
+ ao_log_stop();
}
/* Wait for a while */
}
__code struct ao_cmds ao_log_cmds[] = {
- { 'l', dump_log, "l Dump last flight log\n" },
+ { 'l', dump_log, "l Dump last flight log" },
{ 0, dump_log, NULL },
};