* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_14;
import java.text.*;
import java.util.concurrent.*;
import java.io.*;
+import java.time.*;
public class AltosGPS implements Cloneable {
hour = minute = second = AltosLib.MISSING;
}
+ /* Return time since epoc in seconds */
+ public long seconds() {
+ if (year == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (month == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (day == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (hour == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (minute == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (second == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ OffsetDateTime odt = OffsetDateTime.of(year, month, day, hour, minute, second, 0, ZoneOffset.UTC);
+ return odt.toEpochSecond();
+ }
+
+ public AltosLatLon lat_lon() {
+ return new AltosLatLon(lat, lon);
+ }
+
public AltosGPS(AltosTelemetryMap map) throws ParseException {
String state = map.get_string(AltosTelemetryLegacy.AO_TELEM_GPS_STATE,
AltosTelemetryLegacy.AO_TELEM_GPS_STATE_ERROR);
if (bits.length < 2)
return false;
alt = Integer.parseInt(bits[1]);
+ } else if (line.startsWith("Pdop/Hdop/Vdop:")) {
+ if (bits.length < 4)
+ return false;
+ pdop = Integer.parseInt(bits[1]) / 10.0;
+ hdop = Integer.parseInt(bits[2]) / 10.0;
+ vdop = Integer.parseInt(bits[3]) / 10.0;
+ } else if (line.startsWith("Ground Speed/Climb Rate/Course:")) {
+ if (bits.length < 6)
+ return false;
+ ground_speed = Integer.parseInt(bits[3]) * 1.0e-2;
+ climb_rate = Integer.parseInt(bits[4]) * 1.0e-2;
+ course = Integer.parseInt(bits[5]) * 2;
} else if (line.startsWith("Flags:")) {
if (bits.length < 2)
return false;
int status = Integer.decode(bits[1]);
connected = (status & AltosLib.AO_GPS_RUNNING) != 0;
locked = (status & AltosLib.AO_GPS_VALID) != 0;
+ nsat = (status >> AltosLib.AO_GPS_NUM_SAT_SHIFT) & AltosLib.AO_GPS_NUM_SAT_MASK;
if (!says_done)
return false;
} else if (line.startsWith("Sats:")) {
if (bits.length < 2)
return false;
- nsat = Integer.parseInt(bits[1]);
- cc_gps_sat = new AltosGPSSat[nsat];
- for (int i = 0; i < nsat; i++) {
+ int nsvs = Integer.parseInt(bits[1]);
+ cc_gps_sat = new AltosGPSSat[nsvs];
+ for (int i = 0; i < nsvs; i++) {
int svid = Integer.parseInt(bits[2+i*2]);
int cc_n0 = Integer.parseInt(bits[3+i*2]);
cc_gps_sat[i] = new AltosGPSSat(svid, cc_n0);
}
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
+ static public void provide_data(AltosDataListener listener, AltosLink link) throws InterruptedException {
try {
- AltosGPS gps = new AltosGPS(link, config_data);
-
- if (gps != null) {
- state.set_gps(gps, state.gps_sequence++);
- return;
- }
+ AltosGPS gps = new AltosGPS(link, link.config_data());
+ if (gps != null)
+ listener.set_gps(gps, true, true);
} catch (TimeoutException te) {
}
- state.set_gps(null, 0);
}
public AltosGPS (AltosLink link, AltosConfigData config_data) throws TimeoutException, InterruptedException {