diff options
author | Anton Babushkin <anton.babushkin@me.com> | 2014-01-26 11:58:50 +0100 |
---|---|---|
committer | Anton Babushkin <anton.babushkin@me.com> | 2014-01-26 11:58:50 +0100 |
commit | b7c69262a7e4d51fb7806ab40a4dbb2b0ea4f75b (patch) | |
tree | e889ca3435df782922f40f170ad55fec1db7003e /src | |
parent | 7d2efe9367787cdfc4590f335f600f3b79b2cbc7 (diff) | |
download | px4-firmware-b7c69262a7e4d51fb7806ab40a4dbb2b0ea4f75b.tar.gz px4-firmware-b7c69262a7e4d51fb7806ab40a4dbb2b0ea4f75b.tar.bz2 px4-firmware-b7c69262a7e4d51fb7806ab40a4dbb2b0ea4f75b.zip |
state_machine_helper: added missed transition to FAILSAFE_STATE_LAND, transition conditions fixed
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/commander/state_machine_helper.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/modules/commander/state_machine_helper.cpp b/src/modules/commander/state_machine_helper.cpp index 1be0a16b8..c7256583a 100644 --- a/src/modules/commander/state_machine_helper.cpp +++ b/src/modules/commander/state_machine_helper.cpp @@ -377,17 +377,28 @@ transition_result_t failsafe_state_transition(struct vehicle_status_s *status, f } else { switch (new_failsafe_state) { case FAILSAFE_STATE_NORMAL: + /* always allowed (except from TERMINATION state) */ ret = TRANSITION_CHANGED; break; case FAILSAFE_STATE_RTL: - if (status->condition_global_position_valid) { + /* global position and home position required for RTL */ + if (status->condition_global_position_valid && status->condition_home_position_valid) { + ret = TRANSITION_CHANGED; + } + + break; + + case FAILSAFE_STATE_LAND: + /* at least relative altitude estimate required for landing */ + if (status->condition_local_altitude_valid || status->condition_global_position_valid) { ret = TRANSITION_CHANGED; } break; case FAILSAFE_STATE_TERMINATION: + /* always allowed */ ret = TRANSITION_CHANGED; break; |