tick = AltosLib.MISSING;
prev_tick = AltosLib.MISSING;
temp_gps = null;
- prev_gps = null;
temp_gps_sat_tick = AltosLib.MISSING;
accel = AltosLib.MISSING;
}
public double gps_pad_altitude = AltosLib.MISSING;
- public void set_gps(AltosGPS gps) {
- if ((state != AltosLib.MISSING && state < AltosLib.ao_flight_boost) || gps_pad == null)
- gps_pad = gps;
- if (gps_pad_altitude == AltosLib.MISSING && gps.alt != AltosLib.MISSING)
- gps_pad_altitude = gps.alt;
+ public void set_cal_gps(AltosGPS gps) {
+ if (gps.locked && gps.nsat >= 4) {
+ if ((state != AltosLib.MISSING && state < AltosLib.ao_flight_boost) || gps_pad == null)
+ gps_pad = gps;
+ if (gps_pad_altitude == AltosLib.MISSING && gps.alt != AltosLib.MISSING)
+ gps_pad_altitude = gps.alt;
+ }
+ temp_gps = null;
}
/*
* object and then deliver the result atomically to the listener
*/
AltosGPS temp_gps = null;
- AltosGPS prev_gps = null;
int temp_gps_sat_tick = AltosLib.MISSING;
- public AltosGPS temp_gps() {
+ public AltosGPS temp_cal_gps() {
return temp_gps;
}
- public void reset_temp_gps() {
- if (temp_gps != null) {
- if (temp_gps.locked && temp_gps.nsat >= 4)
- set_gps(temp_gps);
- prev_gps = temp_gps;
- temp_gps = null;
- }
+ public void reset_temp_cal_gps() {
+ if (temp_gps != null)
+ set_cal_gps(temp_gps);
}
- public boolean gps_pending() {
+ public boolean cal_gps_pending() {
return temp_gps != null;
}
- public AltosGPS make_temp_gps(int tick, boolean sats) {
- if (temp_gps == null) {
- if (prev_gps != null)
- temp_gps = prev_gps.clone();
- else
- temp_gps = new AltosGPS();
- }
+ public AltosGPS make_temp_cal_gps(int tick, boolean sats) {
+ if (temp_gps == null)
+ temp_gps = new AltosGPS();
if (sats) {
if (tick != temp_gps_sat_tick)
temp_gps.cc_gps_sat = null;
public abstract void set_apogee_voltage(double volts);
public abstract void set_main_voltage(double volts);
- public abstract void set_gps(AltosGPS gps);
+ public void set_gps(AltosGPS gps) {
+ AltosCalData cal_data = cal_data();
+ cal_data.set_cal_gps(gps);
+ }
+
+ public AltosGPS make_temp_gps(boolean sats) {
+ return cal_data().make_temp_cal_gps(tick(), sats);
+ }
+
+ public AltosGPS temp_gps() {
+ return cal_data().temp_cal_gps();
+ }
public abstract void set_orient(double orient);
public abstract void set_gyro(double roll, double pitch, double yaw);
public void set_main_voltage(double volts) { }
public void set_gps(AltosGPS gps) {
+ super.set_gps(gps);
if (gps != null &&
gps.year != AltosLib.MISSING &&
gps.month != AltosLib.MISSING &&
/* Flush any pending GPS changes */
if (!AltosLib.is_gps_cmd(cmd())) {
- AltosGPS gps = cal_data.temp_gps();
- if (gps != null) {
+ AltosGPS gps = listener.temp_gps();
+ if (gps != null)
listener.set_gps(gps);
- cal_data.reset_temp_gps();
- }
}
}
listener.set_state(data16(0));
break;
case AltosLib.AO_LOG_GPS_TIME:
- gps = cal_data.make_temp_gps(tick(),false);
+ gps = listener.make_temp_gps(false);
gps.hour = data8(0);
gps.minute = data8(1);
AltosLib.AO_GPS_NUM_SAT_SHIFT;
break;
case AltosLib.AO_LOG_GPS_LAT:
- gps = cal_data.make_temp_gps(tick(),false);
+ gps = listener.make_temp_gps(false);
int lat32 = data32(0);
gps.lat = (double) lat32 / 1e7;
break;
case AltosLib.AO_LOG_GPS_LON:
- gps = cal_data.make_temp_gps(tick(),false);
+ gps = listener.make_temp_gps(false);
int lon32 = data32(0);
gps.lon = (double) lon32 / 1e7;
break;
case AltosLib.AO_LOG_GPS_ALT:
- gps = cal_data.make_temp_gps(tick(),false);
+ gps = listener.make_temp_gps(false);
gps.alt = data16(0);
break;
case AltosLib.AO_LOG_GPS_SAT:
- gps = cal_data.make_temp_gps(tick(),true);
+ gps = listener.make_temp_gps(true);
int svid = data16(0);
int c_n0 = data16(2);
gps.add_sat(svid, c_n0);
break;
case AltosLib.AO_LOG_GPS_DATE:
- gps = cal_data.make_temp_gps(tick(),false);
+ gps = listener.make_temp_gps(false);
gps.year = data8(0) + 2000;
gps.month = data8(1);
gps.day = data8(2);
listener.set_pyro_fired(pyro());
break;
case AltosLib.AO_LOG_GPS_TIME:
- gps = cal_data.make_temp_gps(tick(), false);
+ gps = listener.make_temp_gps(false);
gps.lat = latitude() / 1e7;
gps.lon = longitude() / 1e7;
}
break;
case AltosLib.AO_LOG_GPS_SAT:
- gps = cal_data.make_temp_gps(tick(), true);
+ gps = listener.make_temp_gps(true);
int n = nsat();
if (n > max_sat)
listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense_m()));
break;
case AltosLib.AO_LOG_GPS_POS:
- gps = cal_data.make_temp_gps(tick(), false);
+ gps = listener.make_temp_gps(false);
gps.lat = latitude() / 1e7;
gps.lon = longitude() / 1e7;
if (config_data().altitude_32())
gps.alt = altitude_low();
break;
case AltosLib.AO_LOG_GPS_TIME:
- gps = cal_data.make_temp_gps(tick(), false);
+ gps = listener.make_temp_gps(false);
gps.hour = hour();
gps.minute = minute();
gps.pdop = pdop() / 10.0;
break;
case AltosLib.AO_LOG_GPS_SAT:
- gps = cal_data.make_temp_gps(tick(), true);
+ gps = listener.make_temp_gps(true);
int n = nsat();
for (int i = 0; i < n; i++)
+++ /dev/null
-/*
- * Copyright © 2017 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- */
-
-package org.altusmetrum.altoslib_12;
-
-public abstract class AltosFlightListener {
-
- public int flight;
- public int serial;
- public int tick;
- public int boost_tick;
- public int state;
-
- public double accel_plus_g;
- public double accel_minus_g;
- public double accel;
-
- public double ground_pressure;
- public double ground_altitude;
-
- AltosGPS temp_gps;
- int temp_gps_sat_tick;
- int gps_sequence;
-
- /* AltosEepromRecord */
- public void set_boost_tick(int boost_tick) {
- if (boost_tick != AltosLib.MISSING)
- this.boost_tick = boost_tick;
- }
-
- public void set_tick(int tick) {
- if (tick != AltosLib.MISSING)
- this.tick = tick;
- }
-
- public double time() {
- if (tick == AltosLib.MISSING)
- return AltosLib.MISSING;
- if (boost_tick != AltosLib.MISSING)
- return (tick - boost_tick) / 100.0;
- else
- return tick / 100.0;
- }
-
- public double boost_time() {
- if (boost_tick == AltosLib.MISSING)
- return AltosLib.MISSING;
- return boost_tick / 100.0;
- }
-
- public abstract void set_rssi(int rssi, int status);
- public abstract void set_received_time(long received_time);
-
- /* AltosEepromRecordFull */
-
- public void set_serial(int serial) {
- if (serial != AltosLib.MISSING)
- this.serial = serial;
- }
-
- public void set_state(int state) {
- if (state != AltosLib.MISSING)
- this.state = state;
- }
-
- public int state() { return state; }
-
- public abstract void set_ground_accel(double ground_accel);
- public void set_flight(int flight) {
- if (flight != AltosLib.MISSING)
- this.flight = flight;
- }
- public int flight() {
- return flight;
- }
-
- public abstract void set_accel(double accel);
- public abstract void set_acceleration(double accel);
- public abstract void set_accel_g(double accel_plus_g, double accel_minus_g);
- public abstract void set_pressure(double pa);
- public abstract void set_thrust(double N);
-
- public abstract void set_temperature(double deg_c);
- public abstract void set_battery_voltage(double volts);
-
- public abstract void set_apogee_voltage(double volts);
- public abstract void set_main_voltage(double volts);
-
- public void set_temp_gps() {
- temp_gps = null;
- }
-
- public boolean gps_pending() {
- return temp_gps != null;
- }
-
- public AltosGPS make_temp_gps(boolean sats) {
- if (temp_gps == null) {
- temp_gps = new AltosGPS();
- }
- if (sats) {
- if (tick != temp_gps_sat_tick)
- temp_gps.cc_gps_sat = null;
- temp_gps_sat_tick = tick;
- }
- return temp_gps;
- }
-
- public void set_ground_pressure(double ground_pressure) {
- if (ground_pressure != AltosLib.MISSING) {
- this.ground_pressure = ground_pressure;
- this.ground_altitude = AltosConvert.pressure_to_altitude(ground_pressure);
- }
- }
-
- public abstract void set_accel_ground(double along, double across, double through);
- public abstract void set_gyro_zero(double roll, double pitch, double yaw);
- public abstract void check_imu_wrap(AltosIMU imu);
- public abstract void set_imu(AltosIMU imu);
- public abstract void set_mag(AltosMag mag);
- public abstract void set_pyro_voltage(double volts);
- public abstract void set_igniter_voltage(double[] voltage);
- public abstract void set_pyro_fired(int pyro_mask);
-
- public void copy(AltosFlightListener old) {
- flight = old.flight;
- serial = old.serial;
- tick = old.tick;
- boost_tick = old.boost_tick;
- accel_plus_g = old.accel_plus_g;
- accel_minus_g = old.accel_minus_g;
- ground_pressure = old.ground_pressure;
- ground_altitude = old.ground_altitude;
- temp_gps = old.temp_gps;
- temp_gps_sat_tick = old.temp_gps_sat_tick;
- }
-
- public void init() {
- flight = AltosLib.MISSING;
- serial = AltosLib.MISSING;
- tick = AltosLib.MISSING;
- boost_tick = AltosLib.MISSING;
- accel_plus_g = AltosLib.MISSING;
- accel_minus_g = AltosLib.MISSING;
- accel = AltosLib.MISSING;
- ground_pressure = AltosLib.MISSING;
- ground_altitude = AltosLib.MISSING;
- temp_gps = null;
- temp_gps_sat_tick = AltosLib.MISSING;
- }
-}
public static final String gps_hdop_name = "GPS Horizontal Dilution of Precision";
public void set_gps(AltosGPS gps) {
+ super.set_gps(gps);
if (gps_series == null)
gps_series = new ArrayList<AltosGPSTimeValue>();
gps_series.add(new AltosGPSTimeValue(time(), gps));
public void set_apogee_voltage(double volts) { state.set_apogee_voltage(volts); }
public void set_main_voltage(double volts) { state.set_main_voltage(volts); }
- public void set_gps(AltosGPS gps) { state.set_gps(gps); }
+ public void set_gps(AltosGPS gps) { super.set_gps(gps); state.set_gps(gps); }
public void set_orient(double orient) { state.set_orient(orient); }
public void set_gyro(double roll, double pitch, double yaw) { state.set_gyro(roll, pitch, yaw); }
}
public void set_gps(AltosGPS gps) {
+ super.set_gps(gps);
if (gps != null) {
this.gps = gps;
update_gps();
AltosCalData cal_data = listener.cal_data();
- AltosGPS gps = cal_data.make_temp_gps(tick(), false);
+ AltosGPS gps = listener.make_temp_gps(false);
int flags = flags();
gps.nsat = flags & 0xf;
gps.ground_speed = ground_speed() * 1.0e-2;
gps.course = course() * 2;
gps.climb_rate = climb_rate() * 1.0e-2;
-
- if (gps.nsat >= 4)
- cal_data.set_gps(gps);
}
listener.set_gps(gps);
- cal_data.set_gps(gps);
- cal_data.reset_temp_gps();
}
}
AltosCalData cal_data = listener.cal_data();
- AltosGPS gps = cal_data.make_temp_gps(tick(), true);
+ AltosGPS gps = listener.make_temp_gps(true);
gps.cc_gps_sat = sats();
listener.set_gps(gps);
- cal_data.reset_temp_gps();
}
}