first cut at turnon scripts for EasyTimer v2
[fw/altos] / src / kernel / ao_log_gps.c
index 7284932cf6f2c98d2558931ff3895964258179d2..96f8140fdf04a171107eaef814599aed6e918611 100644 (file)
@@ -28,15 +28,15 @@ void
 ao_log_gps_flight(void)
 {
        ao_log_data.type = AO_LOG_FLIGHT;
-       ao_log_data.tick = ao_time();
+       ao_log_data.tick = (uint16_t) ao_time();
        ao_log_data.u.flight.flight = ao_flight_number;
        ao_log_write(&ao_log_data);
 }
 
 void
-ao_log_gps_data(uint16_t tick, struct ao_telemetry_location *gps_data)
+ao_log_gps_data(AO_TICK_TYPE tick, struct ao_telemetry_location *gps_data)
 {
-       ao_log_data.tick = tick;
+       ao_log_data.tick = (uint16_t) tick;
        ao_log_data.type = AO_LOG_GPS_TIME;
        ao_log_data.u.gps.latitude = gps_data->latitude;
        ao_log_data.u.gps.longitude = gps_data->longitude;
@@ -61,11 +61,11 @@ ao_log_gps_data(uint16_t tick, struct ao_telemetry_location *gps_data)
 }
 
 void
-ao_log_gps_tracking(uint16_t tick, struct ao_telemetry_satellite *gps_tracking_data)
+ao_log_gps_tracking(AO_TICK_TYPE tick, struct ao_telemetry_satellite *gps_tracking_data)
 {
        uint8_t c, n, i;
 
-       ao_log_data.tick = tick;
+       ao_log_data.tick = (uint16_t) tick;
        ao_log_data.type = AO_LOG_GPS_SAT;
        i = 0;
        n = gps_tracking_data->channels;
@@ -81,6 +81,18 @@ ao_log_gps_tracking(uint16_t tick, struct ao_telemetry_satellite *gps_tracking_d
        ao_log_write(&ao_log_data);
 }
 
+static uint8_t
+ao_log_check_empty(void)
+{
+       uint8_t *b = (void *) &ao_log_data;
+       unsigned i;
+
+       for (i = 0; i < sizeof (ao_log_type); i++)
+               if (*b++ != AO_STORAGE_ERASED_BYTE)
+                       return 0;
+       return 1;
+}
+
 int8_t
 ao_log_check(uint32_t pos)
 {
@@ -89,10 +101,11 @@ ao_log_check(uint32_t pos)
                             sizeof (struct ao_log_gps)))
                return AO_LOG_INVALID;
 
-       if (ao_log_check_clear())
+       if (ao_log_check_empty())
                return AO_LOG_EMPTY;
 
        if (!ao_log_check_data())
                return AO_LOG_INVALID;
+
        return AO_LOG_VALID;
 }