diff options
| author | Keith Packard <keithp@keithp.com> | 2012-06-02 14:58:00 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-06-02 14:58:00 -0700 | 
| commit | 1353b277f8314fbddef81c743bd6ea229364fd18 (patch) | |
| tree | 0ec45baf38669722e0c7424dbfcdbf484c0f16a9 | |
| parent | c04af7533bd3fd3f3260338c0753fde966131720 (diff) | |
altos: Enable some debugging during flight mode on MM
Until we've got the radio working, there's no way to see inside the MM
state without using USB. Add a diagnostic command to dump out the
internal flight state variables.
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | src/core/ao_flight_mm.c | 50 | 
1 files changed, 49 insertions, 1 deletions
| diff --git a/src/core/ao_flight_mm.c b/src/core/ao_flight_mm.c index 27087e55..e812016e 100644 --- a/src/core/ao_flight_mm.c +++ b/src/core/ao_flight_mm.c @@ -108,7 +108,7 @@ ao_flight(void)   			{  				/* Set pad mode - we can fly! */  				ao_flight_state = ao_flight_pad; -#if HAS_USB +#if HAS_USB && HAS_RADIO  				/* Disable the USB controller in flight mode  				 * to save power  				 */ @@ -352,11 +352,59 @@ ao_flight(void)  	}  } +#if !HAS_RADIO +static inline int int_part(int16_t i)	{ return i >> 4; } +static inline int frac_part(int16_t i)	{ return ((i & 0xf) * 100 + 8) / 16; } + +static void +ao_flight_dump(void) +{ +	int16_t	accel; + +	accel = ((ao_ground_accel - ao_sample_accel) * ao_accel_scale) >> 16; + +	printf ("sample:\n"); +	printf ("  tick        %d\n", ao_sample_tick); +	printf ("  raw pres    %d\n", ao_sample_pres); +#if HAS_ACCEL +	printf ("  raw accel   %d\n", ao_sample_accel); +#endif +	printf ("  ground pres %d\n", ao_ground_pres); +#if HAS_ACCEL +	printf ("  raw accel   %d\n", ao_sample_accel); +	printf ("  groundaccel %d\n", ao_ground_accel); +	printf ("  accel_2g    %d\n", ao_accel_2g); +#endif + +	printf ("  alt         %d\n", ao_sample_alt); +	printf ("  height      %d\n", ao_sample_height); +	printf ("  accel       %d.%02d\n", int_part(accel), frac_part(accel)); + + +	printf ("kalman:\n"); +	printf ("  height      %d\n", ao_height); +	printf ("  speed       %d.%02d\n", int_part(ao_speed), frac_part(ao_speed)); +	printf ("  accel       %d.%02d\n", int_part(ao_accel), frac_part(ao_accel)); +	printf ("  max_height  %d\n", ao_max_height); +	printf ("  avg_height  %d\n", ao_avg_height); +	printf ("  error_h     %d\n", ao_error_h); +	printf ("  error_avg   %d\n", ao_error_h_sq_avg); +} + +__code struct ao_cmds ao_flight_cmds[] = { +	{ ao_flight_dump, 	"F\0Dump flight status" }, +	{ 0, NULL }, +}; +#endif +  static __xdata struct ao_task	flight_task;  void  ao_flight_init(void)  {  	ao_flight_state = ao_flight_startup; +#if !HAS_RADIO +	ao_cmd_register(&ao_flight_cmds[0]); +#endif  	ao_add_task(&flight_task, ao_flight, "flight");  } | 
