import java.text.*;
public class AltosGPS {
- public class AltosGPSSat {
- int svid;
- int c_n0;
- }
+
+ final static int MISSING = AltosRecord.MISSING;
int nsat;
boolean locked;
boolean connected;
- boolean date_valid;
double lat; /* degrees (+N -S) */
double lon; /* degrees (+E -W) */
int alt; /* m */
int minute;
int second;
- int gps_extended; /* has extra data */
double ground_speed; /* m/s */
int course; /* degrees */
double climb_rate; /* m/s */
- double hdop; /* unitless? */
+ double hdop; /* unitless */
+ double vdop; /* unitless */
int h_error; /* m */
int v_error; /* m */
hour = minute = second = 0;
}
+ public AltosGPS(AltosTelemetryMap map) throws ParseException {
+ String state = map.get_string(AltosTelemetry.AO_TELEM_GPS_STATE,
+ AltosTelemetry.AO_TELEM_GPS_STATE_ERROR);
+
+ nsat = map.get_int(AltosTelemetry.AO_TELEM_GPS_NUM_SAT, 0);
+ if (state.equals(AltosTelemetry.AO_TELEM_GPS_STATE_LOCKED)) {
+ connected = true;
+ locked = true;
+ lat = map.get_double(AltosTelemetry.AO_TELEM_GPS_LATITUDE, MISSING, 1.0e-7);
+ lon = map.get_double(AltosTelemetry.AO_TELEM_GPS_LONGITUDE, MISSING, 1.0e-7);
+ alt = map.get_int(AltosTelemetry.AO_TELEM_GPS_ALTITUDE, MISSING);
+ year = map.get_int(AltosTelemetry.AO_TELEM_GPS_YEAR, MISSING);
+ if (year != MISSING)
+ year += 2000;
+ month = map.get_int(AltosTelemetry.AO_TELEM_GPS_MONTH, MISSING);
+ day = map.get_int(AltosTelemetry.AO_TELEM_GPS_DAY, MISSING);
+
+ hour = map.get_int(AltosTelemetry.AO_TELEM_GPS_HOUR, 0);
+ minute = map.get_int(AltosTelemetry.AO_TELEM_GPS_MINUTE, 0);
+ second = map.get_int(AltosTelemetry.AO_TELEM_GPS_SECOND, 0);
+
+ ground_speed = map.get_double(AltosTelemetry.AO_TELEM_GPS_HORIZONTAL_SPEED,
+ AltosRecord.MISSING, 1/100.0);
+ course = map.get_int(AltosTelemetry.AO_TELEM_GPS_COURSE,
+ AltosRecord.MISSING);
+ hdop = map.get_double(AltosTelemetry.AO_TELEM_GPS_HDOP, MISSING, 1.0);
+ vdop = map.get_double(AltosTelemetry.AO_TELEM_GPS_VDOP, MISSING, 1.0);
+ h_error = map.get_int(AltosTelemetry.AO_TELEM_GPS_HERROR, MISSING);
+ v_error = map.get_int(AltosTelemetry.AO_TELEM_GPS_VERROR, MISSING);
+ } else if (state.equals(AltosTelemetry.AO_TELEM_GPS_STATE_UNLOCKED)) {
+ connected = true;
+ locked = false;
+ } else {
+ connected = false;
+ locked = false;
+ }
+ }
+
public AltosGPS(String[] words, int i, int version) throws ParseException {
AltosParse.word(words[i++], "GPS");
nsat = AltosParse.parse_int(words[i++]);
else
tracking_channels = AltosParse.parse_int(words[i]);
i++;
- cc_gps_sat = new AltosGPS.AltosGPSSat[tracking_channels];
+ cc_gps_sat = new AltosGPSSat[tracking_channels];
for (int chan = 0; chan < tracking_channels; chan++) {
- cc_gps_sat[chan] = new AltosGPS.AltosGPSSat();
+ cc_gps_sat[chan] = new AltosGPSSat();
cc_gps_sat[chan].svid = AltosParse.parse_int(words[i++]);
/* Older versions included SiRF status bits */
if (version < 2)
cc_gps_sat[chan].c_n0 = AltosParse.parse_int(words[i++]);
}
} else
- cc_gps_sat = new AltosGPS.AltosGPSSat[0];
+ cc_gps_sat = new AltosGPSSat[0];
}
public void set_latitude(int in_lat) {
public void add_sat(int svid, int c_n0) {
if (cc_gps_sat == null) {
- cc_gps_sat = new AltosGPS.AltosGPSSat[1];
+ cc_gps_sat = new AltosGPSSat[1];
} else {
- AltosGPSSat[] new_gps_sat = new AltosGPS.AltosGPSSat[cc_gps_sat.length + 1];
+ AltosGPSSat[] new_gps_sat = new AltosGPSSat[cc_gps_sat.length + 1];
for (int i = 0; i < cc_gps_sat.length; i++)
new_gps_sat[i] = cc_gps_sat[i];
cc_gps_sat = new_gps_sat;
}
- AltosGPS.AltosGPSSat sat = new AltosGPS.AltosGPSSat();
+ AltosGPSSat sat = new AltosGPSSat();
sat.svid = svid;
sat.c_n0 = c_n0;
cc_gps_sat[cc_gps_sat.length - 1] = sat;
nsat = old.nsat;
locked = old.locked;
connected = old.connected;
- date_valid = old.date_valid;
lat = old.lat; /* degrees (+N -S) */
lon = old.lon; /* degrees (+E -W) */
alt = old.alt; /* m */
minute = old.minute;
second = old.second;
- gps_extended = old.gps_extended; /* has extra data */
ground_speed = old.ground_speed; /* m/s */
course = old.course; /* degrees */
climb_rate = old.climb_rate; /* m/s */