diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2013-02-17 16:06:33 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2013-02-17 16:06:33 +0100 |
commit | 038037d67656b92947a976cf647dfd4f748ec3ad (patch) | |
tree | 900693c8b454fd85d3beeceaa1f716c675b5f66f /apps/px4io/registers.c | |
parent | 6bd18e46bb3b250213bb64d9b0da2e71ddc912ab (diff) | |
download | px4-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.c | 15 |
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: |