altos: Create the log file if it doesn't already exist
authorKeith Packard <keithp@keithp.com>
Sun, 31 Mar 2013 23:11:27 +0000 (16:11 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 31 Mar 2013 23:11:27 +0000 (16:11 -0700)
open will return failure unless the file already exists.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_log_fat.c

index 684148b7c131b0fbb4fb07680d2af5e83efcedfc..2741555f29e417a61a88c1003f8b540f910b3fcf 100644 (file)
 #include "ao_fat.h"
 
 static uint8_t log_year, log_month, log_day;
 #include "ao_fat.h"
 
 static uint8_t log_year, log_month, log_day;
-static uint8_t log_running;
+static uint8_t log_open;
 static uint8_t log_mutex;
 
 static void
 ao_log_open(void)
 {
        char    name[12];
 static uint8_t log_mutex;
 
 static void
 ao_log_open(void)
 {
        char    name[12];
+       int8_t  status;
 
        sprintf(name,"%04d%02d%02dLOG", 2000 + log_year, log_month, log_day);
 
        sprintf(name,"%04d%02d%02dLOG", 2000 + log_year, log_month, log_day);
-       if (ao_fat_open(name, AO_FAT_OPEN_WRITE) == AO_FAT_SUCCESS)
-               log_running = 1;
+       status = ao_fat_open(name, AO_FAT_OPEN_WRITE);
+       switch (status) {
+       case AO_FAT_SUCCESS:
+               ao_fat_seek(0, AO_FAT_SEEK_END);
+               log_open = 1;
+               break;
+       case -AO_FAT_ENOENT:
+               status = ao_fat_creat(name);
+               if (status == AO_FAT_SUCCESS)
+                       log_open = 1;
+               break;
+       } 
 }
 
 static void
 ao_log_close(void)
 {
 }
 
 static void
 ao_log_close(void)
 {
-       log_running = 0;
+       log_open = 0;
        ao_fat_close();
 }
 
        ao_fat_close();
 }
 
@@ -52,20 +63,20 @@ ao_log_mega(struct ao_log_mega *log)
        uint8_t wrote = 0;
        ao_mutex_get(&log_mutex);
        if (log->type == AO_LOG_GPS_TIME) {
        uint8_t wrote = 0;
        ao_mutex_get(&log_mutex);
        if (log->type == AO_LOG_GPS_TIME) {
-               if (log_running &&
+               if (log_open &&
                    (log_year != log->u.gps.year ||
                     log_month != log->u.gps.month ||
                     log_day != log->u.gps.day)) {
                        ao_log_close();
                }
                    (log_year != log->u.gps.year ||
                     log_month != log->u.gps.month ||
                     log_day != log->u.gps.day)) {
                        ao_log_close();
                }
-               if (!log_running) {
+               if (!log_open) {
                        log_year = log->u.gps.year;
                        log_month = log->u.gps.month;
                        log_day = log->u.gps.day;
                        ao_log_open();
                }
        }
                        log_year = log->u.gps.year;
                        log_month = log->u.gps.month;
                        log_day = log->u.gps.day;
                        ao_log_open();
                }
        }
-       if (log_running) {
+       if (log_open) {
                wrote = ao_fat_write(log, sizeof (*log)) == AO_FAT_SUCCESS;
                ao_fat_sync();
        }
                wrote = ao_fat_write(log, sizeof (*log)) == AO_FAT_SUCCESS;
                ao_fat_sync();
        }