mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-07 02:31:35 +08:00
state_machine_helper: (Critical) Prevent datalink failsafe triggering if not enabled.
Signed-off-by: Claudio Micheli <claudio@auterion.com>
This commit is contained in:
committed by
Beat Küng
parent
788e28fbb1
commit
13f3ee4c82
@@ -836,15 +836,18 @@ void set_link_loss_nav_state(vehicle_status_s *status, actuator_armed_s *armed,
|
|||||||
// do the best you can according to the action set
|
// do the best you can according to the action set
|
||||||
|
|
||||||
switch (link_loss_act) {
|
switch (link_loss_act) {
|
||||||
case (link_loss_actions_t::DISABLED):
|
case link_loss_actions_t::DISABLED:
|
||||||
case (link_loss_actions_t::AUTO_RECOVER):
|
// If datalink loss failsafe is disabled then no action must be taken.
|
||||||
|
break;
|
||||||
|
|
||||||
|
case link_loss_actions_t::AUTO_RECOVER:
|
||||||
if (status_flags.condition_global_position_valid && status_flags.condition_home_position_valid) {
|
if (status_flags.condition_global_position_valid && status_flags.condition_home_position_valid) {
|
||||||
status->nav_state = auto_recovery_nav_state;
|
status->nav_state = auto_recovery_nav_state;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FALLTHROUGH
|
// FALLTHROUGH
|
||||||
case (link_loss_actions_t::AUTO_RTL):
|
case link_loss_actions_t::AUTO_RTL:
|
||||||
if (status_flags.condition_global_position_valid && status_flags.condition_home_position_valid) {
|
if (status_flags.condition_global_position_valid && status_flags.condition_home_position_valid) {
|
||||||
main_state_transition(*status, commander_state_s::MAIN_STATE_AUTO_RTL, status_flags, internal_state);
|
main_state_transition(*status, commander_state_s::MAIN_STATE_AUTO_RTL, status_flags, internal_state);
|
||||||
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_RTL;
|
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_RTL;
|
||||||
@@ -852,14 +855,14 @@ void set_link_loss_nav_state(vehicle_status_s *status, actuator_armed_s *armed,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FALLTHROUGH
|
// FALLTHROUGH
|
||||||
case (link_loss_actions_t::AUTO_LOITER):
|
case link_loss_actions_t::AUTO_LOITER:
|
||||||
if (status_flags.condition_global_position_valid) {
|
if (status_flags.condition_global_position_valid) {
|
||||||
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER;
|
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FALLTHROUGH
|
// FALLTHROUGH
|
||||||
case (link_loss_actions_t::AUTO_LAND):
|
case link_loss_actions_t::AUTO_LAND:
|
||||||
if (status_flags.condition_global_position_valid) {
|
if (status_flags.condition_global_position_valid) {
|
||||||
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_LAND;
|
status->nav_state = vehicle_status_s::NAVIGATION_STATE_AUTO_LAND;
|
||||||
return;
|
return;
|
||||||
@@ -883,12 +886,12 @@ void set_link_loss_nav_state(vehicle_status_s *status, actuator_armed_s *armed,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FALLTHROUGH
|
// FALLTHROUGH
|
||||||
case (link_loss_actions_t::TERMINATE):
|
case link_loss_actions_t::TERMINATE:
|
||||||
status->nav_state = vehicle_status_s::NAVIGATION_STATE_TERMINATION;
|
status->nav_state = vehicle_status_s::NAVIGATION_STATE_TERMINATION;
|
||||||
armed->force_failsafe = true;
|
armed->force_failsafe = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (link_loss_actions_t::LOCKDOWN):
|
case link_loss_actions_t::LOCKDOWN:
|
||||||
armed->lockdown = true;
|
armed->lockdown = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user