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

Protobuf enumerations

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