From f5642db4e03856b1f2ffeae6570fcf35fb7d93fb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 27 Aug 2017 17:32:27 -0700 Subject: [PATCH] altos/test: Fake baro data for flight 12 serial 2093 This flight had a baro spike due to an accidental drogue charge firing but is otherwise quite useful when testing for various mach delay effects, so fake out the data during that spike. Signed-off-by: Keith Packard --- src/test/ao_flight_test.c | 42 +++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/test/ao_flight_test.c b/src/test/ao_flight_test.c index 7683a4d9..55bfe410 100644 --- a/src/test/ao_flight_test.c +++ b/src/test/ao_flight_test.c @@ -321,7 +321,7 @@ ao_dump_state(void); 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" }; @@ -362,6 +362,9 @@ extern int16_t ao_accel_2g; 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; @@ -480,7 +483,6 @@ ao_insert(void) 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) / @@ -488,14 +490,6 @@ ao_insert(void) #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) @@ -506,6 +500,27 @@ ao_insert(void) 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; @@ -658,6 +673,7 @@ ao_insert(void) // ao_test_exit(); } } + ao_data_head = ao_data_ring_next(ao_data_head); } @@ -768,6 +784,7 @@ ao_sleep(void *wchan) // 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); @@ -877,6 +894,7 @@ ao_sleep(void *wchan) 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 @@ -942,6 +960,7 @@ ao_sleep(void *wchan) // 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); @@ -990,6 +1009,8 @@ ao_sleep(void *wchan) #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]); @@ -1112,6 +1133,7 @@ ao_sleep(void *wchan) 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; -- 2.30.2