Protobuf enumerations
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package ugcs.vsm.proto;
option java_package = "com.ugcs.ucs.vsm.proto";
option java_outer_classname = "VsmDefinitionsProto";
enum Peer_type {
    PEER_TYPE_SERVER = 0;
    PEER_TYPE_VSM = 1;
    PEER_TYPE_VSM_ANDROID = 2;
    PEER_TYPE_VSM_IOS = 3;
}
// Response code sent by VSM to UCS
enum Status_code {
    STATUS_OK = 0;
    // Generic error
    STATUS_FAILED = 1;
    // Command is not supported
    STATUS_INVALID_COMMAND = 2;
    // Command parameters are invalid
    // Cannot use STATUS_INVALID_PARAMETER because it clashes with define in winnt.h
    STATUS_INVALID_PARAM = 3;
    // Invalid session id
    STATUS_INVALID_SESSION_ID = 4;
    // Used to notify peer that command is in progress.
    STATUS_IN_PROGRESS = 5;
    // Command require altimeter, but no alive altimeter detected
    STATUS_ALTIMETER_REQUIRED = 6;
    // Cannot register another device due to license constraint
    STATUS_LICENSE_CONSTRAINT = 7;
}
// Response code sent by VSM to UCS
enum Severity_code {
    // Info
    SEVERITY_INF = 0;
    // Warning
    SEVERITY_WARN = 1;
    // Error
    SEVERITY_ERR = 2;
}
// Used in property "vehicle_type" for Device of type DEVICE_TYPE_VEHICLE
enum Vehicle_type {
    VEHICLE_TYPE_GROUND = 0;
    VEHICLE_TYPE_FIXED_WING = 1;
    VEHICLE_TYPE_MULTICOPTER = 2;
    VEHICLE_TYPE_HELICOPTER = 3;
    VEHICLE_TYPE_VTOL = 4;          // Vehicle is capable of both fixed wing and multicopter style of flight.
}
enum Meta_value {
    META_VALUE_NA = 0;
}
// Built in subsystem types natively supported by UgCS. Used in Register_subsystem.type field.
// Each subsystem can register a arbitrary set of properties, commands and telemetry.
// Each subsystem has a set of properties, commands and telemetry fields which are supported natively by UgCS.
// Refer to UCS-VSM protocol documentation.
enum Subsystem_type {
    SUBSYSTEM_TYPE_USER = 0;    // Can be used for any other subsystem not mentioned below.
    SUBSYSTEM_TYPE_FLIGHT_CONTROLLER = 1;
    SUBSYSTEM_TYPE_GIMBAL = 2;
    SUBSYSTEM_TYPE_CAMERA = 3;
    SUBSYSTEM_TYPE_ADSB_TRANSPONDER = 4;
    SUBSYSTEM_TYPE_WINCH = 5;   // Airmast winch
    SUBSYSTEM_TYPE_HANGAR = 6;
    SUBSYSTEM_TYPE_GPR = 7; //  Ground penetrating radar
    SUBSYSTEM_TYPE_ADSB_RECEIVER = 8;    // Onboard adsb receiver for vehicle
    SUBSYSTEM_TYPE_ADSB_VEHICLE = 9;    // Used to report telemetry for devices of type DEVICE_TYPE_ADSB_VEHICLE
    SUBSYSTEM_TYPE_WEATHER_STATION = 10;
    SUBSYSTEM_TYPE_VSM = 11;
}
// Built in device types natively supported by UgCS. Used in Register_device.type field.
// Each device can register a arbitrary sets of properties and subsystems.
// Some device types have properties which are supported natively by UgCS. Some of them are required.
// Refer to UCS-VSM protocol documentation.
enum Device_type {
    // Real vehicle which can be controlled by UgCS
    DEVICE_TYPE_VEHICLE = 0;
    // Device capable of executing vehicle specific commands but does not represent real vehicle.
    // Used to provide vehicle specific functionality without an actual vehicle.
    // The native route file is returned via Device_response.status field.
    DEVICE_TYPE_VEHICLE_COMMAND_PROCESSOR = 1;
    // Adsb receiver connected directly to VSM
    DEVICE_TYPE_ADSB_RECEIVER = 2;
    // Vehicle reported by ADSB receiver with its own telemetry
    DEVICE_TYPE_ADSB_VEHICLE = 3;
    // Device capable of sending RTK
    DEVICE_TYPE_RTK_BASE_STATION = 4;
}
// Built in telemetry enums
enum Gps_fix_type {
    GPS_FIX_TYPE_NONE = 0;
    GPS_FIX_TYPE_2D = 1;
    GPS_FIX_TYPE_3D = 2;
    GPS_FIX_TYPE_DIFF = 3;
    GPS_FIX_TYPE_RTK_FIXED = 4;
    GPS_FIX_TYPE_RTK_FLOAT = 5;
}
enum Control_mode {
    CONTROL_MODE_MANUAL = 0;
    CONTROL_MODE_AUTO = 1;
    CONTROL_MODE_CLICK_GO = 2;
    CONTROL_MODE_JOYSTICK = 3;
    CONTROL_MODE_ACTIVE_TRACK = 4;
}
enum Flight_mode {
    FLIGHT_MODE_WAYPOINTS = 0;  // Vehicle is navigating mission waypoints
    FLIGHT_MODE_RTH = 1;        // Vehicle is returning home
    FLIGHT_MODE_LAND = 2;       // Vehicle is landing
    FLIGHT_MODE_TAKEOFF = 3;    // Vehicle is taking off
    FLIGHT_MODE_HOLD = 4;       // Vehicle is holding position.
}
enum Autopilot_status {
    AUTOPILOT_STATUS_STANDBY = 0;   // Vehicle is standby, grounded
    AUTOPILOT_STATUS_ACTIVE = 1;    // Vehicle is active, airborne
    AUTOPILOT_STATUS_CRITICAL = 2;  // Vehicle is in critical state, failsafe is on
    AUTOPILOT_STATUS_EMERGENCY = 3; // Vehicle is in emergency or crashed
}
enum Dock_part_status {
    DOCK_PART_OPENED = 0;
    DOCK_PART_CLOSED = 1;
    DOCK_PART_OPENING = 2;
    DOCK_PART_CLOSING = 3;
}
// These types match the Type Code/Emitter Category byte of ADSB message.
// Do not modify the values!
enum Adsb_emitter_type {
    // Category A subtypes
    ADSB_EMITTER_TYPE_NO_INFO_A = 0;
    ADSB_EMITTER_TYPE_LIGHT = 1;
    ADSB_EMITTER_TYPE_SMALL = 2;
    ADSB_EMITTER_TYPE_LARGE = 3;
    ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4;
    ADSB_EMITTER_TYPE_HEAVY = 5;
    ADSB_EMITTER_TYPE_HIGH_PERFORMANCE = 6;
    ADSB_EMITTER_TYPE_ROTORCRAFT = 7;
    // Category B subtypes
    ADSB_EMITTER_TYPE_NO_INFO_B = 8;
    ADSB_EMITTER_TYPE_GLIDER_SAILPLANE = 9;
    ADSB_EMITTER_TYPE_LIGHTER_THAN_AIR = 10;
    ADSB_EMITTER_TYPE_SKYDIVER = 11;
    ADSB_EMITTER_TYPE_ULTRALIGHT_PARAGLIDER = 12;
    ADSB_EMITTER_TYPE_RESERVED_13 = 13;
    ADSB_EMITTER_TYPE_UAV = 14;
    ADSB_EMITTER_TYPE_SPACE_TRANS_ATMOSPHERIC = 15;
    // Category C subtypes
    ADSB_EMITTER_TYPE_NO_INFO_C = 16;
    ADSB_EMITTER_TYPE_SURFACE_EMERGENCY = 17;
    ADSB_EMITTER_TYPE_SURFACE_SERVICE = 18;
    ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19;
    ADSB_EMITTER_TYPE_CLUSTER_OBSTACLE = 20;
    ADSB_EMITTER_TYPE_LINE_OBSTACLE = 21;
    ADSB_EMITTER_TYPE_RESERVED_22 = 22;
    ADSB_EMITTER_TYPE_RESERVED_23 = 23;
    // Category D subtypes
    ADSB_EMITTER_TYPE_NO_INFO_D = 24;
    ADSB_EMITTER_TYPE_RESERVED_25 = 25;
    ADSB_EMITTER_TYPE_RESERVED_26 = 26;
    ADSB_EMITTER_TYPE_RESERVED_27 = 27;
    ADSB_EMITTER_TYPE_RESERVED_28 = 28;
    ADSB_EMITTER_TYPE_RESERVED_29 = 29;
    ADSB_EMITTER_TYPE_RESERVED_30 = 30;
    ADSB_EMITTER_TYPE_RESERVED_31 = 31;
}
enum Adsb_altitude_source {
    ADSB_ALTITUDE_SOURCE_BARO = 0;
    ADSB_ALTITUDE_SOURCE_GNSS = 1;
}
// Built in command parameter enums
enum Adsb_mode {
    ADSB_MODE_OFF = 0;
    ADSB_MODE_STBY = 1;
    ADSB_MODE_ON = 2;
    ADSB_MODE_ALT = 3;
}
enum Failsafe_action {
    FAILSAFE_ACTION_RTH = 0;
    FAILSAFE_ACTION_LAND = 1;
    FAILSAFE_ACTION_WAIT = 2;
    FAILSAFE_ACTION_CONTINUE = 3;
}
// Action after RTH
enum Rth_action {
    RTH_ACTION_LAND = 0;
    RTH_ACTION_WAIT = 1;
}
enum Camera_power_state {
    CAMERA_POWER_STATE_ON = 0;
    CAMERA_POWER_STATE_OFF = 1;
    CAMERA_POWER_STATE_TOGGLE = 2;
}
enum Camera_video_source {
    CAMERA_VIDEO_SOURCE_PRIMARY = 0;
    CAMERA_VIDEO_SOURCE_SECONDARY = 1;
}
enum Camera_command_trigger_state {
    CAMERA_COMMAND_TRIGGER_STATE_SINGLE_SHOT = 0;
    CAMERA_COMMAND_TRIGGER_STATE_VIDEO_START = 1;
    CAMERA_COMMAND_TRIGGER_STATE_VIDEO_STOP = 2;
    CAMERA_COMMAND_TRIGGER_STATE_VIDEO_TOGGLE = 3;
}
enum Camera_mission_trigger_state {
    CAMERA_MISSION_TRIGGER_STATE_ON = 0;
    CAMERA_MISSION_TRIGGER_STATE_OFF = 1;
    CAMERA_MISSION_TRIGGER_STATE_SINGLE_PHOTO = 2;
    CAMERA_MISSION_TRIGGER_STATE_SERIAL_PHOTO = 3;
}
enum Panorama_mode {
    PANORAMA_MODE_PHOTO = 0;
    PANORAMA_MODE_VIDEO = 1;
}
enum Turn_type {
    TURN_TYPE_STOP_AND_TURN = 0;
    TURN_TYPE_STRAIGHT = 1;
    TURN_TYPE_SPLINE = 2;
    TURN_TYPE_BANK_TURN = 3;
}
// Field/parameter type (semantic)
enum Field_semantic {
    // Used internally.
    FIELD_SEMANTIC_DEFAULT = 0;
    // Description, Units, Data type, Range, Origin, Positive direction
    // Geodetic latitude, radians, double, -Pi/2..Pi/2, equator, north
    FIELD_SEMANTIC_LATITUDE = 1;
    // Geodetic longitude, radians, double, -Pi..Pi, Greenwich meridian, East
    FIELD_SEMANTIC_LONGITUDE = 2;
    // WGS84 altitude, meters, numeric
    FIELD_SEMANTIC_ALTITUDE_AMSL = 3;
    // Altitude AGL, meters, numeric
    FIELD_SEMANTIC_ALTITUDE_AGL = 4;
    // Raw altitude reading from vehicle. Typically above home location., meters, numeric
    FIELD_SEMANTIC_ALTITUDE_RAW = 5;
    // Vehicle nose angle, radians, numeric, 0..2Pi, North, East
    FIELD_SEMANTIC_HEADING = 6;
    // Battery voltage, volts, numeric
    FIELD_SEMANTIC_VOLTAGE = 8;
    // Air speed, m/s, numeric
    FIELD_SEMANTIC_AIR_SPEED = 9;
    // Ground speed, m/s, numeric
    FIELD_SEMANTIC_GROUND_SPEED = 10;
    // Climb speed, m/s, numeric
    FIELD_SEMANTIC_VERTICAL_SPEED = 11;
    // GNSS satellite count, numeric
    FIELD_SEMANTIC_SATELLITE_COUNT = 12;
    // Fix type, numeric, enum Gps_fix_type
    FIELD_SEMANTIC_GPS_FIX_TYPE = 13;
    // Roll angle, radians, numeric, -Pi..Pi, Horizon, right
    FIELD_SEMANTIC_ROLL = 14;
    // Pitch angle, radians, numeric, -Pi..Pi, Horizon, up
    FIELD_SEMANTIC_PITCH = 15;
    // Yaw angle, radians, numeric, 0..2Pi, unspecified, East
    FIELD_SEMANTIC_YAW = 16;
    // RC link quality, , numeric, [0..1]
    FIELD_SEMANTIC_RC_LINK_QUALITY = 17;
    // Battery current, amperes, numeric
    FIELD_SEMANTIC_CURRENT = 18;
    // Groundstation datalink quality, , numeric, [0..1]
    FIELD_SEMANTIC_GCS_LINK_QUALITY = 19;
    // Camera Field-of-view horizontal angle, radians, numeric, 0..Pi
    FIELD_SEMANTIC_FOV_H = 23;
    // Camera Field-of-view veritcal angle, radians, numeric, 0..Pi
    FIELD_SEMANTIC_FOV_V = 24;
    // Current control mode, int, enum Control_mode
    FIELD_SEMANTIC_CONTROL_MODE = 26;
    // Terrain elevation AMSL, meters, numeric
    FIELD_SEMANTIC_GROUND_ELEVATION = 27;
    // Waypoint acceptance radius, meters, numeric
    FIELD_SEMANTIC_ACCEPTANCE_RADIUS = 28;
    // Waypoint loiter radius, meters, numeric
    FIELD_SEMANTIC_LOITER_RADIUS = 29;
    // ADSB icao code, 24 bits, numeric, represented as hex
    FIELD_SEMANTIC_ICAO = 30;
    // ADSB transponder mode, enum, Adsb_mode, numeric
    FIELD_SEMANTIC_ADSB_MODE = 31;
    // ADSB squawk code, 12 bits, numeric, represented as octal
    FIELD_SEMANTIC_SQUAWK = 32;
    // Time interval, milliseconds, numeric, represented as time
    FIELD_SEMANTIC_MILLISECONDS = 33;
    // Battery capacity percentage, numeric, [0..1]
    FIELD_SEMANTIC_CAPACITY_LEVEL = 34;
    // Vehicle flight mode, enum, Flight_mode
    FIELD_SEMANTIC_FLIGHT_MODE = 35;
    // Autopilot status, enum
    FIELD_SEMANTIC_AUTOPILOT_STATUS = 36;
    // Time since Unix epoch (1970-01-01T00:00:00Z), int64, milliseconds
    FIELD_SEMANTIC_TIMESTAMP = 37;
    // Temperature, celsius, numeric
    FIELD_SEMANTIC_TEMPERATURE = 38;
    // Humidity, percentage, numeric, [0..100]
    FIELD_SEMANTIC_HUMIDITY = 39;
    // Precipitation, mm/hour, numeric, [0,2..150]
    FIELD_SEMANTIC_PRECIPITATION = 42;
    // Generic types used for user-defined telemetry fields.
    // Value can be of any type. Field can hold any one of supported values.
    // VSM will determine the value type depending on which value is present in Field_value.
    // The order is: double, int, string, bool, list.
    // For example, if field contains both int and string values then string value will be ignored.
    FIELD_SEMANTIC_ANY = 100;
    // Generic number type. Exact type (float, int, etc...) will be detected automatically
    FIELD_SEMANTIC_NUMERIC = 101;
    // boolean
    FIELD_SEMANTIC_BOOL = 104;
    // utf8 string
    FIELD_SEMANTIC_STRING = 105;
    // enum. Possible values defined via Register_enumeration message.
    FIELD_SEMANTIC_ENUM = 106;
    // list.
    FIELD_SEMANTIC_LIST = 107;
    // Unformatted binary data
    FIELD_SEMANTIC_BINARY = 108;
}