Skip to content
Snippets Groups Projects
Commit 13f3ee4c authored by Claudio Micheli's avatar Claudio Micheli Committed by Beat Küng
Browse files

state_machine_helper: (Critical) Prevent datalink failsafe triggering if not enabled.

parent 788e28fb
No related branches found
No related tags found
No related merge requests found
...@@ -836,15 +836,18 @@ void set_link_loss_nav_state(vehicle_status_s *status, actuator_armed_s *armed, ...@@ -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, ...@@ -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, ...@@ -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;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment