diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ao_flight_test.c | 42 | 
1 files 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; | 
