private AltosValue gps_ground_speed;
private AltosValue gps_ascent_rate;
private AltosValue gps_course;
+ private AltosValue gps_speed;
public double altitude() {
double a = altitude.value();
return gps_ground_speed.value();
}
+ public double max_gps_ground_speed() {
+ return gps_ground_speed.max();
+ }
+
public double gps_ascent_rate() {
return gps_ascent_rate.value();
}
+ public double max_gps_ascent_rate() {
+ return gps_ascent_rate.max();
+ }
+
public double gps_course() {
return gps_course.value();
}
+ public double gps_speed() {
+ return gps_speed.value();
+ }
+
+ public double max_gps_speed() {
+ return gps_speed.max();
+ }
+
class AltosPressure extends AltosValue {
void set(double p, double time) {
super.set(p, time);
double g = ground_altitude();
if (a != AltosLib.MISSING && g != AltosLib.MISSING)
return a - g;
- return AltosLib.MISSING;
+ return gps_height();
}
public double max_height() {
double g = ground_altitude();
if (a != AltosLib.MISSING && g != AltosLib.MISSING)
return a - g;
- return AltosLib.MISSING;
+ return max_gps_height();
}
public double gps_height() {
double v = kalman_speed.value();
if (v != AltosLib.MISSING)
return v;
- return speed.value();
+ v = speed.value();
+ if (v != AltosLib.MISSING)
+ return v;
+ v = gps_speed();
+ if (v != AltosLib.MISSING)
+ return v;
+ return AltosLib.MISSING;
}
public double max_speed() {
double v = kalman_speed.max();
if (v != AltosLib.MISSING)
return v;
- return speed.max();
+ v = speed.max();
+ if (v != AltosLib.MISSING)
+ return v;
+ v = max_gps_speed();
+ if (v != AltosLib.MISSING)
+ return v;
+ return AltosLib.MISSING;
}
class AltosAccel extends AltosCValue {
gps_altitude = new AltosGpsAltitude();
gps_ground_altitude = new AltosGpsGroundAltitude();
gps_ground_speed = new AltosValue();
+ gps_speed = new AltosValue();
gps_ascent_rate = new AltosValue();
gps_course = new AltosValue();
speak_altitude = AltosLib.MISSING;
callsign = null;
+ firmware_version = null;
accel_plus_g = AltosLib.MISSING;
accel_minus_g = AltosLib.MISSING;
gps_ground_speed.copy(old.gps_ground_speed);
gps_ascent_rate.copy(old.gps_ascent_rate);
gps_course.copy(old.gps_course);
+ gps_speed.copy(old.gps_speed);
pad_lat = old.pad_lat;
pad_lon = old.pad_lon;
speak_altitude = old.speak_altitude;
callsign = old.callsign;
+ firmware_version = old.firmware_version;
accel_plus_g = old.accel_plus_g;
accel_minus_g = old.accel_minus_g;
}
void update_gps() {
- elevation = 0;
- range = -1;
+ elevation = AltosLib.MISSING;
+ range = AltosLib.MISSING;
if (gps == null)
return;
gps_ascent_rate.set(gps.climb_rate, time);
if (gps.ground_speed != AltosLib.MISSING)
gps_ground_speed.set(gps.ground_speed, time);
+ if (gps.climb_rate != AltosLib.MISSING && gps.ground_speed != AltosLib.MISSING)
+ gps_speed.set(Math.sqrt(gps.ground_speed * gps.ground_speed +
+ gps.climb_rate * gps.climb_rate), time);
if (gps.course != AltosLib.MISSING)
gps_course.set(gps.course, time);
}