Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
[fw/altos] / src / ao_log.c
index ba01999275745d806e2c220bf81381c03414400e..099c5f6ff9683aebf4a7048f2ed212e71578f60e 100644 (file)
@@ -42,8 +42,8 @@ ao_log_data(__xdata struct ao_log_record *log) __reentrant
        log->csum = 0;
        log->csum = ao_log_csum((__xdata uint8_t *) log);
        ao_mutex_get(&ao_log_mutex); {
-               if (ao_log_current_pos >= ao_log_end_pos)
-                       ao_log_running = 0;
+               if (ao_log_current_pos >= ao_log_end_pos && ao_log_running)
+                       ao_log_stop();
                if (ao_log_running) {
                        wrote = 1;
                        ao_storage_write(ao_log_current_pos,
@@ -99,10 +99,10 @@ ao_log(void)
        /* Write the whole contents of the ring to the log
         * when starting up.
         */
-       ao_log_adc_pos = ao_adc_ring_next(ao_adc_head);
+       ao_log_adc_pos = ao_adc_ring_next(ao_flight_adc);
        for (;;) {
                /* Write samples to EEPROM */
-               while (ao_log_adc_pos != ao_adc_head) {
+               while (ao_log_adc_pos != ao_flight_adc) {
                        log.type = AO_LOG_SENSOR;
                        log.tick = ao_adc_ring[ao_log_adc_pos].tick;
                        log.u.sensor.accel = ao_adc_ring[ao_log_adc_pos].accel;
@@ -355,31 +355,33 @@ ao_log_delete(void) __reentrant
 
        slots = ao_log_slots();
        /* Look for the flight log matching the requested flight */
-       for (slot = 0; slot < slots; slot++) {
-               if (ao_log_flight(slot) == ao_cmd_lex_i) {
-                       ao_log_erase_mark();
-                       ao_log_current_pos = ao_log_pos(slot);
-                       ao_log_end_pos = ao_log_current_pos + ao_config.flight_log_max;
-                       while (ao_log_current_pos < ao_log_end_pos) {
-                               /*
-                                * Check to see if we've reached the end of
-                                * the used memory to avoid re-erasing the same
-                                * memory over and over again
-                                */
-                               if (ao_storage_read(ao_log_current_pos,
-                                                   &log,
-                                                   sizeof (struct ao_log_record))) {
-                                       for (slot = 0; slot < sizeof (struct ao_log_record); slot++)
-                                               if (((uint8_t *) &log)[slot] != 0xff)
+       if (ao_cmd_lex_i) {
+               for (slot = 0; slot < slots; slot++) {
+                       if (ao_log_flight(slot) == ao_cmd_lex_i) {
+                               ao_log_erase_mark();
+                               ao_log_current_pos = ao_log_pos(slot);
+                               ao_log_end_pos = ao_log_current_pos + ao_config.flight_log_max;
+                               while (ao_log_current_pos < ao_log_end_pos) {
+                                       /*
+                                        * Check to see if we've reached the end of
+                                        * the used memory to avoid re-erasing the same
+                                        * memory over and over again
+                                        */
+                                       if (ao_storage_read(ao_log_current_pos,
+                                                           &log,
+                                                           sizeof (struct ao_log_record))) {
+                                               for (slot = 0; slot < sizeof (struct ao_log_record); slot++)
+                                                       if (((uint8_t *) &log)[slot] != 0xff)
+                                                               break;
+                                               if (slot == sizeof (struct ao_log_record))
                                                        break;
-                                       if (slot == sizeof (struct ao_log_record))
-                                               break;
+                                       }
+                                       ao_storage_erase(ao_log_current_pos);
+                                       ao_log_current_pos += ao_storage_block;
                                }
-                               ao_storage_erase(ao_log_current_pos);
-                               ao_log_current_pos += ao_storage_block;
+                               puts("Erased");
+                               return;
                        }
-                       puts("Erased");
-                       return;
                }
        }
        printf("No such flight: %d\n", ao_cmd_lex_i);