first cut at turnon scripts for EasyTimer v2
[fw/altos] / altoslib / AltosGPS.java
index 0b30ed456593f75587ca57b2ff6a7954810f82db..e5f231b452a999714a441d9610be45aa09869e3c 100644 (file)
@@ -16,7 +16,7 @@
  * 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.*;
@@ -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,17 +400,13 @@ public class AltosGPS implements Cloneable {
                }
        }
 
-       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 {