Module: DjiMqttConnect::Types

Defined in:
lib/dji_mqtt_connect/types.rb

Overview

Types binding for dry-types

Constant Summary collapse

NullInteger =

DJI does not like null, so it returns Integer 0 instead of a Decimal...

Types::Strict::Integer.constrained(eql: 0)
ErrorInteger =

Negative values indicate a fault

Types::Strict::Integer.constrained(lt: 0)
UUID =

Not a Strict UUID format... turns out DJI doesn't follow one

Strict::String.constrained(format: /\A[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\z/i)
Timestamp =

Timestamp in seconds since epoch

Types::Integer & Types::Coercible::String.constrained(format: /\A[1-9][0-9]{9}\z/)
TimestampMS =

Just make sure Timestamps are 13 digits long (millisecond precision)

Types::Integer & Types::Coercible::String.constrained(format: /\A[1-9][0-9]{12}\z/)
SerialNumber =

Serial Numbers are alphanumeric with optional hyphen

Types::String.constrained(format: /\A[0-9A-Z]+(-[0-9A-Z]+)?\z/)
FlightID =

Flight ID is a string with at least 1 character

Types::String.constrained(min_size: 1)
Latitude =

lat/lng coordinates

NullInteger | Types::JSON::Decimal.constrained(gteq: -90, lteq: 90)
Longitude =
NullInteger | Types::JSON::Decimal.constrained(gteq: -180, lteq: 180)
AIRCRAFT_DOMAIN =

Device Details

0
PAYLOAD_DOMAIN =
1
REMOTE_CONTROLLER_DOMAIN =
2
DOCK_DOMAIN =
3
DeviceDomain =

dock returns this value as string

Types::Coercible::Integer.enum(AIRCRAFT_DOMAIN, PAYLOAD_DOMAIN, REMOTE_CONTROLLER_DOMAIN, DOCK_DOMAIN)
DeviceType =
Types::Integer
DeviceSubType =
Types::Integer
AirConditionerState =

mode (No cooling, heating, and dehumidification)","1":"Cooling mode","2":"Heating mode","3":"Dehumidification mode","4":"Cooling exit mode","5":"Heating exit mode","6":"Dehumidification exit mode","7":"Cooling preparation mode","8":"Heating preparation mode","9":"Dehumidification preparation mode"

Types::Integer.enum(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
AlarmState =
Types::Integer.enum(
  ALARM_STATE_CLOSED = 0,
  ALARM_STATE_OPEN = 1
)
CameraMode =

Low-Light","3":"Panorama","-1":"Unsupported mode" "4":"Timed Shot"

Types::Integer.enum(
  CAMERA_MODE_CAPTURING = 0,
  CAMERA_MODE_RECORDING = 1,
  CAMERA_MODE_SMART_LOW_LIGHT = 2,
  CAMERA_MODE_PANORAMA = 3,
  CAMERA_MODE_TIMED_SHOT = 4
)
CameraPhotoState =

photo"

Types::Integer.enum(
  CAMERA_PHOTO_STATE_IDLE = 0,
  CAMERA_PHOTO_STATE_TAKING_PHOTO = 1
)
CameraRecordingState =

"0":"Idle","1":"Recording"

Types::Integer.enum(
  CAMERA_RECORDING_STATE_IDLE = 0,
  CAMERA_RECORDING_STATE_RECORDING = 1
)
CoverState =

state is abnormal"

Types::Integer.enum(
  COVER_STATE_CLOSED = 0,
  COVER_STATE_OPEN = 1,
  COVER_STATE_HALF_OPEN = 2,
  COVER_STATE_ABNORMAL = 3
)
DockModeCode =

debugging","2":"Remote debugging","3":"Firmware upgrading","4":"Working"

Integer.enum(
  DOCK_MODE_CODE_IDLE = 0,
  DOCK_MODE_CODE_ON_SITE_DEBUGGING = 1,
  DOCK_MODE_CODE_REMOTE_DEBUGGING = 2,
  DOCK_MODE_CODE_UPGRADE = 3,
  DOCK_MODE_CODE_TASK_IN_PROGRESS = 4,
  DOCK_MODE_CODE_OFFLINE = 5,
  DOCK_MODE_CODE_EMERGENCY_STOP = 7,
  DOCK_MODE_CODE_PREPARING_JOB = 47,
  DOCK_MODE_CODE_JOB_IN_PROGRESS = 48,
  DOCK_MODE_CODE_JOB_IN_DONE = 49,
  DOCK_MODE_CODE_CUSTOM_FLIGHT_AREA_UPDATE = 50,
  DOCK_MODE_CODE_TERRAIN_OBSTACLE_UPDATE = 51
)
DroneModeCode =

preparation","2":"Takeoff preparation completed","3":"Manual flight","4":"Automatic takeoff","5":"Wayline flight","6":"Panoramic photography","7":"Intelligent tracking","8":"ADS-B avoidance","9":"Auto returning to home","10":"Automatic landing","11":"Forced landing","12":"Three-blade landing","13":"Upgrading","14":"Not connected","15":"APAS","16":"Virtual stick state","17":"Live Flight Controls","18":"Airborne RTK fixing mode","19":"Dock address selecting","20":"POI"

Types::Integer.enum(
  DRONE_MODE_STANDBY = 0,
  DRONE_MODE_TAKEOFF_PREPARATION = 1,
  DRONE_MODE_TAKEOFF_PREPARATION_COMPLETED = 2,
  DRONE_MODE_MANUAL_FLIGHT = 3,
  DRONE_MODE_AUTOMATIC_TAKEOFF = 4,
  DRONE_MODE_WAYLINE_FLIGHT = 5,
  DRONE_MODE_PANORAMIC_PHOTOGRAPHY = 6,
  DRONE_MODE_INTELLIGENT_TRACKING = 7,
  DRONE_MODE_ADS_B_AVOIDANCE = 8,
  DRONE_MODE_AUTO_RETURNING_TO_HOME = 9,
  DRONE_MODE_AUTOMATIC_LANDING = 10,
  DRONE_MODE_FORCED_LANDING = 11,
  DRONE_MODE_THREE_BLADE_LANDING = 12,
  DRONE_MODE_UPGRADING = 13,
  DRONE_MODE_NOT_CONNECTED = 14,
  DRONE_MODE_APAS = 15,
  DRONE_MODE_VIRTUAL_STICK_STATE = 16,
  DRONE_MODE_LIVE_FLIGHT_CONTROLS = 17,
  DRONE_MODE_AIRBORNE_RTK_FIXING_MODE = 18,
  DRONE_MODE_DOCK_ADDRESS_SELECTING = 19,
  DRONE_MODE_POI = 20,
  DRONE_MODE_SHUT_DOWN_IN_DOCK = 353101,
  DRONE_MODE_STARTING_UP = 353102,
  DRONE_MODE_NOT_REPORTED = 100,
  DRONE_MODE_FAILED = 65535
)
DroneModeCodeReason =

meaning","1":"Insufficient battery power (return, landing)","2":"Insufficient battery voltage (return, landing)","3":"Severely low voltage (return, landing)","4":"Requested by remote controller buttons (takeoff, return, landing)","5":"Requested by App (takeoff, return, landing)","6":"Loss of remote controller signal (return, landing, hover)","7":"Triggered by external devices such as navigation, SDK, etc. (takeoff, return, landing)","8":"Entered the dock GEO Zone (landing)","9":"Although a return was triggered, it was too close to the Home point (landing)","10":"Although a return was triggered, it was too far from the Home point (landing)","11":"Requested when executing waypoint missions (takeoff)","12":"Requested after reaching above the Home point in the return phase (landing)","13":"Continued descent after the aircraft's height dropped to 0.7m from the ground (second-stage descent limit) leading to (landing)","14":"Forced breakthrough of low altitude protection by devices like App, SDK (landing)","15":"Requested due to passing flights in the vicinity (returning, landing)","16":"Requested due to height control failure (return, landing)","17":"Entered after intelligent low battery return (landing)","18":"AP controls the flight mode (manual flight)","19":"Hardware abnormally (return, landing)","20":"End of anti-collision protection (landing)","21":"Return canceled (hover)","22":"Encountered obstacles during the return (landing)","23":"Triggered by strong winds in the dock scene (return)"

Types::Integer.enum(
  DRONE_MODE_CODE_REASON_NO_MEANING = 0,
  DRONE_MODE_CODE_REASON_INSUFFICIENT_BATTERY_POWER = 1,
  DRONE_MODE_CODE_REASON_INSUFFICIENT_BATTERY_VOLTAGE = 2,
  DRONE_MODE_CODE_REASON_SEVERELY_LOW_VOLTAGE = 3,
  DRONE_MODE_CODE_REASON_REQUESTED_BY_REMOTE_CONTROLLER_BUTTONS = 4,
  DRONE_MODE_CODE_REASON_REQUESTED_BY_APP = 5,
  DRONE_MODE_CODE_REASON_LOSS_OF_REMOTE_CONTROLLER_SIGNAL = 6,
  DRONE_MODE_CODE_REASON_TRIGGERED_BY_EXTERNAL_DEVICES = 7,
  DRONE_MODE_CODE_REASON_ENTERED_DOCK_GEO_ZONE = 8,
  DRONE_MODE_CODE_REASON_RETURN_TOO_CLOSE_TO_HOME_POINT = 9,
  DRONE_MODE_CODE_REASON_RETURN_TOO_FAR_FROM_HOME_POINT = 10,
  DRONE_MODE_CODE_REASON_REQUESTED_WHEN_EXECUTING_WAYPOINT_MISSIONS = 11,
  DRONE_MODE_CODE_REASON_REQUESTED_AFTER_REACHING_ABOVE_HOME_POINT_IN_RETURN_PHASE = 12,
  DRONE_MODE_CODE_REASON_CONTINUED_DESCENT_AFTER_HEIGHT_DROPPED_TO_0_7M_FROM_GROUND = 13,
  DRONE_MODE_CODE_REASON_FORCED_BREAKTHROUGH_OF_LOW_ALTITUDE_PROTECTION = 14,
  DRONE_MODE_CODE_REASON_REQUESTED_DUE_TO_PASSING_FLIGHTS_IN_VICINITY = 15,
  DRONE_MODE_CODE_REASON_REQUESTED_DUE_TO_HEIGHT_CONTROL_FAILURE = 16,
  DRONE_MODE_CODE_REASON_ENTERED_AFTER_INTELLIGENT_LOW_BATTERY_RETURN = 17,
  DRONE_MODE_CODE_REASON_AP_CONTROLS_FLIGHT_MODE = 18,
  DRONE_MODE_CODE_REASON_HARDWARE_ABNORMALLY = 19,
  DRONE_MODE_CODE_REASON_END_OF_ANTI_COLLISION_PROTECTION = 20,
  DRONE_MODE_CODE_REASON_RETURN_CANCELED = 21,
  DRONE_MODE_CODE_REASON_ENCOUNTERED_OBSTACLES_DURING_RETURN = 22,
  DRONE_MODE_CODE_REASON_TRIGGERED_BY_STRONG_WINDS = 23
)
DroneChargeState =

charging","1":"charging"

Types::Integer.enum(
  DRONE_CHARGE_STATE_NOT_CHARGING = 0,
  DRONE_CHARGE_STATE_CHARGING = 1
)
DroneInDock =
Integer.enum(
  DRONE_OUT_OF_DOCK = 0,
  DRONE_IN_DOCK = 1
)
EmergencyStopState =

"0":"Closed","1":"Opened"

Types::Integer.enum(
  EMERGENCY_STOP_STATE_CLOSED = 0,
  EMERGENCY_STOP_STATE_OPEN = 1
)
EXPOSURE_VALUE_FIXED =

"1":"-5.0EV","2":"-4.7EV","3":"-4.3EV","4":"-4.0EV","5":"-3.7EV","6":"-3.3EV","7":"-3.0EV","8":"-2.7EV","9":"-2.3EV","10":"-2.0EV","11":"-1.7EV","12":"-1.3EV","13":"-1.0EV","14":"-0.7EV","15":"-0.3EV","16":"0EV","17":"0.3EV","18":"0.7EV","19":"1.0EV","20":"1.3EV","21":"1.7EV","22":"2.0EV","23":"2.3EV","24":"2.7EV","25":"3.0EV","26":"3.3EV","27":"3.7EV","28":"4.0EV","29":"4.3EV","30":"4.7EV","31":"5.0EV","255":"FIXED"

255
ExposureValue =
Types::Integer.constrained(gteq: 1, lteq: 31) | Types::Integer.constrained(eql: EXPOSURE_VALUE_FIXED)
EXPOSURE_VALUES =

The exposure compensation each exposure value stands for, in EV. DJI publishes the value itself rather than the compensation, so a caller reading or setting an exposure needs this table to name it

{
  1 => "-5.0",
  2 => "-4.7",
  3 => "-4.3",
  4 => "-4.0",
  5 => "-3.7",
  6 => "-3.3",
  7 => "-3.0",
  8 => "-2.7",
  9 => "-2.3",
  10 => "-2.0",
  11 => "-1.7",
  12 => "-1.3",
  13 => "-1.0",
  14 => "-0.7",
  15 => "-0.3",
  16 => "0",
  17 => "0.3",
  18 => "0.7",
  19 => "1.0",
  20 => "1.3",
  21 => "1.7",
  22 => "2.0",
  23 => "2.3",
  24 => "2.7",
  25 => "3.0",
  26 => "3.3",
  27 => "3.7",
  28 => "4.0",
  29 => "4.3",
  30 => "4.7",
  31 => "5.0",
  EXPOSURE_VALUE_FIXED => "fixed"
}.freeze
FlightTaskStepCode =

preparation","1":"In-flight operation","2":"Post-operation state recovery","3":"Custom flight area updating","4":"Terrain obstacle updating","5":"Mission idle","255":"Aircraft is abnormal","256":"Unknown state"

Types::Integer.enum(
  FLIGHT_TASK_STEP_OPERATION_PREPARATION = 0,
  FLIGHT_TASK_STEP_IN_FLIGHT_OPERATION = 1,
  FLIGHT_TASK_STEP_POST_OPERATION_STATE_RECOVERY = 2,
  FLIGHT_TASK_STEP_CUSTOM_FLIGHT_AREA_UPDATING = 3,
  FLIGHT_TASK_STEP_TERRAIN_OBSTACLE_UPDATING = 4,
  FLIGHT_TASK_STEP_MISSION_IDLE = 5,
  FLIGHT_TASK_STEP_AIRCRAFT_IS_ABNORMAL = 255,
  FLIGHT_TASK_STEP_UNKNOWN_STATE = 256
)
FlighttaskType =

How a wayline task is scheduled. An immediate task and a timed task are both flown at their execute_time; a conditional task is flown once its ready_conditions are satisfied task","1":"Timed task","2":"Conditional task"

Types::Integer.enum(
  FLIGHTTASK_TYPE_IMMEDIATE = 0,
  FLIGHTTASK_TYPE_TIMED = 1,
  FLIGHTTASK_TYPE_CONDITIONAL = 2
)
FlighttaskStatus =

How far a wayline task has got. The same set of values a service reply reports, plus the partially_done a wayline that flew only some of its waypoints finishes in done","sent":"sent","in_progress":"in progress","ok":"success","paused":"paused","rejected":"rejected","failed":"failed","canceled":"canceled or stopped","timeout":"timeout"

Types::String.enum(
  FLIGHTTASK_STATUS_PARTIALLY_DONE = "partially_done",
  FLIGHTTASK_STATUS_SENT = "sent",
  FLIGHTTASK_STATUS_IN_PROGRESS = "in_progress",
  FLIGHTTASK_STATUS_OK = "ok",
  FLIGHTTASK_STATUS_PAUSED = "paused",
  FLIGHTTASK_STATUS_REJECTED = "rejected",
  FLIGHTTASK_STATUS_FAILED = "failed",
  FLIGHTTASK_STATUS_CANCELED = "canceled",
  FLIGHTTASK_STATUS_TIMEOUT = "timeout"
)
BreakPointState =

Where a wayline task was interrupted, so it can be resumed from there the wayline segment","1":"On the waypoint"

Types::Integer.enum(
  BREAK_POINT_STATE_ON_WAYLINE_SEGMENT = 0,
  BREAK_POINT_STATE_ON_WAYPOINT = 1
)
BREAK_REASON_NO_ABNORMALITIES =

Why a wayline task was interrupted. DJI publishes a reason for every interruption, including the ones it does not consider a fault, so a break point reporting this reason is not an error

0
RthMode =

How the return to home altitude is chosen altitude","1":"Preset altitude"

Types::Integer.enum(
  RTH_MODE_INTELLIGENT_ALTITUDE = 0,
  RTH_MODE_PRESET_ALTITUDE = 1
)
OutOfControlAction =

What the aircraft does when it loses its link during a wayline task to Home (RTH)","1":"Hovering","2":"Landing"

Types::Integer.enum(
  OUT_OF_CONTROL_ACTION_RETURN_TO_HOME = 0,
  OUT_OF_CONTROL_ACTION_HOVERING = 1,
  OUT_OF_CONTROL_ACTION_LANDING = 2
)
ExitWaylineWhenRcLost =

Whether losing the remote controller ends a wayline task, or only the out of control action executing the wayline task","1":"Exit the wayline task and execute the remote controller out of control action"

Types::Integer.enum(
  EXIT_WAYLINE_WHEN_RC_LOST_CONTINUE = 0,
  EXIT_WAYLINE_WHEN_RC_LOST_EXIT = 1
)
WaylinePrecisionType =

Whether a wayline task waits for RTK convergence before it is flown Mission","1":"High-precision RTK mission"

Types::Integer.enum(
  WAYLINE_PRECISION_TYPE_GPS = 0,
  WAYLINE_PRECISION_TYPE_HIGH_PRECISION_RTK = 1
)
RcLostAction =

What the aircraft does when it loses its link during a flight to a target point to home"

Types::Integer.enum(
  RC_LOST_ACTION_HOVERING = 0,
  RC_LOST_ACTION_LANDING = 1,
  RC_LOST_ACTION_RETURN_TO_HOME = 2
)
CommanderModeLostAction =

Whether losing the remote controller ends a flight to a target point with the to-point flight mission","1":"Exit the to-point flight mission and perform normal loss of control behavior"

Types::Integer.enum(
  COMMANDER_MODE_LOST_ACTION_CONTINUE = 0,
  COMMANDER_MODE_LOST_ACTION_EXIT = 1
)
CommanderFlightMode =

The altitude a flight to a target point is flown at height flight","1":"Preset height flight"

Types::Integer.enum(
  COMMANDER_FLIGHT_MODE_OPTIMAL_HEIGHT = 0,
  COMMANDER_FLIGHT_MODE_PRESET_HEIGHT = 1
)
SimulateMission =

Whether a task is flown by the aircraft or by the flight simulator not enable","1":"Enable"

Types::Integer.enum(
  SIMULATE_MISSION_DISABLED = 0,
  SIMULATE_MISSION_ENABLED = 1
)
FlyToPointProgressStatus =

How far a flight to a target point has got flying to target point","wayline_failed":"Execution failed","wayline_ok":"Executed successfully, flown to target point","wayline_progress":"Executing"

Types::String.enum(
  FLY_TO_POINT_PROGRESS_STATUS_IN_PROGRESS = "wayline_progress",
  FLY_TO_POINT_PROGRESS_STATUS_OK = "wayline_ok",
  FLY_TO_POINT_PROGRESS_STATUS_FAILED = "wayline_failed",
  FLY_TO_POINT_PROGRESS_STATUS_CANCELED = "wayline_cancel"
)
TakeoffToPointProgressStatus =

How far a one-key takeoff has got. The statuses a flight to a target point reports, plus the two the takeoff itself reports takeoff mission completed","task_ready":"Ready for takeoff","wayline_cancel":"Cancel flying to target point","wayline_failed":"Execution failed","wayline_ok":"Executed successfully, flown to target point","wayline_progress":"Executing"

Types::String.enum(
  FLY_TO_POINT_PROGRESS_STATUS_IN_PROGRESS,
  FLY_TO_POINT_PROGRESS_STATUS_OK,
  FLY_TO_POINT_PROGRESS_STATUS_FAILED,
  FLY_TO_POINT_PROGRESS_STATUS_CANCELED,
  TAKEOFF_TO_POINT_PROGRESS_STATUS_READY = "task_ready",
  TAKEOFF_TO_POINT_PROGRESS_STATUS_FINISHED = "task_finish"
)
HmsLevel =

"0":"Inform","1":"Notice","2":"Alarm"

Types::Integer.enum(
  HMS_LEVEL_INFORM = 0,
  HMS_LEVEL_NOTICE = 1,
  HMS_LEVEL_ALARM = 2
)
HmsModule =

mission","1":"device management","2":"media","3":"hms"

Types::Integer.enum(
  HMS_MODULE_FLIGHT_MISSION = 0,
  HMS_MODULE_DEVICE_MANAGEMENT = 1,
  HMS_MODULE_MEDIA = 2,
  HMS_MODULE_HMS = 3
)
HmsInTheSky =

the ground","1":"in the sky"

Types::Integer.enum(
  HMS_ON_THE_GROUND = 0,
  HMS_IN_THE_SKY = 1
)
HmsImminent =

"0":"No","1":"Yes"

Types::Integer.enum(
  HMS_NOT_IMMINENT = 0,
  HMS_IMMINENT = 1
)
InvalidTemperature =

maximum temp of k-type thermocouple, errors are usually 30K+

Types::Integer.constrained(gteq: 1300)
Temperature =
InvalidTemperature | Types::JSON::Decimal
IrMeteringMode =

temperature measurement","1":"Point temperature measurement","2":"Area temperature measurement"

Types::Integer.enum(
  IR_METERING_MODE_CLOSED = 0,
  IR_METERING_MODE_POINT = 1,
  IR_METERING_MODE_AREA = 2
)
EventsProgressStepKey =

bid","check_work_mode":"Check whether to enter remote debugging mode","check_task_state":"Check if the DJI Dock is free","land_mcu_reboot":"Land MCU reboot","rain_mcu_reboot":"Weather station MCU reboot","core_mcu_reboot":"Central control MCU reboot","sdr_reboot":"SDR reboot","write_reboot_param_file":"Write reboot flag","get_drone_power_state":"Get battery charge state","close_putter":"Close the putter","check_wired_connect_state":"Get aircraft state","open_drone":"Open the plane","open_alarm":"Open sound and light alarm","check_scram_state":"Check if the emergency stop switch is pressed","open_cover":"Open the hatch","check_drone_sdr_connect_state":"Establish SDR wireless connection","turn_on_drone":"Turn the plane on","drone_paddle_forward":"Turn on forward paddle","close_cover":"Close the hatch","drone_paddle_reverse":"Turn on reverse paddle","drone_paddle_stop":"Stop Paddle Rotation","free_putter":"Free Putter","stop_charge":"Stop charging"

Types::String.enum(
  "get_bid",
  "check_work_mode",
  "check_task_state",
  "land_mcu_reboot",
  "rain_mcu_reboot",
  "core_mcu_reboot",
  "sdr_reboot",
  "write_reboot_param_file",
  "get_drone_power_state",
  "close_putter",
  "check_wired_connect_state",
  "open_drone",
  "open_alarm",
  "check_scram_state",
  "open_cover",
  "check_drone_sdr_connect_state",
  "turn_on_drone",
  "drone_paddle_forward",
  "close_cover",
  "close_drone",
  "drone_paddle_reverse",
  "drone_paddle_stop",
  "free_putter",
  "stop_charge",
  "plc_check"
)
NetworkStateType =
Integer.enum(
  NETWORK_STATE_TYPE_4G = 1,
  NETWORK_STATE_TYPE_ETHERNET = 2
)
NetworkStateQuality =
Integer.enum(
  NETWORK_STATE_QUALITY_BAD = 0,
  NETWORK_STATE_QUALITY_MODERATE = 1,
  NETWORK_STATE_QUALITY_GOOD = 2
)
PayloadIndex =

Enumeration of camera payload and mounted location. Non-standard device_mode_key, formatted as type-subtype-gimbalindex.

String.constrained(format: /\A\d+-\d+-\d+\z/)
PositionStateCalibration =

Whether the dock has calibrated its RTK position calibrated","1":"Calibrated"

Types::Integer.enum(
  POSITION_STATE_NOT_CALIBRATED = 0,
  POSITION_STATE_CALIBRATED = 1
)
PositionStateFixed =

How far RTK fixing has got start","1":"fixing","2":"fix successfully","3":"fix failed"

Types::Integer.enum(
  POSITION_STATE_FIXED_NOT_STARTED = 0,
  POSITION_STATE_FIXED_IN_PROGRESS = 1,
  POSITION_STATE_FIXED_SUCCEEDED = 2,
  POSITION_STATE_FIXED_FAILED = 3
)
PositionStateQuality =

The strength of the GNSS signal. A fixed RTK position is reported as its own quality rather than as a strength, and is the better of the two weak","2":"Weak","3":"Normal","4":"Strong","5":"Very strong","10":"RTK fixed"

Types::Integer.enum(
  POSITION_STATE_QUALITY_VERY_WEAK = 1,
  POSITION_STATE_QUALITY_WEAK = 2,
  POSITION_STATE_QUALITY_NORMAL = 3,
  POSITION_STATE_QUALITY_STRONG = 4,
  POSITION_STATE_QUALITY_VERY_STRONG = 5,
  POSITION_STATE_QUALITY_RTK_FIXED = 10
)
PutterState =

state is abnormal"

Types::Integer.enum(
  PUTTER_STATE_CLOSED = 0,
  PUTTER_STATE_OPEN = 1,
  PUTTER_STATE_HALF_OPEN = 2,
  PUTTER_STATE_ABNORMAL = 3
)
Rainfall =

rain","1":"Light rain","2":"Moderate rain","3":"Heavy rain"

Types::Integer.enum(
  RAINFALL_NONE = 0,
  RAINFALL_LIGHT = 1,
  RAINFALL_MODERATE = 2,
  RAINFALL_HEAVY = 3
)
ServicesOutputStatus =

progress","ok":"success","paused":"paused","rejected":"rejected","failed":"failed","canceled":"canceled or stopped","timeout":"timeout"

Types::String.enum(
  SERVICE_OUTPUT_STATUS_SENT = "sent",
  SERVICE_OUTPUT_STATUS_IN_PROGRESS = "in_progress",
  SERVICE_OUTPUT_STATUS_OK = "ok",
  SERVICE_OUTPUT_STATUS_PAUSED = "paused",
  SERVICE_OUTPUT_STATUS_REJECTED = "rejected",
  SERVICE_OUTPUT_STATUS_FAILED = "failed",
  SERVICE_OUTPUT_STATUS_CANCELED = "canceled",
  SERVICE_OUTPUT_STATUS_TIMEOUT = "timeout"
)
SupplementLightState =

"0":"Closed","1":"Opened"

Types::Integer.enum(
  SUPPLEMENT_LIGHT_STATE_CLOSED = 0,
  SUPPLEMENT_LIGHT_STATE_OPEN = 1
)
VideoQuality =

Video Quality definition","3":"High definition","4":"Ultra-high definition"

Types::Integer.enum(
  VIDEO_QUALITY_ADAPTIVE = 0,
  VIDEO_QUALITY_SMOOTH = 1,
  VIDEO_QUALITY_STANDARD_DEFINITION = 2,
  VIDEO_QUALITY_HIGH_DEFINITION = 3,
  VIDEO_QUALITY_ULTRA_HIGH_DEFINITION = 4
)
VideoType =

Video Type "ir":"Infrared","normal":"Default","wide":"Wide-angle","zoom":"Zoom"

Types::String.enum(
  VIDEO_TYPE_INFRARED = "ir",
  VIDEO_TYPE_NORMAL = "normal",
  VIDEO_TYPE_WIDE_ANGLE = "wide",
  VIDEO_TYPE_ZOOM = "zoom"
)
TargetDeviceType =

Target device for dongle/eSIM operations dock dongle","drone":"Set aircraft dongle"

Types::String.enum(
  TARGET_DEVICE_TYPE_DOCK = "dock",
  TARGET_DEVICE_TYPE_DRONE = "drone"
)
RtkCalibrationDeviceModule =

The module an RTK calibration device belongs to "3":"Dock","6":"Relay"

Types::String.enum(
  RTK_CALIBRATION_DEVICE_MODULE_DOCK = "3",
  RTK_CALIBRATION_DEVICE_MODULE_RELAY = "6"
)
RtkCalibrationTaskStatus =

Overall RTK calibration task status (a restricted subset of ServicesOutputStatus) "failed":"Failed","ok":"Success"

Types::String.enum(
  RTK_CALIBRATION_TASK_STATUS_FAILED = "failed",
  RTK_CALIBRATION_TASK_STATUS_OK = "ok"
)
FileuploadModule =

The device a log file belongs to. NOTE: Documented as an enum_int, but the dock reports (and expects) these values as strings Dock"

Types::Coercible::String.enum(
  FILEUPLOAD_MODULE_AIRCRAFT = "0",
  FILEUPLOAD_MODULE_DOCK = "3"
)
FileuploadUpdateStatus =

The state a log file upload task can be moved into "cancel":"Cancelled"

Types::String.enum(
  FILEUPLOAD_UPDATE_STATUS_CANCEL = "cancel"
)
ResultCode =

Result for messages

Types::Integer.constrained(gteq: 0)