2 * Copyright © 2017 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
15 package org.altusmetrum.altoslib_11;
19 public class AltosFlightSeries extends AltosFlightListener {
27 int temp_gps_sat_tick;
31 public ArrayList<AltosTimeSeries> series;
33 /* AltosEepromRecord */
34 public void set_boost_tick(int boost_tick) {
35 if (boost_tick != AltosLib.MISSING)
36 this.boost_tick = boost_tick;
39 public void set_tick(int tick) {
40 if (tick != AltosLib.MISSING)
44 public double time() {
45 if (tick == AltosLib.MISSING)
46 return AltosLib.MISSING;
50 public double boost_time() {
51 if (boost_tick == AltosLib.MISSING)
52 return AltosLib.MISSING;
53 return boost_tick / 100.0;
56 public AltosTimeSeries make_series(String label, AltosUnits units) {
57 return new AltosTimeSeries(label, units);
60 public AltosTimeSeries add_series(String label, AltosUnits units) {
61 System.out.printf("add series %s\n", label);
62 AltosTimeSeries s = make_series(label, units);
67 /* AltosEepromRecordFull */
69 AltosTimeSeries state_series;
71 public static final String state_name = "State";
73 public void set_state(int state) {
74 if (state_series == null)
75 state_series = add_series(state_name, null);
76 state_series.add(time(), state);
79 public void set_flight(int flight) {
80 if (flight != AltosLib.MISSING)
87 AltosTimeSeries accel_series;
89 double accel_plus_g, accel_minus_g;
91 public static final String accel_name = "Accel";
93 public void set_accel(double accel) {
94 if (accel_series == null)
95 accel_series = add_series(accel_name, AltosConvert.accel);
96 double counts_per_g = (accel_minus_g - accel_plus_g) / 2.0;
97 double counts_per_mss = counts_per_g / 9.80665;
98 double mss = (accel_plus_g - accel) / counts_per_mss;
100 accel_series.add(time(), mss);
104 public void set_accel_g(double accel_plus_g, double accel_minus_g) {
105 this.accel_plus_g = accel_plus_g;
106 this.accel_minus_g = accel_minus_g;
109 public void set_config_data(AltosConfigData config_data) {
110 // if (config_data.callsign != null)
111 // set_callsign(config_data.callsign);
112 if (config_data.accel_cal_plus != AltosLib.MISSING &&
113 config_data.accel_cal_minus != AltosLib.MISSING)
114 set_accel_g(config_data.accel_cal_plus, config_data.accel_cal_minus);
115 // if (config_data.product != null)
116 // set_product(config_data.product);
117 // if (config_data.log_format != AltosLib.MISSING)
118 // set_log_format(config_data.log_format);
119 // if (config_data.serial != AltosLib.MISSING)
120 // set_serial(config_data.serial);
121 AltosMs5607 ms5607 = new AltosMs5607(config_data);
122 if (ms5607.valid_config())
123 this.ms5607 = ms5607;
126 public void set_ground_accel(double ground_accel) {
129 AltosTimeSeries pressure_series;
131 public static final String pressure_name = "Pressure";
133 public void set_pressure(double pa) {
134 if (pressure_series == null)
135 pressure_series = add_series(pressure_name, AltosConvert.pressure);
136 pressure_series.add(time(), pa);
139 AltosTimeSeries thrust_series;
141 public static final String thrust_name = "Thrust";
143 public void set_thrust(double N) {
144 if (thrust_series == null)
145 thrust_series = add_series(thrust_name, AltosConvert.force);
146 thrust_series.add(time(), N);
149 public void set_temperature(double deg_c) {
152 public void set_battery_voltage(double volts) {
155 public void set_apogee_voltage(double volts) {
158 public void set_main_voltage(double volts) {
161 AltosTimeSeries sats_in_view;
162 AltosTimeSeries sats_in_soln;
163 AltosTimeSeries gps_altitude;
164 AltosTimeSeries gps_ground_speed;
165 AltosTimeSeries gps_ascent_rate;
166 AltosTimeSeries gps_course;
167 AltosTimeSeries gps_speed;
169 public static final String sats_in_view_name = "Satellites in view";
170 public static final String sats_in_soln_name = "Satellites in solution";
171 public static final String gps_altitude_name = "GPS Altitude";
173 public void set_temp_gps() {
174 if (sats_in_view == null) {
175 sats_in_view = add_series("Satellites in view", null);
176 sats_in_soln = add_series("Satellites in solution", null);
177 gps_altitude = add_series("GPS Altitude", AltosConvert.height);
178 gps_ground_speed = add_series("GPS Ground Speed", AltosConvert.speed);
179 gps_ascent_rate = add_series("GPS Ascent Rate", AltosConvert.speed);
180 gps_course = add_series("GPS Course", null);
181 gps_speed = add_series("GPS Speed", null);
184 /* XXX capture GPS data */
185 super.set_temp_gps();
188 public boolean gps_pending() {
189 return temp_gps != null;
192 public AltosGPS make_temp_gps(boolean sats) {
193 if (temp_gps == null) {
194 temp_gps = new AltosGPS();
197 if (tick != temp_gps_sat_tick)
198 temp_gps.cc_gps_sat = null;
199 temp_gps_sat_tick = tick;
204 public void set_ground_pressure(double ground_pressure) {
207 public void set_accel_ground(double along, double across, double through) {
210 public void set_gyro_zero(double roll, double pitch, double yaw) {
213 public void set_ms5607(int pres_val, int temp_val) {
214 if (ms5607 != null) {
215 ms5607.set(pres_val, temp_val);
217 set_pressure(ms5607.pa);
218 set_temperature(ms5607.cc / 100.0);
222 public void check_imu_wrap(AltosIMU imu) {
225 public void set_imu(AltosIMU imu) {
228 public void set_mag(AltosMag mag) {
231 public void set_pyro_voltage(double volts) {
234 public void set_ignitor_voltage(double[] voltage) {
237 public void set_pyro_fired(int pyro_mask) {
241 flight = AltosLib.MISSING;
242 tick = AltosLib.MISSING;
243 boost_tick = AltosLib.MISSING;
244 temp_gps_sat_tick = AltosLib.MISSING;
245 series = new ArrayList<AltosTimeSeries>();
248 public void copy(AltosFlightSeries old) {
252 public AltosTimeSeries[] series() {
253 return series.toArray(new AltosTimeSeries[0]);
256 public AltosFlightSeries() {