Plane: support send_extended_sys_state

This commit is contained in:
Peter Barker 2018-05-23 19:32:35 +10:00 committed by Andrew Tridgell
parent e95aedd748
commit 7c3de472b2
6 changed files with 78 additions and 0 deletions

View File

@ -1417,3 +1417,27 @@ int8_t GCS_MAVLINK_Plane::high_latency_air_temperature() const
return INT8_MIN;
}
#endif // HAL_HIGH_LATENCY2_ENABLED
MAV_VTOL_STATE GCS_MAVLINK_Plane::vtol_state() const
{
#if !HAL_QUADPLANE_ENABLED
return MAV_VTOL_STATE_UNDEFINED;
#else
if (!plane.quadplane.available()) {
return MAV_VTOL_STATE_UNDEFINED;
}
return plane.quadplane.transition->get_mav_vtol_state();
#endif
};
MAV_LANDED_STATE GCS_MAVLINK_Plane::landed_state() const
{
if (plane.is_flying()) {
// note that Q-modes almost always consider themselves as flying
return MAV_LANDED_STATE_IN_AIR;
}
return MAV_LANDED_STATE_ON_GROUND;
}

View File

@ -71,4 +71,8 @@ private:
uint8_t high_latency_wind_direction() const override;
int8_t high_latency_air_temperature() const override;
#endif // HAL_HIGH_LATENCY2_ENABLED
MAV_VTOL_STATE vtol_state() const override;
MAV_LANDED_STATE landed_state() const override;
};

View File

@ -3692,4 +3692,28 @@ bool SLT_Transition::active() const
return quadplane.assisted_flight && ((transition_state == TRANSITION_AIRSPEED_WAIT) || (transition_state == TRANSITION_TIMER));
}
MAV_VTOL_STATE SLT_Transition::get_mav_vtol_state() const
{
if (quadplane.in_vtol_mode()) {
QuadPlane::position_control_state state = quadplane.poscontrol.get_state();
if ((state == QuadPlane::position_control_state::QPOS_AIRBRAKE) || (state == QuadPlane::position_control_state::QPOS_POSITION1)) {
return MAV_VTOL_STATE_TRANSITION_TO_MC;
}
return MAV_VTOL_STATE_MC;
}
switch (transition_state) {
case TRANSITION_AIRSPEED_WAIT:
case TRANSITION_TIMER:
// we enter this state during assisted flight, not just
// during a forward transition.
return MAV_VTOL_STATE_TRANSITION_TO_FW;
case TRANSITION_DONE:
return MAV_VTOL_STATE_FW;
}
return MAV_VTOL_STATE_UNDEFINED;
}
#endif // HAL_QUADPLANE_ENABLED

View File

@ -786,5 +786,24 @@ void Tailsitter_Transition::restart()
transition_initial_pitch = constrain_float(quadplane.ahrs_view->pitch_sensor,-8500,8500);
};
MAV_VTOL_STATE Tailsitter_Transition::get_mav_vtol_state() const
{
switch (transition_state) {
case TRANSITION_ANGLE_WAIT_VTOL:
return MAV_VTOL_STATE_TRANSITION_TO_MC;
case TRANSITION_DONE:
return MAV_VTOL_STATE_FW;
case TRANSITION_ANGLE_WAIT_FW: {
if (quadplane.in_vtol_mode()) {
return MAV_VTOL_STATE_MC;
}
return MAV_VTOL_STATE_TRANSITION_TO_FW;
}
}
return MAV_VTOL_STATE_UNDEFINED;
}
#endif // HAL_QUADPLANE_ENABLED

View File

@ -148,6 +148,8 @@ public:
void set_FW_roll_pitch(int32_t& nav_pitch_cd, int32_t& nav_roll_cd, bool& allow_stick_mixing) override;
MAV_VTOL_STATE get_mav_vtol_state() const override;
private:
enum {

View File

@ -13,6 +13,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <GCS_MAVLink/GCS.h>
class QuadPlane;
class AP_MotorsMulticopter;
@ -47,6 +48,8 @@ public:
virtual bool update_yaw_target(float& yaw_target_cd) { return false; }
virtual MAV_VTOL_STATE get_mav_vtol_state() const = 0;
protected:
// refences for convenience
@ -86,6 +89,8 @@ public:
bool allow_update_throttle_mix() const override;
MAV_VTOL_STATE get_mav_vtol_state() const override;
protected:
enum {