aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjulianoes <julian@oes.ch>2014-03-02 21:22:16 +0100
committerjulianoes <julian@oes.ch>2014-03-02 21:22:16 +0100
commit85247e3fddd7bc7cd3cd9eace3f41dc7368edf69 (patch)
treec66f5c86fc51452d0535dbdada6c848f4267a48d /src
parenteee8ee9e0f20fd9171efce26d4ff273cb7598541 (diff)
parenteac00a71ea8f0b10d446be752f6fef737f850956 (diff)
downloadpx4-firmware-85247e3fddd7bc7cd3cd9eace3f41dc7368edf69.tar.gz
px4-firmware-85247e3fddd7bc7cd3cd9eace3f41dc7368edf69.tar.bz2
px4-firmware-85247e3fddd7bc7cd3cd9eace3f41dc7368edf69.zip
Merge pull request #680 from PX4/ready_rtl_fix
navigator: forbid READY -> RTL transition
Diffstat (limited to 'src')
-rw-r--r--src/modules/navigator/navigator_main.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/modules/navigator/navigator_main.cpp b/src/modules/navigator/navigator_main.cpp
index c572972b5..8d0710e91 100644
--- a/src/modules/navigator/navigator_main.cpp
+++ b/src/modules/navigator/navigator_main.cpp
@@ -695,7 +695,7 @@ Navigator::task_main()
if (_vstatus.return_switch == RETURN_SWITCH_RETURN) {
/* switch to RTL if not already landed after RTL and home position set */
if (!(_rtl_state == RTL_STATE_DESCEND &&
- (myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
+ (myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
_vstatus.condition_home_position_valid) {
dispatch(EVENT_RTL_REQUESTED);
}
@@ -741,7 +741,7 @@ Navigator::task_main()
case NAV_STATE_RTL:
if (!(_rtl_state == RTL_STATE_DESCEND &&
- (myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
+ (myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
_vstatus.condition_home_position_valid) {
dispatch(EVENT_RTL_REQUESTED);
}
@@ -749,9 +749,7 @@ Navigator::task_main()
break;
case NAV_STATE_LAND:
- if (myState != NAV_STATE_READY) {
- dispatch(EVENT_LAND_REQUESTED);
- }
+ dispatch(EVENT_LAND_REQUESTED);
break;
@@ -955,7 +953,7 @@ StateTable::Tran const Navigator::myTable[NAV_STATE_MAX][MAX_EVENT] = {
/* EVENT_READY_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
/* EVENT_LOITER_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
/* EVENT_MISSION_REQUESTED */ {ACTION(&Navigator::start_mission), NAV_STATE_MISSION},
- /* EVENT_RTL_REQUESTED */ {ACTION(&Navigator::start_rtl), NAV_STATE_RTL},
+ /* EVENT_RTL_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
/* EVENT_LAND_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
/* EVENT_MISSION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
/* EVENT_HOME_POSITION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
@@ -1388,7 +1386,8 @@ Navigator::set_rtl_item()
void
Navigator::request_loiter_or_ready()
{
- if (_vstatus.condition_landed) {
+ /* XXX workaround: no landing detector for fixedwing yet */
+ if (_vstatus.condition_landed && _vstatus.is_rotary_wing) {
dispatch(EVENT_READY_REQUESTED);
} else {