void
ao_sleep(void *wchan);
-const char const * const ao_state_names[] = {
+const char * const ao_state_names[] = {
"startup", "idle", "pad", "boost", "fast",
"coast", "drogue", "main", "landed", "invalid"
};
typedef int16_t accel_t;
+uint16_t ao_serial_number;
+uint16_t ao_flight_number;
+
extern uint16_t ao_sample_tick;
extern alt_t ao_sample_height;
double time;
ao_data_ring[ao_data_head] = ao_data_static;
- ao_data_head = ao_data_ring_next(ao_data_head);
if (ao_flight_state != ao_flight_startup) {
#if HAS_ACCEL
double accel = ((ao_flight_ground_accel - ao_data_accel_cook(&ao_data_static)) * GRAVITY * 2.0) /
#else
double accel = 0.0;
#endif
-#if TELEMEGA || TELEMETRUM_V2 || EASYMINI
- double height;
-
- ao_ms5607_convert(&ao_data_static.ms5607_raw, &ao_data_static.ms5607_cooked);
- height = ao_pa_to_altitude(ao_data_static.ms5607_cooked.pres) - ao_ground_height;
-#else
- double height = ao_pres_to_altitude(ao_data_static.adc.pres_real) - ao_ground_height;
-#endif
(void) accel;
if (!tick_offset)
prev_tick = ao_data_static.tick;
time = (double) (ao_data_static.tick + tick_offset) / 100;
+#if TELEMEGA || TELEMETRUM_V2 || EASYMINI
+ ao_ms5607_convert(&ao_data_static.ms5607_raw, &ao_data_static.ms5607_cooked);
+ double height = ao_pa_to_altitude(ao_data_static.ms5607_cooked.pres) - ao_ground_height;
+
+ /* Hack to skip baro spike at accidental drogue charge
+ * firing in 2015-09-26-serial-2093-flight-0012.eeprom
+ * so we can test the kalman filter with this data. Just
+ * keep reporting the same baro value across the pressure spike
+ */
+ {
+ static struct ao_ms5607_sample save;
+ if (ao_serial_number == 2093 && ao_flight_number == 12 && 32.5 < time && time < 33.7) {
+ ao_data_ring[ao_data_head].ms5607_raw = save;
+ } else {
+ save = ao_data_static.ms5607_raw;
+ }
+ }
+#else
+ double height = ao_pres_to_altitude(ao_data_static.adc.pres_real) - ao_ground_height;
+#endif
+
if (ao_test_max_height < height) {
ao_test_max_height = height;
ao_test_max_height_time = time;
// ao_test_exit();
}
}
+ ao_data_head = ao_data_ring_next(ao_data_head);
}
// printf ("\n");
switch (type) {
case 'F':
+ ao_flight_number = uint16(bytes, 0);
ao_flight_ground_accel = int16(bytes, 2);
ao_flight_started = 1;
ao_ground_pres = int32(bytes, 4);
switch (type) {
case 'F':
ao_flight_started = 1;
+ ao_flight_number = uint16(bytes, 0);
ao_ground_pres = uint32(bytes, 4);
ao_ground_height = ao_pa_to_altitude(ao_ground_pres);
#if 0
// printf ("\n");
switch (type) {
case 'F':
+ ao_flight_number = uint16(bytes, 0);
ao_flight_ground_accel = int16(bytes, 2);
ao_flight_started = 1;
ao_ground_pres = int32(bytes, 4);
#endif
else if (nword == 2 && strcmp(words[0], "log-format") == 0) {
log_format = strtoul(words[1], NULL, 10);
+ } else if (nword == 2 && strcmp(words[0], "serial-number") == 0) {
+ ao_serial_number = strtoul(words[1], NULL, 10);
} else if (nword >= 6 && strcmp(words[0], "Accel") == 0) {
ao_config.accel_plus_g = atoi(words[3]);
ao_config.accel_minus_g = atoi(words[5]);
switch (type) {
case 'F':
ao_flight_ground_accel = a;
+ ao_flight_number = b;
if (ao_config.accel_plus_g == 0) {
ao_config.accel_plus_g = a;
ao_config.accel_minus_g = a + 530;