Esempio n. 1
0
void
GpsFailure::advance_gpsf()
{
	updateParams();

	switch (_gpsf_state) {
	case GPSF_STATE_NONE:
		_gpsf_state = GPSF_STATE_LOITER;
		warnx("gpsf loiter");
		mavlink_log_critical(_navigator->get_mavlink_log_pub(), "GPS failed: open loop loiter");
		break;

	case GPSF_STATE_LOITER:
		_gpsf_state = GPSF_STATE_TERMINATE;
		warnx("gpsf terminate");
		mavlink_log_emergency(_navigator->get_mavlink_log_pub(), "no gps recovery, termination");
		warnx("mavlink sent");
		break;

	case GPSF_STATE_TERMINATE:
		warnx("gpsf end");
		_gpsf_state = GPSF_STATE_END;

	default:
		break;
	}
}
Esempio n. 2
0
void
EngineFailure::advance_ef()
{
	switch (_ef_state) {
	case EF_STATE_NONE:
		mavlink_log_emergency(_navigator->get_mavlink_log_pub(), "Engine failure. Loitering down");
		_ef_state = EF_STATE_LOITERDOWN;
		break;
	default:
		break;
	}
}
Esempio n. 3
0
void battery_failsafe(orb_advert_t *mavlink_log_pub, const vehicle_status_s &status,
		      const vehicle_status_flags_s &status_flags, commander_state_s *internal_state, const uint8_t battery_warning,
		      const low_battery_action_t low_battery_action)
{
	switch (battery_warning) {
	case battery_status_s::BATTERY_WARNING_NONE:
		break;

	case battery_status_s::BATTERY_WARNING_LOW:
		mavlink_log_critical(mavlink_log_pub, "LOW BATTERY, RETURN ADVISED");
		break;

	case battery_status_s::BATTERY_WARNING_CRITICAL:

		static constexpr char battery_critical[] = "CRITICAL BATTERY";

		switch (low_battery_action) {
		case LOW_BAT_ACTION::WARNING:
			mavlink_log_critical(mavlink_log_pub, "%s, RETURN ADVISED!", battery_critical);
			break;

		case LOW_BAT_ACTION::RETURN:

		// FALLTHROUGH
		case LOW_BAT_ACTION::RETURN_OR_LAND:

			// let us send the critical message even if already in RTL
			if (TRANSITION_DENIED != main_state_transition(status, commander_state_s::MAIN_STATE_AUTO_RTL, status_flags,
					internal_state)) {
				mavlink_log_critical(mavlink_log_pub, "%s, RETURNING", battery_critical);

			} else {
				mavlink_log_emergency(mavlink_log_pub, "%s, RETURN FAILED", battery_critical);
			}

			break;

		case LOW_BAT_ACTION::LAND:
			if (TRANSITION_DENIED != main_state_transition(status, commander_state_s::MAIN_STATE_AUTO_LAND, status_flags,
					internal_state)) {
				mavlink_log_critical(mavlink_log_pub, "%s, LANDING AT CURRENT POSITION", battery_critical);

			} else {
				mavlink_log_emergency(mavlink_log_pub, "%s, LANDING FAILED", battery_critical);
			}

			break;
		}

		break;

	case battery_status_s::BATTERY_WARNING_EMERGENCY:

		static constexpr char battery_dangerous[] = "DANGEROUS BATTERY LEVEL";

		switch (low_battery_action) {
		case LOW_BAT_ACTION::WARNING:
			mavlink_log_emergency(mavlink_log_pub, "%s, LANDING ADVISED!", battery_dangerous);
			break;

		case LOW_BAT_ACTION::RETURN:
			if (TRANSITION_DENIED != main_state_transition(status, commander_state_s::MAIN_STATE_AUTO_RTL, status_flags,
					internal_state)) {
				mavlink_log_emergency(mavlink_log_pub, "%s, RETURNING", battery_dangerous);

			} else {
				mavlink_log_emergency(mavlink_log_pub, "%s, RETURN FAILED", battery_dangerous);
			}

			break;

		case LOW_BAT_ACTION::RETURN_OR_LAND:

		// FALLTHROUGH
		case LOW_BAT_ACTION::LAND:
			if (TRANSITION_DENIED != main_state_transition(status, commander_state_s::MAIN_STATE_AUTO_LAND, status_flags,
					internal_state)) {
				mavlink_log_emergency(mavlink_log_pub, "%s, LANDING IMMEDIATELY", battery_dangerous);

			} else {
				mavlink_log_emergency(mavlink_log_pub, "%s, LANDING FAILED", battery_dangerous);
			}

			break;
		}

		break;

	case battery_status_s::BATTERY_WARNING_FAILED:
		mavlink_log_emergency(mavlink_log_pub, "BATTERY FAILED");
		break;
	}
}