X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosGPS.java;h=0b30ed456593f75587ca57b2ff6a7954810f82db;hb=master;hp=b6ca3576b4096e061d2d59090c0ae9a93e544db2;hpb=c8dbcaf69cd538a31ab6e2b568237ae7c8656a9a;p=fw%2Faltos diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index b6ca3576..e5f231b4 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_14; import java.text.*; import java.util.concurrent.*; @@ -92,6 +92,10 @@ public class AltosGPS implements Cloneable { 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); @@ -162,20 +166,33 @@ public class AltosGPS implements Cloneable { 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); @@ -387,7 +404,7 @@ public class AltosGPS implements Cloneable { try { AltosGPS gps = new AltosGPS(link, link.config_data()); if (gps != null) - listener.set_gps(gps); + listener.set_gps(gps, true, true); } catch (TimeoutException te) { } }