summaryrefslogtreecommitdiff
path: root/src/core/ao_flight.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-12-18 20:32:05 -0800
committerKeith Packard <keithp@keithp.com>2013-12-18 20:32:05 -0800
commitee4279613b4757453d0d8f8afc06037c61eeb520 (patch)
tree5aa198d54fa3c735f147aeb327738ee4c6a9b21f /src/core/ao_flight.c
parent1bf84ec28a41f7bd1b11ba45b4639856266227bc (diff)
altos: Try IMU self-test 10 times before giving up
This should keep the device from failing to boot unless the IMU is actually broken. Oh, and if self test does fail, this places the flight computer in 'Invalid' state rather than panic. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core/ao_flight.c')
-rw-r--r--src/core/ao_flight.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/ao_flight.c b/src/core/ao_flight.c
index 4a53bdc6..463ff4a2 100644
--- a/src/core/ao_flight.c
+++ b/src/core/ao_flight.c
@@ -46,6 +46,11 @@ __pdata enum ao_flight_state ao_flight_state; /* current flight state */
__pdata uint16_t ao_boost_tick; /* time of launch detect */
__pdata uint16_t ao_motor_number; /* number of motors burned so far */
+#if HAS_IMU
+/* Any sensor can set this to mark the flight computer as 'broken' */
+__xdata uint8_t ao_sensor_errors;
+#endif
+
/*
* track min/max data over a long interval to detect
* resting
@@ -99,6 +104,9 @@ ao_flight(void)
ao_config.accel_minus_g == 0 ||
ao_ground_accel < ao_config.accel_plus_g - ACCEL_NOSE_UP ||
ao_ground_accel > ao_config.accel_minus_g + ACCEL_NOSE_UP ||
+#if HAS_IMU
+ ao_sensor_errors ||
+#endif
ao_ground_height < -1000 ||
ao_ground_height > 7000)
{