fw_pos_control_l1 reset internal takeoff and landing state when arming

This commit is contained in:
Daniel Agar
2019-04-02 07:47:39 -04:00
committed by Lorenz Meier
parent e6f1a2db12
commit ec3bc4ee5b
2 changed files with 14 additions and 5 deletions
@@ -297,12 +297,21 @@ FixedwingPositionControl::parameters_update()
void void
FixedwingPositionControl::vehicle_control_mode_poll() FixedwingPositionControl::vehicle_control_mode_poll()
{ {
bool updated; bool updated = false;
orb_check(_control_mode_sub, &updated); orb_check(_control_mode_sub, &updated);
if (updated) { if (updated) {
orb_copy(ORB_ID(vehicle_control_mode), _control_mode_sub, &_control_mode); const bool was_armed = _control_mode.flag_armed;
if (orb_copy(ORB_ID(vehicle_control_mode), _control_mode_sub, &_control_mode) == PX4_OK) {
// reset state when arming
if (!was_armed && _control_mode.flag_armed) {
reset_takeoff_state(true);
reset_landing_state();
}
}
} }
} }
@@ -1870,10 +1879,10 @@ FixedwingPositionControl::run()
} }
void void
FixedwingPositionControl::reset_takeoff_state() FixedwingPositionControl::reset_takeoff_state(bool force)
{ {
// only reset takeoff if !armed or just landed // only reset takeoff if !armed or just landed
if (!_control_mode.flag_armed || (_was_in_air && _vehicle_land_detected.landed)) { if (!_control_mode.flag_armed || (_was_in_air && _vehicle_land_detected.landed) || force) {
_runway_takeoff.reset(); _runway_takeoff.reset();
@@ -447,7 +447,7 @@ private:
*/ */
void handle_command(); void handle_command();
void reset_takeoff_state(); void reset_takeoff_state(bool force = false);
void reset_landing_state(); void reset_landing_state();
/* /*