aboutsummaryrefslogtreecommitdiff
path: root/apps/px4io/registers.c
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-02-17 16:06:33 +0100
committerLorenz Meier <lm@inf.ethz.ch>2013-02-17 16:06:33 +0100
commit038037d67656b92947a976cf647dfd4f748ec3ad (patch)
tree900693c8b454fd85d3beeceaa1f716c675b5f66f /apps/px4io/registers.c
parent6bd18e46bb3b250213bb64d9b0da2e71ddc912ab (diff)
downloadpx4-firmware-038037d67656b92947a976cf647dfd4f748ec3ad.tar.gz
px4-firmware-038037d67656b92947a976cf647dfd4f748ec3ad.tar.bz2
px4-firmware-038037d67656b92947a976cf647dfd4f748ec3ad.zip
Allow to in-air restore the FMU and IO arming state if only one of the two fails
Diffstat (limited to 'apps/px4io/registers.c')
-rw-r--r--apps/px4io/registers.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/apps/px4io/registers.c b/apps/px4io/registers.c
index 014608416..be3bebada 100644
--- a/apps/px4io/registers.c
+++ b/apps/px4io/registers.c
@@ -290,11 +290,20 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
case PX4IO_P_SETUP_ARMING:
value &= PX4IO_P_SETUP_ARMING_VALID;
- r_setup_arming = value;
- /* update arming state - disarm if no longer OK */
- if ((r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED) && !(value & PX4IO_P_SETUP_ARMING_ARM_OK))
+ /*
+ * Update arming state - disarm if no longer OK.
+ * This builds on the requirement that the FMU driver
+ * asks about the FMU arming state on initialization,
+ * so that an in-air reset of FMU can not lead to a
+ * lockup of the IO arming state.
+ */
+ if ((r_setup_arming & PX4IO_P_SETUP_ARMING_ARM_OK) && !(value & PX4IO_P_SETUP_ARMING_ARM_OK)) {
r_status_flags &= ~PX4IO_P_STATUS_FLAGS_ARMED;
+ }
+
+ r_setup_arming = value;
+
break;
case PX4IO_P_SETUP_PWM_RATES: