X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosRecord.java;h=144b1c3c5a1a94caa847ab4bf8b11655082e0677;hp=1160a2736299743e81ae484d878570dadc79aa5a;hb=41c230cac359b4459ca93196d08704b7d35447c7;hpb=51c7741040d95c5deece939dae5e4136cc04afc4 diff --git a/altosui/AltosRecord.java b/altosui/AltosRecord.java index 1160a273..144b1c3c 100644 --- a/altosui/AltosRecord.java +++ b/altosui/AltosRecord.java @@ -23,6 +23,17 @@ import java.util.HashMap; import java.io.*; public class 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; + int seen; + int version; String callsign; int serial; @@ -31,23 +42,38 @@ public class AltosRecord { 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; 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; /* * Values for our MP3H6115A pressure sensor * @@ -72,46 +98,82 @@ public class AltosRecord { } 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); } @@ -131,6 +193,8 @@ public class AltosRecord { } public double temperature() { + if (temp == MISSING) + return MISSING; return thermometer_to_temperature(temp); } @@ -139,13 +203,22 @@ public class AltosRecord { 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() { @@ -169,6 +242,7 @@ public class AltosRecord { public AltosRecord(AltosRecord old) { version = old.version; + seen = old.seen; callsign = old.callsign; serial = old.serial; flight = old.flight; @@ -189,11 +263,15 @@ public class AltosRecord { 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); } public AltosRecord() { version = 0; + seen = 0; callsign = "N0CALL"; serial = 0; flight = 0; @@ -201,12 +279,12 @@ public class AltosRecord { 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; @@ -214,6 +292,9 @@ public class AltosRecord { ground_pres = 0; accel_plus_g = 0; accel_minus_g = 0; + acceleration = MISSING; + speed = MISSING; + height = MISSING; gps = new AltosGPS(); } }