state.gps.locked = (flags & Altos.AO_GPS_VALID) != 0;
state.gps.nsat = (flags & Altos.AO_GPS_NUM_SAT_MASK) >>
Altos.AO_GPS_NUM_SAT_SHIFT;
+ state.new_gps = true;
has_gps = true;
break;
case Altos.AO_LOG_GPS_LAT:
int flight_pres;
AltosGPS gps;
+ boolean new_gps;
double time; /* seconds since boost */
speed = old.speed;
height = old.height;
gps = new AltosGPS(old.gps);
+ new_gps = false;
companion = old.companion;
}
speed = MISSING;
height = MISSING;
gps = new AltosGPS();
+ new_gps = false;
companion = null;
}
}
time = tick / 100.0;
- if (state == Altos.ao_flight_pad || state == Altos.ao_flight_idle) {
+ if (cur.new_gps && (state == Altos.ao_flight_pad || state == Altos.ao_flight_idle)) {
/* Track consecutive 'good' gps reports, waiting for 10 of them */
if (data.gps != null && data.gps.locked && data.gps.nsat >= 4)
flight_vel = map.get_int(AO_TELEM_ADHOC_SPEED, MISSING);
flight_pres = map.get_int(AO_TELEM_ADHOC_BARO, MISSING);
- if (map.has(AO_TELEM_GPS_STATE))
+ if (map.has(AO_TELEM_GPS_STATE)) {
gps = new AltosGPS(map);
+ new_gps = true;
+ }
else
gps = null;
}
}
gps = new AltosGPS(words, i, version);
+ new_gps = true;
}
public AltosTelemetryRecordLegacy(String line) throws ParseException, AltosCRCException {
if ((gps_flags & (AO_GPS_VALID|AO_GPS_RUNNING)) != 0) {
gps = new AltosGPS();
+ new_gps = true;
seen |= seen_gps_time | seen_gps_lat | seen_gps_lon;
gps.nsat = (gps_flags & AO_GPS_NUM_SAT_MASK);
next.gps.hdop = hdop;
next.gps.vdop = vdop;
next.seen |= AltosRecord.seen_gps_time | AltosRecord.seen_gps_lat | AltosRecord.seen_gps_lon;
+ next.new_gps = true;
}
return next;