X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosGPS.java;h=b6ca3576b4096e061d2d59090c0ae9a93e544db2;hb=master;hp=8037eb93deb37ec63e44b49d5b3975c7e31b8dd8;hpb=297eb795b24ec31f6599f48bc8c3769557a7ec6f;p=fw%2Faltos diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 8037eb93..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_13; +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) { } }