altos: Check for full log and complain
[fw/altos] / src / ao_log.c
index 47f24f0195151b95289e3729af64f589d13e40d0..ba01999275745d806e2c220bf81381c03414400e 100644 (file)
@@ -170,6 +170,7 @@ ao_log_write_erase(uint8_t pos)
        erase.unused = 0x00;
        erase.flight = ao_flight_number;
        ao_storage_write(ao_log_erase_pos(pos),  &erase, sizeof (erase));
+       ao_storage_flush();
 }
 
 static void
@@ -314,6 +315,12 @@ ao_log_present(void)
        return ao_log_max_flight() != 0;
 }
 
+uint8_t
+ao_log_full(void)
+{
+       return ao_log_current_pos == ao_log_end_pos;
+}
+
 static __xdata struct ao_task ao_log_task;
 
 void
@@ -328,8 +335,10 @@ ao_log_list(void) __reentrant
        {
                flight = ao_log_flight(slot);
                if (flight)
-                       printf ("flight %d start %ld end %ld\n",
-                               flight, ao_log_pos(slot), ao_log_pos(slot+1));
+                       printf ("flight %d start %x end %x\n",
+                               flight,
+                               (uint16_t) (ao_log_pos(slot) >> 8),
+                               (uint16_t) (ao_log_pos(slot+1) >> 8));
        }
        printf ("done\n");
 }
@@ -348,6 +357,7 @@ ao_log_delete(void) __reentrant
        /* 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) {
@@ -372,7 +382,6 @@ ao_log_delete(void) __reentrant
                        return;
                }
        }
-       ao_log_erase_mark();
        printf("No such flight: %d\n", ao_cmd_lex_i);
 }