diff options
| -rw-r--r-- | src/ao.h | 1 | ||||
| -rw-r--r-- | src/ao_flight.c | 8 | ||||
| -rw-r--r-- | src/ao_telemetrum.c | 10 | 
3 files changed, 17 insertions, 2 deletions
| @@ -618,6 +618,7 @@ extern __pdata int16_t			ao_ground_pres;  extern __pdata int16_t			ao_ground_accel;  extern __pdata int16_t			ao_min_pres;  extern __pdata uint16_t			ao_launch_time; +extern __xdata uint8_t			ao_flight_force_idle;  /* Flight thread */  void diff --git a/src/ao_flight.c b/src/ao_flight.c index f57573d0..e0fd97f2 100644 --- a/src/ao_flight.c +++ b/src/ao_flight.c @@ -50,6 +50,8 @@ __data uint8_t ao_flight_adc;  __pdata int16_t ao_raw_accel, ao_raw_accel_prev, ao_raw_pres;  __pdata int16_t ao_accel_2g; +__xdata uint8_t ao_flight_force_idle; +  /* Accelerometer calibration   *   * We're sampling the accelerometer through a resistor divider which @@ -221,8 +223,10 @@ ao_flight(void)  			/* Go to pad state if the nose is pointing up */  			ao_config_get(); -			if (ao_config.accel_plus_g != 0 && ao_config.accel_minus_g != 0 && -			    ao_flight_accel < ao_config.accel_plus_g + ACCEL_NOSE_UP) +			if (ao_config.accel_plus_g != 0 && +			    ao_config.accel_minus_g != 0 && +			    ao_flight_accel < ao_config.accel_plus_g + ACCEL_NOSE_UP && +			    !ao_flight_force_idle)  			{  				/* Disable the USB controller in flight mode  				 * to save power diff --git a/src/ao_telemetrum.c b/src/ao_telemetrum.c index 0de3572a..89743837 100644 --- a/src/ao_telemetrum.c +++ b/src/ao_telemetrum.c @@ -29,10 +29,20 @@ main(void)  {  	ao_clock_init(); +  	/* Turn on the red LED until the system is stable */  	ao_led_init(AO_LED_RED);  	ao_led_on(AO_LED_RED); +	/* A hack -- look at the SPI clock pin, if it's sitting at +	 *  ground, then we force the computer to idle mode instead of +	 *  flight mode +	 */ +	if (P1_3 == 0) { +		ao_flight_force_idle = 1; +		while (P1_3 == 0) +			; +	}  	ao_timer_init();  	ao_adc_init();  	ao_beep_init(); | 
