using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ArdupilotMega
{
    partial class MAVLink
    {	
		public 		enum MAV_CLASS
		{
		    MAV_CLASS_GENERIC = 0,        ///< Generic autopilot, full support for everything
		    MAV_CLASS_PIXHAWK = 1,        ///< PIXHAWK autopilot, http://pixhawk.ethz.ch
		    MAV_CLASS_SLUGS = 2,          ///< SLUGS autopilot, http://slugsuav.soe.ucsc.edu
		    MAV_CLASS_ARDUPILOTMEGA = 3,  ///< ArduPilotMega / ArduCopter, http://diydrones.com
			MAV_CLASS_OPENPILOT = 4,      ///< OpenPilot, http://openpilot.org
			MAV_CLASS_GENERIC_MISSION_WAYPOINTS_ONLY = 5,  ///< Generic autopilot only supporting simple waypoints
			MAV_CLASS_GENERIC_MISSION_NAVIGATION_ONLY = 6, ///< Generic autopilot supporting waypoints and other simple navigation commands
			MAV_CLASS_GENERIC_MISSION_FULL = 7,            ///< Generic autopilot supporting the full mission command set
			MAV_CLASS_NONE = 8,           ///< No valid autopilot
			MAV_CLASS_NB                  ///< Number of autopilot classes
		};

		public 		enum MAV_ACTION
		{
		    MAV_ACTION_HOLD = 0,
		    MAV_ACTION_MOTORS_START = 1,
		    MAV_ACTION_LAUNCH = 2,
		    MAV_ACTION_RETURN = 3,
		    MAV_ACTION_EMCY_LAND = 4,
		    MAV_ACTION_EMCY_KILL = 5,
		    MAV_ACTION_CONFIRM_KILL = 6,
		    MAV_ACTION_CONTINUE = 7,
		    MAV_ACTION_MOTORS_STOP = 8,
		    MAV_ACTION_HALT = 9,
		    MAV_ACTION_SHUTDOWN = 10,
		    MAV_ACTION_REBOOT = 11,
		    MAV_ACTION_SET_MANUAL = 12,
		    MAV_ACTION_SET_AUTO = 13,
		    MAV_ACTION_STORAGE_READ = 14,
		    MAV_ACTION_STORAGE_WRITE = 15,
		    MAV_ACTION_CALIBRATE_RC = 16,
		    MAV_ACTION_CALIBRATE_GYRO = 17,
		    MAV_ACTION_CALIBRATE_MAG = 18,
		    MAV_ACTION_CALIBRATE_ACC = 19,
		    MAV_ACTION_CALIBRATE_PRESSURE = 20,
		    MAV_ACTION_REC_START = 21,
		    MAV_ACTION_REC_PAUSE = 22,
		    MAV_ACTION_REC_STOP = 23,
		    MAV_ACTION_TAKEOFF = 24,
		    MAV_ACTION_NAVIGATE = 25,
		    MAV_ACTION_LAND = 26,
		    MAV_ACTION_LOITER = 27,
		    MAV_ACTION_SET_ORIGIN = 28,
		    MAV_ACTION_RELAY_ON = 29,
		    MAV_ACTION_RELAY_OFF = 30,
		    MAV_ACTION_GET_IMAGE = 31,
		    MAV_ACTION_VIDEO_START = 32,
		    MAV_ACTION_VIDEO_STOP = 33,
		    MAV_ACTION_RESET_MAP = 34,
		    MAV_ACTION_RESET_PLAN = 35,
		    MAV_ACTION_DELAY_BEFORE_COMMAND = 36,
		    MAV_ACTION_ASCEND_AT_RATE = 37,
		    MAV_ACTION_CHANGE_MODE = 38,
		    MAV_ACTION_LOITER_MAX_TURNS = 39,
		    MAV_ACTION_LOITER_MAX_TIME = 40,
				MAV_ACTION_START_HILSIM = 41,
				MAV_ACTION_STOP_HILSIM = 42,    
		    MAV_ACTION_NB        ///< Number of MAV actions
		};

		public 		enum MAV_MODE
		{
		    MAV_MODE_UNINIT = 0,     ///< System is in undefined state
		    MAV_MODE_LOCKED = 1,     ///< Motors are blocked, system is safe
		    MAV_MODE_MANUAL = 2,     ///< System is allowed to be active, under manual (RC) control
		    MAV_MODE_GUIDED = 3,     ///< System is allowed to be active, under autonomous control, manual setpoint
		    MAV_MODE_AUTO =   4,     ///< System is allowed to be active, under autonomous control and navigation
		    MAV_MODE_TEST1 =  5,     ///< Generic test mode, for custom use
		    MAV_MODE_TEST2 =  6,     ///< Generic test mode, for custom use
		    MAV_MODE_TEST3 =  7,     ///< Generic test mode, for custom use
		    MAV_MODE_READY =  8,     ///< System is ready, motors are unblocked, but controllers are inactive
		    MAV_MODE_RC_TRAINING = 9 ///< System is blocked, only RC valued are read and reported back
		};

		public 		enum MAV_STATE
		{
		    MAV_STATE_UNINIT = 0,
		    MAV_STATE_BOOT,
		    MAV_STATE_CALIBRATING,
		    MAV_STATE_STANDBY,
		    MAV_STATE_ACTIVE,
		    MAV_STATE_CRITICAL,
		    MAV_STATE_EMERGENCY,
		    MAV_STATE_HILSIM,
		    MAV_STATE_POWEROFF
		};

		public 		enum MAV_NAV
		{
		    MAV_NAV_GROUNDED = 0,
		    MAV_NAV_LIFTOFF,
		    MAV_NAV_HOLD,
		    MAV_NAV_WAYPOINT,
		    MAV_NAV_VECTOR,
		    MAV_NAV_RETURNING,
		    MAV_NAV_LANDING,
		    MAV_NAV_LOST,
		    MAV_NAV_LOITER,
			MAV_NAV_FREE_DRIFT
		};

		public 		enum MAV_TYPE
		{
		    MAV_GENERIC = 0,
		    MAV_FIXED_WING = 1,
		    MAV_QUADROTOR = 2,
		    MAV_COAXIAL = 3,
		    MAV_HELICOPTER = 4,
		    MAV_GROUND = 5,
		    OCU = 6,
			MAV_AIRSHIP = 7,
			MAV_FREE_BALLOON = 8,
			MAV_ROCKET = 9,
			UGV_GROUND_ROVER = 10,
			UGV_SURFACE_SHIP = 11
		};

		public 		enum MAV_AUTOPILOT_TYPE
		{
		    MAV_AUTOPILOT_GENERIC = 0,
		    MAV_AUTOPILOT_PIXHAWK = 1,
		    MAV_AUTOPILOT_SLUGS = 2,
		    MAV_AUTOPILOT_ARDUPILOTMEGA = 3,
			MAV_AUTOPILOT_NONE = 4
		};

		public 		enum MAV_COMPONENT
		{
		    MAV_COMP_ID_GPS,
		    MAV_COMP_ID_WAYPOINTPLANNER,
		    MAV_COMP_ID_BLOBTRACKER,
		    MAV_COMP_ID_PATHPLANNER,
		    MAV_COMP_ID_AIRSLAM,
		    MAV_COMP_ID_MAPPER,
		    MAV_COMP_ID_CAMERA,
		    MAV_COMP_ID_IMU = 200,
			MAV_COMP_ID_IMU_2 = 201,
			MAV_COMP_ID_IMU_3 = 202,
		    MAV_COMP_ID_UDP_BRIDGE = 240,
		    MAV_COMP_ID_UART_BRIDGE = 241,
		    MAV_COMP_ID_SYSTEM_CONTROL = 250
		};

		public 		enum MAV_FRAME
		{
		    MAV_FRAME_GLOBAL = 0,
		    MAV_FRAME_LOCAL = 1,
		    MAV_FRAME_MISSION = 2,
			MAV_FRAME_GLOBAL_RELATIVE_ALT = 3,
		        MAV_FRAME_LOCAL_ENU = 4
		};
	}
}

