diff --git a/libraries/AP_Landing/AP_Landing.h b/libraries/AP_Landing/AP_Landing.h index 855bf36918..9e8b8d471a 100644 --- a/libraries/AP_Landing/AP_Landing.h +++ b/libraries/AP_Landing/AP_Landing.h @@ -25,11 +25,10 @@ /// @class AP_Landing /// @brief Class managing ArduPlane landing methods -class AP_Landing -{ -public: +class AP_Landing { friend class AP_Landing_Deepstall; +public: FUNCTOR_TYPEDEF(set_target_altitude_proportion_fn_t, void, const Location&, float); FUNCTOR_TYPEDEF(constrain_target_altitude_location_fn_t, void, const Location&, const Location&); FUNCTOR_TYPEDEF(adjusted_altitude_cm_fn_t, int32_t); @@ -37,14 +36,27 @@ public: FUNCTOR_TYPEDEF(disarm_if_autoland_complete_fn_t, void); FUNCTOR_TYPEDEF(update_flight_stage_fn_t, void); - // constructor - AP_Landing(AP_Mission &_mission, AP_AHRS &_ahrs, AP_SpdHgtControl *_SpdHgt_Controller, AP_Navigation *_nav_controller, AP_Vehicle::FixedWing &_aparm, + static AP_Landing create(AP_Mission &_mission, AP_AHRS &_ahrs, AP_SpdHgtControl *_SpdHgt_Controller, AP_Navigation *_nav_controller, AP_Vehicle::FixedWing &_aparm, set_target_altitude_proportion_fn_t _set_target_altitude_proportion_fn, constrain_target_altitude_location_fn_t _constrain_target_altitude_location_fn, adjusted_altitude_cm_fn_t _adjusted_altitude_cm_fn, adjusted_relative_altitude_cm_fn_t _adjusted_relative_altitude_cm_fn, disarm_if_autoland_complete_fn_t _disarm_if_autoland_complete_fn, - update_flight_stage_fn_t _update_flight_stage_fn); + update_flight_stage_fn_t _update_flight_stage_fn) { + return AP_Landing{_mission, _ahrs, _SpdHgt_Controller, _nav_controller, _aparm, + _set_target_altitude_proportion_fn, + _constrain_target_altitude_location_fn, + _adjusted_altitude_cm_fn, + _adjusted_relative_altitude_cm_fn, + _disarm_if_autoland_complete_fn, + _update_flight_stage_fn}; + } + + constexpr AP_Landing(AP_Landing &&other) = default; + + /* Do not allow copies */ + AP_Landing(const AP_Landing &other) = delete; + AP_Landing &operator=(const AP_Landing&) = delete; // NOTE: make sure to update is_type_valid() @@ -105,6 +117,13 @@ public: float alt_offset; private: + AP_Landing(AP_Mission &_mission, AP_AHRS &_ahrs, AP_SpdHgtControl *_SpdHgt_Controller, AP_Navigation *_nav_controller, AP_Vehicle::FixedWing &_aparm, + set_target_altitude_proportion_fn_t _set_target_altitude_proportion_fn, + constrain_target_altitude_location_fn_t _constrain_target_altitude_location_fn, + adjusted_altitude_cm_fn_t _adjusted_altitude_cm_fn, + adjusted_relative_altitude_cm_fn_t _adjusted_relative_altitude_cm_fn, + disarm_if_autoland_complete_fn_t _disarm_if_autoland_complete_fn, + update_flight_stage_fn_t _update_flight_stage_fn); struct { // denotes if a go-around has been commanded for landing