File tree 2 files changed +12
-1
lines changed
libraries/AP_AdvancedFailsafe
2 files changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -253,7 +253,16 @@ AP_AdvancedFailsafe::check(uint32_t last_valid_rc_ms)
253
253
_state = STATE_DATA_LINK_LOSS;
254
254
if (_wp_comms_hold) {
255
255
_saved_wp = mission.get_current_nav_cmd ().index ;
256
- mission.set_current_cmd (_wp_comms_hold);
256
+
257
+ // option to not go back to the loss comm mission item if we are already in return path or passed loss comm mission item
258
+ if ((mission.state () == AP_Mission::MISSION_RUNNING) &&
259
+ ((option_is_set (Option::CONTINUE_IF_ALREADY_IN_RETURN_PATH) && mission.get_in_return_path_flag ()) ||
260
+ (option_is_set (Option::CONTINUE_IF_PASSED_LOSS_COMM_WP) && (mission.get_current_nav_cmd ().index > _wp_comms_hold)))){
261
+
262
+ }else {// nominal case, set mission item to _wp_comms_hold
263
+ mission.set_current_cmd (_wp_comms_hold);
264
+ }
265
+
257
266
if (mode == AFS_AUTO && option_is_set (Option::GCS_FS_ALL_AUTONOMOUS_MODES)) {
258
267
set_mode_auto ();
259
268
}
Original file line number Diff line number Diff line change @@ -171,6 +171,8 @@ class AP_AdvancedFailsafe
171
171
enum class Option {
172
172
CONTINUE_AFTER_RECOVERED = (1U <<0 ),
173
173
GCS_FS_ALL_AUTONOMOUS_MODES = (1U <<1 ),
174
+ CONTINUE_IF_ALREADY_IN_RETURN_PATH = (1U <<2 ),
175
+ CONTINUE_IF_PASSED_LOSS_COMM_WP = (1U <<3 ),
174
176
};
175
177
bool option_is_set (Option option) const {
176
178
return (options.get () & int16_t (option)) != 0 ;
You can’t perform that action at this time.
0 commit comments