if (data->sizesats == 0)
newsats = malloc((newsizesats = 256) * sizeof (struct cc_gpssats));
else
- newsats = realloc (data->data, (newsizesats = data->sizesats * 2)
+ newsats = realloc (data->sats, (newsizesats = data->sizesats * 2)
* sizeof (struct cc_gpssats));
if (!newsats)
return 0;
data->sats = newsats;
+ data->sizesats = newsizesats;
}
i = data->numsats++;
data->sats[i].nsat = 0;
#define AO_LOG_GPS_LON 'W'
#define AO_LOG_GPS_ALT 'H'
#define AO_LOG_GPS_SAT 'V'
+#define AO_LOG_GPS_DATE 'Y'
#define AO_LOG_POS_NONE (~0UL)
* any stale data before adding this record
*/
gps.time = tick;
+ gps.hour = (a & 0xff);
+ gps.minute = (a >> 8) & 0xff;
+ gps.second = (b & 0xff);
+ gps.flags = (b >> 8) & 0xff;
gps_valid = GPS_TIME;
break;
case AO_LOG_GPS_LAT:
case AO_LOG_GPS_SAT:
sat.time = tick;
sat.svid = a;
- sat.state = (b & 0xff);
sat.c_n = (b >> 8) & 0xff;
gpssat_add(&f->gps, &sat);
break;
+ case AO_LOG_GPS_DATE:
+ f->year = 2000 + (a & 0xff);
+ f->month = (a >> 8) & 0xff;
+ f->day = (b & 0xff);
+ break;
default:
return 0;
}
{
struct cc_telem telem;
struct cc_gpselt gps;
+ struct cc_gpssat sat;
+ int s;
+
if (!cc_telem_parse(line, &telem))
return 0;
f->ground_accel = telem.ground_accel;
timedata_add(&f->main, telem.tick, telem.main);
timedata_add(&f->state, telem.tick, state_name_to_state(telem.state));
if (telem.gps.gps_locked) {
+ f->year = telem.gps.gps_time.year;
+ f->month = telem.gps.gps_time.month;
+ f->day = telem.gps.gps_time.day;
gps.time = telem.tick;
gps.lat = telem.gps.lat;
gps.lon = telem.gps.lon;
gps.alt = telem.gps.alt;
+ gps.hour = telem.gps.gps_time.hour;
+ gps.minute = telem.gps.gps_time.minute;
+ gps.second = telem.gps.gps_time.second;
gpsdata_add(&f->gps, &gps);
}
+ for (s = 0; s < telem.gps_tracking.channels; s++) {
+ sat.time = telem.tick;
+ sat.svid = telem.gps_tracking.sats[s].svid;
+ sat.c_n = telem.gps_tracking.sats[s].c_n0;
+ gpssat_add(&f->gps, &sat);
+ }
return 1;
}