VSM C++ SDK
Vehicle Specific Modules SDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ucs_vsm.proto

Protobuf definition files

Protobuf Message definitions

1 package ugcs.vsm.proto;
2 
3 option java_package = "com.ugcs.ucs.vsm.proto";
4 option java_outer_classname = "VsmMessagesProto";
5 
6 import "ucs_vsm_defs.proto";
7 
8 // VSM-UCS Transport protocol wire format definition
9 //
10 // Frame wire format:
11 // <length><data>
12 // length Size of data in bytes encoded as LEB128 (https://en.wikipedia.org/wiki/LEB128)
13 // data Message data of type Vsm_message
14 //
15 // Having only one message type allows us to avoid sending message ID on the wire with each message.
16 
17 // Generic message
18 message Vsm_message {
19 
20  // Uniquely identifies the connected device. Exception is register_peer payload when this field is zero.
21  // This id is generated when Register_device message is created.
22  // It defines the context (session) for all subsequent communications with the device (in both directions).
23  required uint32 device_id = 1;
24 
25  // Unique message id. This will be put into response if response is required. Can be omitted if response is not required.
26  // Request message_id if this message is a response to particular request.
27  optional uint32 message_id = 2;
28 
29  // Indicates that peer will wait for response on this command.
30  optional bool response_required = 3;
31 
32  // Used to detect duplicate connections between ucs and vsm.
33  // This must be the first message sent from ucs and VSM on new connection.
34  // In this case device_id==0 which means this message is for peer application not device.
35  // No device specific payloads can be present if device_id==0.
36  optional Register_peer register_peer = 4;
37 
38  optional Register_device register_device = 5;
39 
40  optional Unregister_device unregister_device = 6;
41 
42  repeated Device_command device_commands = 7;
43 
44  // If this field is present then this is a response to previously sent request.
45  // If message_id is present, too then it contains the message_id from the corresponding request.
46  optional Device_response device_response = 8;
47 
48  // Device can send this message any time it wants to report some info to ucs.
49  optional Device_status device_status = 9;
50 }
51 
52 // Used to tell the unique application ID to detect concurrent connections and for version compatibility.
53 message Register_peer {
54 
55  required uint32 peer_id = 1;
56 
57  // Type and version of peer.
58  // Application can use this information to detect the level of compatibility.
59  // It can decide to continue to use, close or ignore the connection.
60  optional Peer_type peer_type = 2;
61  optional uint32 version_minor = 3;
62  optional uint32 version_major = 4;
63  optional string version_build = 5;
64 
65  // Peer name
66  optional string name = 6;
67 }
68 
69 // Register various kinds of devices.
70 message Register_device {
71 
72  // begin_of_epoch is used to optimize space used for timestamp in each telemetry field.
73  // the absolute time is calculated as begin_of_epoch + timestamp.
74  // Milliseconds since 1970-01-01 00:00:00 UTC.
75  // This value is vehicle registration time. Thus UCS
76  // could show a warning about out of sync time between ucs and VSM if the value
77  // differs from current time a lot.
78  required uint64 begin_of_epoch = 1;
79 
80  // Vehicle, Adsb receiver, RTK base station, etc...
81  required Device_type type = 2;
82 
83  // User definable key-value pairs
84  repeated Property_field properties = 3;
85 
86  // flight controller, gimbal, cameras, etc...
87  repeated Register_subsystem subsystems = 4;
88 }
89 
90 // Invalidates the specified Vsm_message.device_id
91 // Presence of this payload means that device has disconnected and all its state should be dropped.
92 // Use this to drop any context established via Register_device message.
93 // Important: Automatically unregisters all subsystems registered under this device.
94 message Unregister_device {
95 }
96 
97 message Device_status {
98 
99  // place to put raw data received from vehicle or debug messages from VSM.
100  repeated string status_messages = 1;
101 
102  // Device telemetry
103  repeated Telemetry_field telemetry_fields = 2;
104 
105  // current command availability
106  repeated Command_availability command_availability = 3;
107 }
108 
109 message Device_response {
110 
111  // Response code. on previously sent request.
112  required Status_code code = 1;
113 
114  // array of values to create localized error string for given Status_code.
115  repeated string arguments = 2;
116 
117  // place to put raw data received from vehicle or debug messages from VSM.
118  optional string status = 3;
119 
120  // VSM generated mission ID which is later reported in telemetry as current_mission_id
121  // It is used to tell the server the validity of mission_command_map.
122  // Server should drop the mission map as soon as VSM reports different current_mission_id.
123  // Server must ignore the reported curent_command values until it gets a valid current_mission_id.
124  optional uint32 mission_id = 4;
125 
126  // Command mapping between mission uploaded to the vehicle and mission received by server.
127  // Server must keep this map tied to specific vehicle instance until vehicle
128  // explicitly reports current_mission_id different from this one.
129  // Server should use this map to map reported current_command only while VSM reports the same current_mission_id.
130  // I.e. server should keep the map but not use it if VSM reports current_mission_id==N/A.
131  repeated Mission_command_map mission_command_map = 5;
132 
133  // Used to report progress of a pending command.
134  // Peer can send this any number of times before sending final response.
135  // Range: [0..1]
136  optional float progress = 6;
137 }
138 
139 message Mission_command_map {
140 
141  // Current command ID reported by the VSM as current_command telemetry field.
142  required uint32 vehicle_command_id = 1;
143 
144  // Corresponding command index in mission_upload sub_commands array. 0-based.
145  required uint32 mission_command_idx = 2;
146 }
147 
148 message Device_command {
149 
150  // Command id (Must be from previously registered commands)
151  required uint32 command_id = 1;
152 
153  // list of command parameters.
154  repeated Parameter_field parameters = 2;
155 
156  // List of subcommands (E.g. mission items)
157  repeated Device_command sub_commands = 3;
158 }
159 
160 message Telemetry_field {
161 
162  // Session wide unique field id defined via Register_field message
163  required uint32 field_id = 1;
164 
165  // Time in ms this value was gathered since begin_of_epoch which set in Register_device message.
166  // NOTE: this value is calculated using system_clock and must not be assumed monotonic.
167  // It can have negative values if system_clock is turned back while VSM is running.
168  required sint64 ms_since_epoch = 2;
169 
170  required Field_value value = 3;
171 }
172 
173 message Parameter_field {
174 
175  // Unique field id defined via Register_field message
176  required uint32 field_id = 1;
177 
178  required Field_value value = 2;
179 }
180 
181 message Property_field {
182 
183  // parameter name used to send some value without registering first.
184  required string name = 1;
185 
186  required Field_value value = 2;
187 
188  // Specifies the value type.
189  required Field_semantic semantic = 3;
190 }
191 
192 message Field_value {
193 
194  // If this is present field value is one of supported "meta" values.
195  optional Meta_value meta_value = 1;
196 
197  // value holders for various regular field types.
198  optional sint64 int_value = 2;
199 
200  optional float float_value = 3;
201 
202  optional double double_value = 4;
203 
204  optional string string_value = 5;
205 
206  optional bool bool_value = 6;
207 
208  optional List_value list_value = 7;
209 }
210 
211 message List_value {
212 
213  repeated Field_value values = 1;
214 }
215 
216 
217 // VSM can enable/disable specific command at runtime
218 message Command_availability {
219 
220  // command_id
221  required uint32 id = 1;
222 
223  // capability is supported by vehicle
224  optional bool is_available = 2;
225 
226  // capability can be used on the vehicle, currently
227  optional bool is_enabled = 3;
228 }
229 
230 // VSM must send this message before it can be used or Command_availability can be sent.
231 message Register_command {
232 
233  // Name of command
234  required string name = 1;
235 
236  // Session specific id for name.
237  required uint32 id = 2;
238 
239  // parameters supported by command.
240  repeated Register_field parameters = 3;
241 
242  // this command is available as mission item
243  optional bool available_in_mission = 4;
244 }
245 
246 message Register_subsystem {
247 
248  // Type of subsystem
249  required Subsystem_type type = 1;
250 
251  // Subsystem properties
252  repeated Property_field properties = 2;
253 
254  // Telemetry fields supported by subsystem
255  repeated Register_field telemetry_fields = 3;
256 
257  // Commands supported by subsystem
258  repeated Register_command commands = 4;
259 }
260 
261 // Used to send definitions of vehicle supported parameters and telemetry fields to UCS
262 message Register_field {
263 
264  // Name of telemetry field.
265  required string name = 1;
266 
267  // Session specific field id.
268  required uint32 field_id = 2;
269 
270  // Required for any defined field. Specifies the value type.
271  required Field_semantic semantic = 3;
272 
273  // Default value to show in client.
274  // If min_value == max_value it means that parameter is not user changeable and should be set to default_value.
275  optional Field_value default_value = 4;
276 
277  // Minimum value of field
278  optional Field_value min_value = 5;
279 
280  // Maximum value of field
281  optional Field_value max_value = 6;
282 
283  // User defined enumeration when field_semantic == FIELD_SEMANTIC_ENUM.
284  repeated Field_enumeration enumeration = 7;
285 }
286 
287 // Used to send definitions of user-defined enumerations used in telemetry and parameters.
288 message Field_enumeration {
289 
290  // Value of enum field
291  // The value of id must be constant for the field it is defined for.
292  // I.e. it cannot be session specific. These values are saved directly in telemetry database.
293  required int32 id = 1;
294 
295  // Description of the value
296  required string description = 2;
297 }
T value
Stored value (in wire byte order).
Definition: endian.h:356

Protobuf enumerations

1 package ugcs.vsm.proto;
2 
3 option java_package = "com.ugcs.ucs.vsm.proto";
4 option java_outer_classname = "VsmDefinitionsProto";
5 
6 enum Peer_type {
7  PEER_TYPE_SERVER = 0;
8  PEER_TYPE_VSM = 1;
9  PEER_TYPE_VSM_ANDROID = 2;
10  PEER_TYPE_VSM_IOS = 3;
11 }
12 
13 // Response code sent by VSM to UCS
14 enum Status_code {
15  STATUS_OK = 0;
16  // Generic error
17  STATUS_FAILED = 1;
18  // Command is not supported
19  STATUS_INVALID_COMMAND = 2;
20  // Command parameters are invalid
21  // Cannot use STATUS_INVALID_PARAMETER because it clashes with define in winnt.h
22  STATUS_INVALID_PARAM = 3;
23  // Invalid session id
24  STATUS_INVALID_SESSION_ID = 4;
25  // Used to notify peer that command is in progress.
26  STATUS_IN_PROGRESS = 5;
27 }
28 
29 // Used in property "vehicle_type" for Device of type DEVICE_TYPE_VEHICLE
30 enum Vehicle_type {
31  VEHICLE_TYPE_GROUND = 0;
32  VEHICLE_TYPE_FIXED_WING = 1;
33  VEHICLE_TYPE_MULTICOPTER = 2;
34  VEHICLE_TYPE_HELICOPTER = 3;
35  VEHICLE_TYPE_VTOL = 4; // Vehicle is capable of both fixed wing and multicopter style of flight.
36 }
37 
38 enum Meta_value {
39  META_VALUE_NA = 0;
40 }
41 
42 // Built in subsystem types natively supported by UgCS. Used in Register_subsystem.type field.
43 // Each subsystem can register a arbitrary set of properties, commands and telemetry.
44 // Each subsystem has a set of properties, commands and telemetry fields which are supported natively by UgCS.
45 // Refer to UCS-VSM protocol documentation.
46 enum Subsystem_type {
47  SUBSYSTEM_TYPE_USER = 0; // Can be used for any other subsystem not mentioned below.
48  SUBSYSTEM_TYPE_FLIGHT_CONTROLLER = 1;
49  SUBSYSTEM_TYPE_GIMBAL = 2;
50  SUBSYSTEM_TYPE_CAMERA = 3;
51  SUBSYSTEM_TYPE_ADSB_TRANSPONDER = 4;
52  SUBSYSTEM_TYPE_WINCH = 5; // Airmast winch
53  SUBSYSTEM_TYPE_HANGAR = 6;
54  SUBSYSTEM_TYPE_GPR = 7; // Ground penetrating radar
55  SUBSYSTEM_TYPE_ADSB_RECEIVER = 8; // Onboard adsb receiver for vehicle
56  SUBSYSTEM_TYPE_ADSB_VEHICLE = 9; // Used to report telemetry for devices of type DEVICE_TYPE_ADSB_VEHICLE
57  SUBSYSTEM_TYPE_WEATHER_STATION = 10;
58 }
59 
60 // Built in device types natively supported by UgCS. Used in Register_device.type field.
61 // Each device can register a arbitrary sets of properties and subsystems.
62 // Some device types have properties which are supported natively by UgCS. Some of them are required.
63 // Refer to UCS-VSM protocol documentation.
64 enum Device_type {
65 
66  // Real vehicle which can be controlled by UgCS
67  DEVICE_TYPE_VEHICLE = 0;
68 
69  // Device capable of executing vehicle specific commands but does not represent real vehicle.
70  // Used to provide vehicle specific functionality without an actual vehicle.
71  // The native route file is returned via Device_response.status field.
72  DEVICE_TYPE_VEHICLE_COMMAND_PROCESSOR = 1;
73 
74  // Adsb receiver connected directly to VSM
75  DEVICE_TYPE_ADSB_RECEIVER = 2;
76 
77  // Vehicle reported by ADSB receiver with its own telemetry
78  DEVICE_TYPE_ADSB_VEHICLE = 3;
79 
80  // Device capable of sending RTK
81  DEVICE_TYPE_RTK_BASE_STATION = 4;
82 }
83 
84 // Built in telemetry enums
85 
86 enum Gps_fix_type {
87  GPS_FIX_TYPE_NONE = 0;
88  GPS_FIX_TYPE_2D = 1;
89  GPS_FIX_TYPE_3D = 2;
90  GPS_FIX_TYPE_DIFF = 3;
91  GPS_FIX_TYPE_RTK_FIXED = 4;
92  GPS_FIX_TYPE_RTK_FLOAT = 5;
93 }
94 
95 enum Control_mode {
96  CONTROL_MODE_MANUAL = 0;
97  CONTROL_MODE_AUTO = 1;
98  CONTROL_MODE_CLICK_GO = 2;
99  CONTROL_MODE_JOYSTICK = 3;
100  CONTROL_MODE_ACTIVE_TRACK = 4;
101 }
102 
103 enum Flight_mode {
104  FLIGHT_MODE_WAYPOINTS = 0; // Vehicle is navigating mission waypoints
105  FLIGHT_MODE_RTH = 1; // Vehicle is returning home
106  FLIGHT_MODE_LAND = 2; // Vehicle is landing
107  FLIGHT_MODE_TAKEOFF = 3; // Vehicle is taking off
108  FLIGHT_MODE_HOLD = 4; // Vehicle is holding position.
109 }
110 
111 enum Autopilot_status {
112  AUTOPILOT_STATUS_STANDBY = 0; // Vehicle is standby, grounded
113  AUTOPILOT_STATUS_ACTIVE = 1; // Vehicle is active, airborne
114  AUTOPILOT_STATUS_CRITICAL = 2; // Vehicle is in critical state, failsafe is on
115  AUTOPILOT_STATUS_EMERGENCY = 3; // Vehicle is in emergency or crashed
116 }
117 
118 enum Dock_part_status {
119  DOCK_PART_OPENED = 0;
120  DOCK_PART_CLOSED = 1;
121  DOCK_PART_OPENING = 2;
122  DOCK_PART_CLOSING = 3;
123 }
124 
125 // These types match the Type Code/Emitter Category byte of ADSB message.
126 // Do not modify the values!
127 enum Adsb_emitter_type {
128  // Category A subtypes
129  ADSB_EMITTER_TYPE_NO_INFO_A = 0;
130  ADSB_EMITTER_TYPE_LIGHT = 1;
131  ADSB_EMITTER_TYPE_SMALL = 2;
132  ADSB_EMITTER_TYPE_LARGE = 3;
133  ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4;
134  ADSB_EMITTER_TYPE_HEAVY = 5;
135  ADSB_EMITTER_TYPE_HIGH_PERFORMANCE = 6;
136  ADSB_EMITTER_TYPE_ROTORCRAFT = 7;
137  // Category B subtypes
138  ADSB_EMITTER_TYPE_NO_INFO_B = 8;
139  ADSB_EMITTER_TYPE_GLIDER_SAILPLANE = 9;
140  ADSB_EMITTER_TYPE_LIGHTER_THAN_AIR = 10;
141  ADSB_EMITTER_TYPE_SKYDIVER = 11;
142  ADSB_EMITTER_TYPE_ULTRALIGHT_PARAGLIDER = 12;
143  ADSB_EMITTER_TYPE_RESERVED_13 = 13;
144  ADSB_EMITTER_TYPE_UAV = 14;
145  ADSB_EMITTER_TYPE_SPACE_TRANS_ATMOSPHERIC = 15;
146  // Category C subtypes
147  ADSB_EMITTER_TYPE_NO_INFO_C = 16;
148  ADSB_EMITTER_TYPE_SURFACE_EMERGENCY = 17;
149  ADSB_EMITTER_TYPE_SURFACE_SERVICE = 18;
150  ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19;
151  ADSB_EMITTER_TYPE_CLUSTER_OBSTACLE = 20;
152  ADSB_EMITTER_TYPE_LINE_OBSTACLE = 21;
153  ADSB_EMITTER_TYPE_RESERVED_22 = 22;
154  ADSB_EMITTER_TYPE_RESERVED_23 = 23;
155  // Category D subtypes
156  ADSB_EMITTER_TYPE_NO_INFO_D = 24;
157  ADSB_EMITTER_TYPE_RESERVED_25 = 25;
158  ADSB_EMITTER_TYPE_RESERVED_26 = 26;
159  ADSB_EMITTER_TYPE_RESERVED_27 = 27;
160  ADSB_EMITTER_TYPE_RESERVED_28 = 28;
161  ADSB_EMITTER_TYPE_RESERVED_29 = 29;
162  ADSB_EMITTER_TYPE_RESERVED_30 = 30;
163  ADSB_EMITTER_TYPE_RESERVED_31 = 31;
164 }
165 
166 enum Adsb_altitude_source {
167  ADSB_ALTITUDE_SOURCE_BARO = 0;
168  ADSB_ALTITUDE_SOURCE_GNSS = 1;
169 }
170 
171 // Built in command parameter enums
172 
173 enum Adsb_mode {
174  ADSB_MODE_OFF = 0;
175  ADSB_MODE_STBY = 1;
176  ADSB_MODE_ON = 2;
177  ADSB_MODE_ALT = 3;
178 }
179 
180 enum Failsafe_action {
181  FAILSAFE_ACTION_RTH = 0;
182  FAILSAFE_ACTION_LAND = 1;
183  FAILSAFE_ACTION_WAIT = 2;
184  FAILSAFE_ACTION_CONTINUE = 3;
185 }
186 
187 // Action after RTH
188 enum Rth_action {
189  RTH_ACTION_LAND = 0;
190  RTH_ACTION_WAIT = 1;
191 }
192 
193 enum Camera_power_state {
194  CAMERA_POWER_STATE_ON = 0;
195  CAMERA_POWER_STATE_OFF = 1;
196  CAMERA_POWER_STATE_TOGGLE = 2;
197 }
198 
199 enum Camera_video_source {
200  CAMERA_VIDEO_SOURCE_PRIMARY = 0;
201  CAMERA_VIDEO_SOURCE_SECONDARY = 1;
202 }
203 
204 enum Camera_command_trigger_state {
205  CAMERA_COMMAND_TRIGGER_STATE_SINGLE_SHOT = 0;
206  CAMERA_COMMAND_TRIGGER_STATE_VIDEO_START = 1;
207  CAMERA_COMMAND_TRIGGER_STATE_VIDEO_STOP = 2;
208  CAMERA_COMMAND_TRIGGER_STATE_VIDEO_TOGGLE = 3;
209 }
210 
211 enum Camera_mission_trigger_state {
212  CAMERA_MISSION_TRIGGER_STATE_ON = 0;
213  CAMERA_MISSION_TRIGGER_STATE_OFF = 1;
214  CAMERA_MISSION_TRIGGER_STATE_SINGLE_PHOTO = 2;
215  CAMERA_MISSION_TRIGGER_STATE_SERIAL_PHOTO = 3;
216 }
217 
218 enum Panorama_mode {
219  PANORAMA_MODE_PHOTO = 0;
220  PANORAMA_MODE_VIDEO = 1;
221 }
222 
223 enum Turn_type {
224  TURN_TYPE_STOP_AND_TURN = 0;
225  TURN_TYPE_STRAIGHT = 1;
226  TURN_TYPE_SPLINE = 2;
227  TURN_TYPE_BANK_TURN = 3;
228 }
229 
230 // Field/parameter type (semantic)
231 enum Field_semantic {
232 
233  // Used internally.
234  FIELD_SEMANTIC_DEFAULT = 0;
235  // Description, Units, Data type, Range, Origin, Positive direction
236 
237  // Geodetic latitude, radians, double, -Pi/2..Pi/2, equator, north
238  FIELD_SEMANTIC_LATITUDE = 1;
239 
240  // Geodetic longitude, radians, double, -Pi..Pi, Greenwich meridian, East
241  FIELD_SEMANTIC_LONGITUDE = 2;
242 
243  // WGS84 altitude, meters, numeric
244  FIELD_SEMANTIC_ALTITUDE_AMSL = 3;
245 
246  // Altitude AGL, meters, numeric
247  FIELD_SEMANTIC_ALTITUDE_AGL = 4;
248 
249  // Raw altitude reading from vehicle. Typically above home location., meters, numeric
250  FIELD_SEMANTIC_ALTITUDE_RAW = 5;
251 
252  // Vehicle nose angle, radians, numeric, 0..2Pi, North, East
253  FIELD_SEMANTIC_HEADING = 6;
254 
255  // Battery voltage, volts, numeric
256  FIELD_SEMANTIC_VOLTAGE = 8;
257 
258  // Air speed, m/s, numeric
259  FIELD_SEMANTIC_AIR_SPEED = 9;
260 
261  // Ground speed, m/s, numeric
262  FIELD_SEMANTIC_GROUND_SPEED = 10;
263 
264  // Climb speed, m/s, numeric
265  FIELD_SEMANTIC_VERTICAL_SPEED = 11;
266 
267  // GNSS satellite count, numeric
268  FIELD_SEMANTIC_SATELLITE_COUNT = 12;
269 
270  // Fix type, numeric, enum Gps_fix_type
271  FIELD_SEMANTIC_GPS_FIX_TYPE = 13;
272 
273  // Roll angle, radians, numeric, -Pi..Pi, Horizon, right
274  FIELD_SEMANTIC_ROLL = 14;
275 
276  // Pitch angle, radians, numeric, -Pi..Pi, Horizon, up
277  FIELD_SEMANTIC_PITCH = 15;
278 
279  // Yaw angle, radians, numeric, 0..2Pi, unspecified, East
280  FIELD_SEMANTIC_YAW = 16;
281 
282  // RC link quality, , numeric, [0..1]
283  FIELD_SEMANTIC_RC_LINK_QUALITY = 17;
284 
285  // Battery current, amperes, numeric
286  FIELD_SEMANTIC_CURRENT = 18;
287 
288  // Groundstation datalink quality, , numeric, [0..1]
289  FIELD_SEMANTIC_GCS_LINK_QUALITY = 19;
290 
291  // Camera Field-of-view horizontal angle, radians, numeric, 0..Pi
292  FIELD_SEMANTIC_FOV_H = 23;
293 
294  // Camera Field-of-view veritcal angle, radians, numeric, 0..Pi
295  FIELD_SEMANTIC_FOV_V = 24;
296 
297  // Current control mode, int, enum Control_mode
298  FIELD_SEMANTIC_CONTROL_MODE = 26;
299 
300  // Terrain elevation AMSL, meters, numeric
301  FIELD_SEMANTIC_GROUND_ELEVATION = 27;
302 
303  // Waypoint acceptance radius, meters, numeric
304  FIELD_SEMANTIC_ACCEPTANCE_RADIUS = 28;
305 
306  // Waypoint loiter radius, meters, numeric
307  FIELD_SEMANTIC_LOITER_RADIUS = 29;
308 
309  // ADSB icao code, 24 bits, numeric, represented as hex
310  FIELD_SEMANTIC_ICAO = 30;
311 
312  // ADSB transponder mode, enum, Adsb_mode, numeric
313  FIELD_SEMANTIC_ADSB_MODE = 31;
314 
315  // ADSB squawk code, 12 bits, numeric, represented as octal
316  FIELD_SEMANTIC_SQUAWK = 32;
317 
318  // Time interval, milliseconds, numeric, represented as time
319  FIELD_SEMANTIC_MILLISECONDS = 33;
320 
321  // Battery capacity percentage, numeric, [0..1]
322  FIELD_SEMANTIC_CAPACITY_LEVEL = 34;
323 
324  // Vehicle flight mode, enum, Flight_mode
325  FIELD_SEMANTIC_FLIGHT_MODE = 35;
326 
327  // Autopilot status, enum
328  FIELD_SEMANTIC_AUTOPILOT_STATUS = 36;
329 
330  // Time since Unix epoch (1970-01-01T00:00:00Z), int64, milliseconds
331  FIELD_SEMANTIC_TIMESTAMP = 37;
332 
333  // Temperature, celsius, numeric
334  FIELD_SEMANTIC_TEMPERATURE = 38;
335 
336  // Humidity, percentage, numeric, [0..100]
337  FIELD_SEMANTIC_HUMIDITY = 39;
338 
339  // Precipitation, mm/hour, numeric, [0,2..150]
340  FIELD_SEMANTIC_PRECIPITATION = 42;
341 
342 
343  // Generic types used for user-defined telemetry fields.
344 
345  // Value can be of any type. Field can hold any one of supported values.
346  // VSM will determine the value type depending on which value is present in Field_value.
347  // The order is: double, int, string, bool, list.
348  // For example, if field contains both int and string values then string value will be ignored.
349  FIELD_SEMANTIC_ANY = 100;
350 
351  // Generic number type. Exact type (float, int, etc...) will be detected automatically
352  FIELD_SEMANTIC_NUMERIC = 101;
353 
354  // boolean
355  FIELD_SEMANTIC_BOOL = 104;
356 
357  // utf8 string
358  FIELD_SEMANTIC_STRING = 105;
359 
360  // enum. Possible values defined via Register_enumeration message.
361  FIELD_SEMANTIC_ENUM = 106;
362 
363  // list.
364  FIELD_SEMANTIC_LIST = 107;
365 }