summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ao.h1
-rw-r--r--src/ao_flight.c8
-rw-r--r--src/ao_telemetrum.c10
3 files changed, 17 insertions, 2 deletions
diff --git a/src/ao.h b/src/ao.h
index 1f27fe92..2c6eb2b9 100644
--- a/src/ao.h
+++ b/src/ao.h
@@ -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();