X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fkernel%2Fao_log_gps.c;h=96f8140fdf04a171107eaef814599aed6e918611;hb=HEAD;hp=a55d93f115791b0d391e249a03e6e20cd4e9de7e;hpb=83929cd290279963b01b2ccd52c70d61bdeff6b0;p=fw%2Faltos diff --git a/src/kernel/ao_log_gps.c b/src/kernel/ao_log_gps.c index a55d93f1..96f8140f 100644 --- a/src/kernel/ao_log_gps.c +++ b/src/kernel/ao_log_gps.c @@ -27,72 +27,85 @@ void ao_log_gps_flight(void) { - log.type = AO_LOG_FLIGHT; - log.tick = ao_time(); - log.u.flight.flight = ao_flight_number; - ao_log_write(&log); + ao_log_data.type = AO_LOG_FLIGHT; + 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) { - log.tick = tick; - log.type = AO_LOG_GPS_TIME; - log.u.gps.latitude = gps_data->latitude; - log.u.gps.longitude = gps_data->longitude; - log.u.gps.altitude_low = gps_data->altitude_low; - log.u.gps.altitude_high = gps_data->altitude_high; + 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; + ao_log_data.u.gps.altitude_low = gps_data->altitude_low; + ao_log_data.u.gps.altitude_high = gps_data->altitude_high; - log.u.gps.hour = gps_data->hour; - log.u.gps.minute = gps_data->minute; - log.u.gps.second = gps_data->second; - log.u.gps.flags = gps_data->flags; - log.u.gps.year = gps_data->year; - log.u.gps.month = gps_data->month; - log.u.gps.day = gps_data->day; - log.u.gps.course = gps_data->course; - log.u.gps.ground_speed = gps_data->ground_speed; - log.u.gps.climb_rate = gps_data->climb_rate; - log.u.gps.pdop = gps_data->pdop; - log.u.gps.hdop = gps_data->hdop; - log.u.gps.vdop = gps_data->vdop; - log.u.gps.mode = gps_data->mode; - ao_log_write(&log); + ao_log_data.u.gps.hour = gps_data->hour; + ao_log_data.u.gps.minute = gps_data->minute; + ao_log_data.u.gps.second = gps_data->second; + ao_log_data.u.gps.flags = gps_data->flags; + ao_log_data.u.gps.year = gps_data->year; + ao_log_data.u.gps.month = gps_data->month; + ao_log_data.u.gps.day = gps_data->day; + ao_log_data.u.gps.course = gps_data->course; + ao_log_data.u.gps.ground_speed = gps_data->ground_speed; + ao_log_data.u.gps.climb_rate = gps_data->climb_rate; + ao_log_data.u.gps.pdop = gps_data->pdop; + ao_log_data.u.gps.hdop = gps_data->hdop; + ao_log_data.u.gps.vdop = gps_data->vdop; + ao_log_data.u.gps.mode = gps_data->mode; + ao_log_write(&ao_log_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; - log.tick = tick; - log.type = AO_LOG_GPS_SAT; + ao_log_data.tick = (uint16_t) tick; + ao_log_data.type = AO_LOG_GPS_SAT; i = 0; n = gps_tracking_data->channels; for (c = 0; c < n; c++) - if ((log.u.gps_sat.sats[i].svid = gps_tracking_data->sats[c].svid)) + if ((ao_log_data.u.gps_sat.sats[i].svid = gps_tracking_data->sats[c].svid)) { - log.u.gps_sat.sats[i].c_n = gps_tracking_data->sats[c].c_n_1; + ao_log_data.u.gps_sat.sats[i].c_n = gps_tracking_data->sats[c].c_n_1; i++; if (i >= 12) break; } - log.u.gps_sat.channels = i; - ao_log_write(&log); + ao_log_data.u.gps_sat.channels = i; + 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) { if (!ao_storage_read(pos, - &log, + &ao_log_data, 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; }