import java.util.HashMap;
import java.io.*;
-public class AltosRecord {
+public class AltosRecord implements Comparable <AltosRecord> {
+ final static int MISSING = 0x7fffffff;
+
+ static final int seen_flight = 1;
+ static final int seen_sensor = 2;
+ static final int seen_temp_volt = 4;
+ static final int seen_deploy = 8;
+ static final int seen_gps_time = 16;
+ static final int seen_gps_lat = 32;
+ static final int seen_gps_lon = 64;
+ static final int seen_companion = 128;
+ int seen;
+
int version;
String callsign;
int serial;
int status;
int state;
int tick;
+
int accel;
int pres;
int temp;
int batt;
int drogue;
int main;
- int flight_accel;
+
int ground_accel;
- int flight_vel;
- int flight_pres;
int ground_pres;
int accel_plus_g;
int accel_minus_g;
+
+ double acceleration;
+ double speed;
+ double height;
+
+ int flight_accel;
+ int flight_vel;
+ int flight_pres;
+
AltosGPS gps;
+ boolean new_gps;
double time; /* seconds since boost */
+ int device_type;
+ int config_major;
+ int config_minor;
+ int apogee_delay;
+ int main_deploy;
+ int flight_log_max;
+ String firmware_version;
+
+ AltosRecordCompanion companion;
/*
* Values for our MP3H6115A pressure sensor
*
}
public double raw_pressure() {
+ if (pres == MISSING)
+ return MISSING;
return barometer_to_pressure(pres);
}
public double filtered_pressure() {
+ if (flight_pres == MISSING)
+ return MISSING;
return barometer_to_pressure(flight_pres);
}
public double ground_pressure() {
+ if (ground_pres == MISSING)
+ return MISSING;
return barometer_to_pressure(ground_pres);
}
- public double filtered_altitude() {
- return AltosConvert.pressure_to_altitude(filtered_pressure());
- }
-
public double raw_altitude() {
- return AltosConvert.pressure_to_altitude(raw_pressure());
+ double p = raw_pressure();
+ if (p == MISSING)
+ return MISSING;
+ return AltosConvert.pressure_to_altitude(p);
}
public double ground_altitude() {
- return AltosConvert.pressure_to_altitude(ground_pressure());
+ double p = ground_pressure();
+ if (p == MISSING)
+ return MISSING;
+ return AltosConvert.pressure_to_altitude(p);
+ }
+
+ public double filtered_altitude() {
+ if (height != MISSING && ground_pres != MISSING)
+ return height + ground_altitude();
+
+ double p = filtered_pressure();
+ if (p == MISSING)
+ return MISSING;
+ return AltosConvert.pressure_to_altitude(p);
}
public double filtered_height() {
- return filtered_altitude() - ground_altitude();
+ if (height != MISSING)
+ return height;
+
+ double f = filtered_altitude();
+ double g = ground_altitude();
+ if (f == MISSING || g == MISSING)
+ return MISSING;
+ return f - g;
}
public double raw_height() {
- return raw_altitude() - ground_altitude();
+ double r = raw_altitude();
+ double g = ground_altitude();
+
+ if (r == MISSING || g == MISSING)
+ return height;
+ return r - g;
}
public double battery_voltage() {
+ if (batt == MISSING)
+ return MISSING;
return AltosConvert.cc_battery_to_voltage(batt);
}
public double main_voltage() {
+ if (main == MISSING)
+ return MISSING;
return AltosConvert.cc_ignitor_to_voltage(main);
}
public double drogue_voltage() {
+ if (drogue == MISSING)
+ return MISSING;
return AltosConvert.cc_ignitor_to_voltage(drogue);
}
}
public double temperature() {
+ if (temp == MISSING)
+ return MISSING;
return thermometer_to_temperature(temp);
}
return counts_per_g / 9.80665;
}
+
public double acceleration() {
+ if (acceleration != MISSING)
+ return acceleration;
+
+ if (ground_accel == MISSING || accel == MISSING)
+ return MISSING;
return (ground_accel - accel) / accel_counts_per_mss();
}
public double accel_speed() {
- double speed = flight_vel / (accel_counts_per_mss() * 100.0);
- return speed;
+ if (speed != MISSING)
+ return speed;
+ if (flight_vel == MISSING)
+ return MISSING;
+ return flight_vel / (accel_counts_per_mss() * 100.0);
}
public String state() {
return null;
}
+ public int compareTo(AltosRecord o) {
+ return tick - o.tick;
+ }
+
public AltosRecord(AltosRecord old) {
version = old.version;
+ seen = old.seen;
callsign = old.callsign;
serial = old.serial;
flight = old.flight;
ground_pres = old.ground_pres;
accel_plus_g = old.accel_plus_g;
accel_minus_g = old.accel_minus_g;
+ acceleration = old.acceleration;
+ speed = old.speed;
+ height = old.height;
gps = new AltosGPS(old.gps);
+ new_gps = false;
+ companion = old.companion;
}
public AltosRecord() {
version = 0;
+ seen = 0;
callsign = "N0CALL";
serial = 0;
flight = 0;
status = 0;
state = Altos.ao_flight_startup;
tick = 0;
- accel = 0;
- pres = 0;
- temp = 0;
- batt = 0;
- drogue = 0;
- main = 0;
+ accel = MISSING;
+ pres = MISSING;
+ temp = MISSING;
+ batt = MISSING;
+ drogue = MISSING;
+ main = MISSING;
flight_accel = 0;
ground_accel = 0;
flight_vel = 0;
ground_pres = 0;
accel_plus_g = 0;
accel_minus_g = 0;
+ acceleration = MISSING;
+ speed = MISSING;
+ height = MISSING;
gps = new AltosGPS();
+ new_gps = false;
+ companion = null;
}
}