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 public void set_temperature(double deg_c) {
142 public void set_battery_voltage(double volts) {
145 public void set_apogee_voltage(double volts) {
148 public void set_main_voltage(double volts) {
151 AltosTimeSeries sats_in_view;
152 AltosTimeSeries sats_in_soln;
153 AltosTimeSeries gps_altitude;
154 AltosTimeSeries gps_ground_speed;
155 AltosTimeSeries gps_ascent_rate;
156 AltosTimeSeries gps_course;
157 AltosTimeSeries gps_speed;
159 public static final String sats_in_view_name = "Satellites in view";
160 public static final String sats_in_soln_name = "Satellites in solution";
161 public static final String gps_altitude_name = "GPS Altitude";
163 public void set_temp_gps() {
164 if (sats_in_view == null) {
165 sats_in_view = add_series("Satellites in view", null);
166 sats_in_soln = add_series("Satellites in solution", null);
167 gps_altitude = add_series("GPS Altitude", AltosConvert.height);
168 gps_ground_speed = add_series("GPS Ground Speed", AltosConvert.speed);
169 gps_ascent_rate = add_series("GPS Ascent Rate", AltosConvert.speed);
170 gps_course = add_series("GPS Course", null);
171 gps_speed = add_series("GPS Speed", null);
174 /* XXX capture GPS data */
175 super.set_temp_gps();
178 public boolean gps_pending() {
179 return temp_gps != null;
182 public AltosGPS make_temp_gps(boolean sats) {
183 if (temp_gps == null) {
184 temp_gps = new AltosGPS();
187 if (tick != temp_gps_sat_tick)
188 temp_gps.cc_gps_sat = null;
189 temp_gps_sat_tick = tick;
194 public void set_ground_pressure(double ground_pressure) {
197 public void set_accel_ground(double along, double across, double through) {
200 public void set_gyro_zero(double roll, double pitch, double yaw) {
203 public void set_ms5607(int pres_val, int temp_val) {
204 if (ms5607 != null) {
205 ms5607.set(pres_val, temp_val);
207 set_pressure(ms5607.pa);
208 set_temperature(ms5607.cc / 100.0);
212 public void check_imu_wrap(AltosIMU imu) {
215 public void set_imu(AltosIMU imu) {
218 public void set_mag(AltosMag mag) {
221 public void set_pyro_voltage(double volts) {
224 public void set_ignitor_voltage(double[] voltage) {
227 public void set_pyro_fired(int pyro_mask) {
231 flight = AltosLib.MISSING;
232 tick = AltosLib.MISSING;
233 boost_tick = AltosLib.MISSING;
234 temp_gps_sat_tick = AltosLib.MISSING;
235 series = new ArrayList<AltosTimeSeries>();
238 public void copy(AltosFlightSeries old) {
242 public AltosTimeSeries[] series() {
243 return series.toArray(new AltosTimeSeries[0]);
246 public AltosFlightSeries() {