When the device being analyzed has no flight state, we want to use the
'stateless' state so that the UI can display reasonable
information. This bit was lost in the recent AltosState shuffle and
this patch brings it back.
Signed-off-by: Keith Packard <keithp@keithp.com>
+ 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;
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;
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) {
public double frequency = AltosLib.MISSING;
public void set_tick(int tick) {
cal_data().set_serial(serial);
}
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);
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 set_flight(int flight) {
+ 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);
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) {
/* 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());
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();
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);
}
for (AltosEepromRecord record : ordered) {
record.provide_data(listener, cal_data);
}
public void set_state(int state) {
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;
}
public AltosTimeSeries accel_series;
class AltosPressure extends AltosValue {
void set(double p, double time) {
super.set(p, time);
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);
ground_pressure.set_filtered(p, time);
double a = pressure_to_altitude(p);
altitude.set_computed(a, time);
class AltosSpeed extends AltosCValue {
boolean can_max() {
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;
class AltosAccel extends AltosCValue {
boolean can_max() {
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) {
}
void set_measured(double a, double time) {
set = 0;
received_time = System.currentTimeMillis();
set = 0;
received_time = System.currentTimeMillis();
- time = AltosLib.MISSING;
- state = AltosLib.ao_flight_invalid;
landed = false;
boost = false;
rssi = AltosLib.MISSING;
landed = false;
boost = false;
rssi = AltosLib.MISSING;
if (gps.locked && gps.nsat >= 4) {
/* Track consecutive 'good' gps reports, waiting for 10 of them */
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) {
- 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);
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() {
}
public String state_name() {
- return AltosLib.state_name(state);
+ return AltosLib.state_name(state());
}
public void set_state(int 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 void provide_data(AltosDataListener listener) {
listener.set_serial(serial());
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);
listener.set_state(AltosLib.ao_flight_startup);
if (frequency != AltosLib.MISSING)
listener.set_frequency(frequency);
AltosCalData cal_data = listener.cal_data();
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)
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);
/* 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();
break;
}
listener.finish();
throw new IOException("IO error");
} while (!link.get_monitor());
AltosTelemetry telem = AltosTelemetry.parse(l.line);
throw new IOException("IO error");
} while (!link.get_monitor());
AltosTelemetry telem = AltosTelemetry.parse(l.line);
- if (state == null) {
- System.out.printf("Make state\n");
state = new AltosState(cal_data());
state = new AltosState(cal_data());
telem.provide_data(state);
return state;
}
public AltosCalData cal_data() {
telem.provide_data(state);
return state;
}
public AltosCalData cal_data() {
- if (cal_data == null) {
- System.out.printf("Make cal data\n");
cal_data = new AltosCalData();
cal_data = new AltosCalData();