TeleGPS has no flight state, so add a new 'stateless' state for code
to handle this case differently than any of the existing states
Signed-off-by: Keith Packard <keithp@keithp.com>
headers = new AltosEepromIterable(AltosEepromHeader.read(input));
start = headers.state();
headers = new AltosEepromIterable(AltosEepromHeader.read(input));
start = headers.state();
- start.set_state(AltosLib.ao_flight_pad);
+ if (start.state != AltosLib.ao_flight_stateless)
+ start.set_state(AltosLib.ao_flight_pad);
if (start.log_format == AltosLib.MISSING) {
if (start.product != null) {
if (start.log_format == AltosLib.MISSING) {
if (start.product != null) {
state.product = data;
break;
case AltosLib.AO_LOG_LOG_FORMAT:
state.product = data;
break;
case AltosLib.AO_LOG_LOG_FORMAT:
- state.log_format = config_a;
+ state.set_log_format(config_a);
break;
case AltosLib.AO_LOG_SERIAL_NUMBER:
state.set_serial(config_a);
break;
case AltosLib.AO_LOG_SERIAL_NUMBER:
state.set_serial(config_a);
public static final int ao_flight_main = 7;
public static final int ao_flight_landed = 8;
public static final int ao_flight_invalid = 9;
public static final int ao_flight_main = 7;
public static final int ao_flight_landed = 8;
public static final int ao_flight_invalid = 9;
+ public static final int ao_flight_stateless = 10;
/* USB product IDs */
public final static int vendor_altusmetrum = 0xfffe;
/* USB product IDs */
public final static int vendor_altusmetrum = 0xfffe;
string_to_state.put("main", ao_flight_main);
string_to_state.put("landed", ao_flight_landed);
string_to_state.put("invalid", ao_flight_invalid);
string_to_state.put("main", ao_flight_main);
string_to_state.put("landed", ao_flight_landed);
string_to_state.put("invalid", ao_flight_invalid);
+ string_to_state.put("stateless", ao_flight_stateless);
map_initialized = true;
}
map_initialized = true;
}
"main",
"landed",
"invalid",
"main",
"landed",
"invalid",
};
private static String[] state_to_string_capital = {
};
private static String[] state_to_string_capital = {
"Main",
"Landed",
"Invalid",
"Main",
"Landed",
"Invalid",
};
public static int state(String state) {
};
public static int state(String state) {
class AltosSpeed extends AltosCValue {
boolean can_max() {
class AltosSpeed extends AltosCValue {
boolean can_max() {
- return state < AltosLib.ao_flight_fast;
+ 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;
+ 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) {
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) {
+ if (state == AltosLib.ao_flight_pad || state == AltosLib.ao_flight_stateless) {
- if (pad_lat != AltosLib.MISSING) {
+ 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);
state <= AltosLib.ao_flight_coast);
boost = (AltosLib.ao_flight_boost == state);
}
state <= AltosLib.ao_flight_coast);
boost = (AltosLib.ao_flight_boost == state);
}
}
public void set_device_type(int device_type) {
this.device_type = device_type;
}
public void set_device_type(int device_type) {
this.device_type = device_type;
+ switch (device_type) {
+ case AltosLib.product_telegps:
+ this.state = AltosLib.ao_flight_stateless;
+ break;
+ }
+ }
+
+ public void set_log_format(int log_format) {
+ this.log_format = log_format;
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEGPS:
+ this.state = AltosLib.ao_flight_stateless;
+ break;
+ }
}
public void set_flight_params(int apogee_delay, int main_deploy) {
}
public void set_flight_params(int apogee_delay, int main_deploy) {