aboutsummaryrefslogtreecommitdiff
path: root/src/modules/navigator/navigator_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/navigator/navigator_main.cpp')
-rw-r--r--src/modules/navigator/navigator_main.cpp16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/modules/navigator/navigator_main.cpp b/src/modules/navigator/navigator_main.cpp
index 114776327..5139ae6cd 100644
--- a/src/modules/navigator/navigator_main.cpp
+++ b/src/modules/navigator/navigator_main.cpp
@@ -688,7 +688,8 @@ Navigator::task_main()
/* RETURN switch, overrides MISSION switch */
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)) &&
+ if (!(_rtl_state == RTL_STATE_DESCEND &&
+ (myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
_vstatus.condition_home_position_valid) {
dispatch(EVENT_RTL_REQUESTED);
}
@@ -746,7 +747,8 @@ Navigator::task_main()
break;
case NAV_STATE_RTL:
- if (!(_rtl_state == RTL_STATE_DESCEND && (myState == NAV_STATE_READY || myState == NAV_STATE_LAND)) &&
+ if (!(_rtl_state == RTL_STATE_DESCEND &&
+ (myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
_vstatus.condition_home_position_valid) {
dispatch(EVENT_RTL_REQUESTED);
}
@@ -1443,14 +1445,7 @@ Navigator::check_mission_item_reached()
}
if (_mission_item.nav_cmd == NAV_CMD_LAND) {
- if (_vstatus.is_rotary_wing) {
- return _vstatus.condition_landed;
-
- } else {
- /* For fw there is currently no landing detector:
- * make sure control is not stopped when overshooting the landing waypoint */
- return false;
- }
+ return _vstatus.condition_landed;
}
/* XXX TODO count turns */
@@ -1580,6 +1575,7 @@ Navigator::on_mission_item_reached()
dispatch(EVENT_LAND_REQUESTED);
} else {
+ _reset_loiter_pos = false;
dispatch(EVENT_LOITER_REQUESTED);
}