px4io: Guard against the RC failsafe value of channel 5 causing a manual override action if set to manual in failsafe

This commit is contained in:
Lorenz Meier
2014-04-05 11:10:41 +02:00
parent 09d1064327
commit 3e4841b6fe
+13 -11
View File
@@ -310,6 +310,11 @@ controls_tick() {
* Handle losing RC input * Handle losing RC input
*/ */
/* if we are in failsafe, clear the override flag */
if (r_raw_rc_flags & PX4IO_P_RAW_RC_FLAGS_FAILSAFE) {
r_status_flags &= ~(PX4IO_P_STATUS_FLAGS_OVERRIDE);
}
/* this kicks in if the receiver is gone, but there is not on failsafe (indicated by separate flag) */ /* this kicks in if the receiver is gone, but there is not on failsafe (indicated by separate flag) */
if (rc_input_lost) { if (rc_input_lost) {
/* Clear the RC input status flag, clear manual override flag */ /* Clear the RC input status flag, clear manual override flag */
@@ -320,27 +325,24 @@ controls_tick() {
/* Mark all channels as invalid, as we just lost the RX */ /* Mark all channels as invalid, as we just lost the RX */
r_rc_valid = 0; r_rc_valid = 0;
/* Set the RC_LOST alarm */
r_status_alarms |= PX4IO_P_STATUS_ALARMS_RC_LOST;
}
/* this kicks in if the receiver is completely gone */
if (rc_input_lost) {
/* Set channel count to zero */ /* Set channel count to zero */
r_raw_rc_count = 0; r_raw_rc_count = 0;
/* Set the RC_LOST alarm */
r_status_alarms |= PX4IO_P_STATUS_ALARMS_RC_LOST;
} }
/* /*
* Check for manual override. * Check for manual override.
* *
* The PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK flag must be set, and we * The PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK flag must be set, and we
* must have R/C input. * must have R/C input (NO FAILSAFE!).
* Override is enabled if either the hardcoded channel / value combination * Override is enabled if either the hardcoded channel / value combination
* is selected, or the AP has requested it. * is selected, or the AP has requested it.
*/ */
if ((r_setup_arming & PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK) && if ((r_setup_arming & PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK) &&
(r_status_flags & PX4IO_P_STATUS_FLAGS_RC_OK)) { (r_status_flags & PX4IO_P_STATUS_FLAGS_RC_OK) &&
!(r_raw_rc_flags & PX4IO_P_RAW_RC_FLAGS_FAILSAFE)) {
bool override = false; bool override = false;
@@ -363,10 +365,10 @@ controls_tick() {
mixer_tick(); mixer_tick();
} else { } else {
r_status_flags &= ~PX4IO_P_STATUS_FLAGS_OVERRIDE; r_status_flags &= ~(PX4IO_P_STATUS_FLAGS_OVERRIDE);
} }
} else { } else {
r_status_flags &= ~PX4IO_P_STATUS_FLAGS_OVERRIDE; r_status_flags &= ~(PX4IO_P_STATUS_FLAGS_OVERRIDE);
} }
} }