X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosGPS.java;h=a2584e7789330703ea8e8562aa9bb6450b94831a;hb=HEAD;hp=7898fb9fa90e5c723901cd218caeef9ba8daf01f;hpb=a61217f0a6d0ef48b6471f632c4600255867e831;p=fw%2Faltos diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 7898fb9f..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); @@ -383,11 +400,11 @@ public class AltosGPS implements Cloneable { } } - static public void provide_data(AltosDataListener listener, AltosLink link, AltosCalData cal_data) throws InterruptedException { + static public void provide_data(AltosDataListener listener, AltosLink link) throws InterruptedException { 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) { } }