}
}
+ public int log_format = AltosLib.MISSING;
+
+ public void set_log_format(int log_format) {
+ if (log_format != AltosLib.MISSING)
+ this.log_format = log_format;
+ }
+
public int config_major = AltosLib.MISSING;
public int config_minor = AltosLib.MISSING;
public int flight_log_max = AltosLib.MISSING;
private AltosCalData cal_data = null;
public double time = AltosLib.MISSING;
- public int state = AltosLib.MISSING;
public double frequency = AltosLib.MISSING;
public void set_tick(int tick) {
cal_data().set_serial(serial);
}
+ public void set_device_type(int device_type) {
+ cal_data().set_device_type(device_type);
+ switch (device_type) {
+ case AltosLib.product_telegps:
+ set_state(AltosLib.ao_flight_stateless);
+ break;
+ }
+ }
+
+ public void set_log_format(int log_format) {
+ cal_data().set_log_format(log_format);
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEGPS:
+ set_state(AltosLib.ao_flight_stateless);
+ break;
+ }
+ }
+
public double time() {
return time;
}
public void set_state(int state) {
cal_data().set_state(state);
- if (state != AltosLib.MISSING)
- this.state = state;
+ }
+
+ public int state() {
+ return cal_data().state;
}
public void set_flight(int flight) {
public void finish() {
}
+ public void init() {
+ set_state(AltosLib.ao_flight_invalid);
+ time = AltosLib.MISSING;
+ frequency = AltosLib.MISSING;
+ }
+
public abstract void set_rssi(int rssi, int status);
public abstract void set_received_time(long received_time);
/* AltosDataProvider */
public void provide_data(AltosDataListener listener, AltosCalData cal_data) {
- cal_data.set_tick(tick());
+ listener.set_tick(tick());
if (cmd() == AltosLib.AO_LOG_FLIGHT)
cal_data.set_boost_tick();
listener.set_time(cal_data.time());
AltosCalData cal_data = cal_data();
cal_data.reset();
+ listener.set_log_format(config_data().log_format);
+
for (AltosEepromRecord record : ordered) {
record.provide_data(listener, cal_data);
}
public void set_state(int state) {
- if (state == AltosLib.ao_flight_pad)
- return;
-
- if (state_series == null)
- state_series = add_series(state_name, AltosConvert.state_name);
- else if (this.state == state)
- return;
- this.state = state;
- state_series.add(time(), state);
+ if (state != AltosLib.ao_flight_pad && state != AltosLib.MISSING && state != AltosLib.ao_flight_stateless) {
+ if (state_series == null)
+ state_series = add_series(state_name, AltosConvert.state_name);
+ if (this.state() != state)
+ state_series.add(time(), state);
+ }
+ super.set_state(state);
}
public AltosTimeSeries accel_series;
class AltosPressure extends AltosValue {
void set(double p, double time) {
super.set(p, time);
- if (state == AltosLib.ao_flight_pad)
+ if (state() == AltosLib.ao_flight_pad)
ground_pressure.set_filtered(p, time);
double a = pressure_to_altitude(p);
altitude.set_computed(a, time);
class AltosSpeed extends AltosCValue {
boolean can_max() {
- return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless;
+ return state() < AltosLib.ao_flight_fast || state() == AltosLib.ao_flight_stateless;
}
void set_accel() {
class AltosAccel extends AltosCValue {
boolean can_max() {
- return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless;
+ return state() < AltosLib.ao_flight_fast || state() == AltosLib.ao_flight_stateless;
}
void set_measured(double a, double time) {
}
public void init() {
+ super.init();
+
set = 0;
received_time = System.currentTimeMillis();
- time = AltosLib.MISSING;
- state = AltosLib.ao_flight_invalid;
landed = false;
boost = false;
rssi = AltosLib.MISSING;
if (gps.locked && gps.nsat >= 4) {
/* Track consecutive 'good' gps reports, waiting for 10 of them */
- if (state == AltosLib.ao_flight_pad || state == AltosLib.ao_flight_stateless) {
+ if (state() == AltosLib.ao_flight_pad || state() == AltosLib.ao_flight_stateless) {
set_npad(npad+1);
- if (pad_lat != AltosLib.MISSING && (npad < 10 || state == AltosLib.ao_flight_pad)) {
+ if (pad_lat != AltosLib.MISSING && (npad < 10 || state() == AltosLib.ao_flight_pad)) {
pad_lat = (pad_lat * 31 + gps.lat) / 32;
pad_lon = (pad_lon * 31 + gps.lon) / 32;
gps_ground_altitude.set_filtered(gps.alt, time);
}
public String state_name() {
- return AltosLib.state_name(state);
+ return AltosLib.state_name(state());
}
public void set_state(int state) {
- if (state != AltosLib.ao_flight_invalid) {
- this.state = state;
- ascent = (AltosLib.ao_flight_boost <= state &&
- state <= AltosLib.ao_flight_coast);
- boost = (AltosLib.ao_flight_boost == state);
- }
- }
-
- public int state() {
- return state;
- }
-
- private void re_init() {
- init();
+ super.set_state(state);
+ ascent = (AltosLib.ao_flight_boost <= state() &&
+ state() <= AltosLib.ao_flight_coast);
+ boost = (AltosLib.ao_flight_boost == state());
}
public int rssi() {
public void provide_data(AltosDataListener listener) {
listener.set_serial(serial());
- if (listener.state == AltosLib.ao_flight_invalid)
+ if (listener.state() == AltosLib.ao_flight_invalid)
listener.set_state(AltosLib.ao_flight_startup);
if (frequency != AltosLib.MISSING)
listener.set_frequency(frequency);
AltosCalData cal_data = listener.cal_data();
- cal_data.set_device_type(device_type());
+ listener.set_device_type(device_type());
cal_data.set_flight(flight());
cal_data.set_config(config_major(), config_minor(), flight_log_max());
if (device_type() == AltosLib.product_telegps)
/* Try to pick up at least one pre-boost value */
if (cal_data.time() >= -2)
telem.provide_data(listener);
- if (listener.state == AltosLib.ao_flight_landed)
+ if (listener.state() == AltosLib.ao_flight_landed)
break;
}
listener.finish();
throw new IOException("IO error");
} while (!link.get_monitor());
AltosTelemetry telem = AltosTelemetry.parse(l.line);
- if (state == null) {
- System.out.printf("Make state\n");
+ if (state == null)
state = new AltosState(cal_data());
- }
telem.provide_data(state);
return state;
}
public AltosCalData cal_data() {
- if (cal_data == null) {
- System.out.printf("Make cal data\n");
+ if (cal_data == null)
cal_data = new AltosCalData();
- }
return cal_data;
}