JaiaBot  1.19.0
JaiaBot micro-AUV software
health.proto
Go to the documentation of this file.
1 syntax = "proto2";
2 
3 import "dccl/option_extensions.proto";
4 import "goby/middleware/protobuf/coroner.proto";
5 import "jaiabot/messages/option_extensions.proto";
6 
7 package jaiabot.protobuf;
8 
9 enum Error
10 {
11  // from jaiabot_fusion
12  ERROR__TOO_MANY_ERRORS_TO_REPORT_ALL = 0
13  [(jaia.ev).rest_api.presence = GUARANTEED];
14 
15  // Directly from systemd
16  ERROR__FAILED__UNKNOWN = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
17  ERROR__FAILED__GOBYD = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
18  ERROR__FAILED__GOBY_LIAISON = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
19  ERROR__FAILED__GOBY_GPS = 4 [(jaia.ev).rest_api.presence = GUARANTEED];
20  ERROR__FAILED__GOBY_LOGGER = 5 [(jaia.ev).rest_api.presence = GUARANTEED];
21  ERROR__FAILED__GOBY_CORONER = 6 [(jaia.ev).rest_api.presence = GUARANTEED];
22  ERROR__FAILED__GOBY_MOOS_GATEWAY = 7
23  [(jaia.ev).rest_api.presence = GUARANTEED];
24  ERROR__FAILED__JAIABOT_HEALTH = 8
25  [(jaia.ev).rest_api.presence = GUARANTEED];
26  ERROR__FAILED__JAIABOT_METADATA = 9
27  [(jaia.ev).rest_api.presence = GUARANTEED];
28  ERROR__FAILED__JAIABOT_HUB_MANAGER = 10
29  [(jaia.ev).rest_api.presence = GUARANTEED];
30  ERROR__FAILED__JAIABOT_WEB_PORTAL = 11
31  [(jaia.ev).rest_api.presence = GUARANTEED];
32  ERROR__FAILED__JAIABOT_FUSION = 12
33  [(jaia.ev).rest_api.presence = GUARANTEED];
34  ERROR__FAILED__JAIABOT_MISSION_MANAGER = 13
35  [(jaia.ev).rest_api.presence = GUARANTEED];
36  ERROR__FAILED__JAIABOT_PID_CONTROL = 14
37  [(jaia.ev).rest_api.presence = GUARANTEED];
38  ERROR__FAILED__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER = 15
39  [(jaia.ev).rest_api.presence = GUARANTEED];
40  ERROR__FAILED__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER = 16
41  [(jaia.ev).rest_api.presence = GUARANTEED];
42  ERROR__FAILED__JAIABOT_ADAFRUIT_BNO055_DRIVER = 17
43  [(jaia.ev).rest_api.presence = GUARANTEED];
44  ERROR__FAILED__JAIABOT_DRIVER_ARDUINO = 18
45  [(jaia.ev).rest_api.presence = GUARANTEED];
46  ERROR__FAILED__JAIABOT_ENGINEERING = 19
47  [(jaia.ev).rest_api.presence = GUARANTEED];
48  ERROR__FAILED__MOOS_MOOSDB = 20 [(jaia.ev).rest_api.presence = GUARANTEED];
49  ERROR__FAILED__MOOS_PHELMIVP = 21
50  [(jaia.ev).rest_api.presence = GUARANTEED];
51  ERROR__FAILED__MOOS_UPROCESSWATCH = 22
52  [(jaia.ev).rest_api.presence = GUARANTEED];
53  ERROR__FAILED__MOOS_PNODEREPORTER = 23
54  [(jaia.ev).rest_api.presence = GUARANTEED];
55  ERROR__FAILED__PYTHON_JAIABOT_WEB_APP = 24
56  [(jaia.ev).rest_api.presence = GUARANTEED];
57  ERROR__FAILED__PYTHON_JAIABOT_IMU = 25
58  [(jaia.ev).rest_api.presence = GUARANTEED];
59  ERROR__FAILED__PYTHON_JAIABOT_PRESSURE_SENSOR = 26
60  [(jaia.ev).rest_api.presence = GUARANTEED];
61  ERROR__FAILED__PYTHON_JAIABOT_AS_EZO_EC = 27
62  [(jaia.ev).rest_api.presence = GUARANTEED];
63  ERROR__FAILED__JAIABOT_LOG_CONVERTER = 28
64  [(jaia.ev).rest_api.presence = GUARANTEED];
65  ERROR__FAILED__JAIABOT_DATA_VISION = 29
66  [(jaia.ev).rest_api.presence = GUARANTEED];
67  ERROR__FAILED__JAIABOT_SIMULATOR = 30
68  [(jaia.ev).rest_api.presence = GUARANTEED];
69  ERROR__FAILED__MOOS_SIM_MOOSDB = 31
70  [(jaia.ev).rest_api.presence = GUARANTEED];
71  ERROR__FAILED__MOOS_SIM_USIMMARINE = 32
72  [(jaia.ev).rest_api.presence = GUARANTEED];
73  ERROR__FAILED__GOBY_INTERVEHICLE_PORTAL = 33
74  [(jaia.ev).rest_api.presence = GUARANTEED];
75  ERROR__FAILED__JAIABOT_ADAFRUIT_BNO085_DRIVER = 34
76  [(jaia.ev).rest_api.presence = GUARANTEED];
77  ERROR__FAILED__JAIABOT_ECHO_DRIVER = 35
78  [(jaia.ev).rest_api.presence = GUARANTEED];
79  ERROR__FAILED__PYTHON_JAIABOT_ECHO = 36
80  [(jaia.ev).rest_api.presence = GUARANTEED];
81  ERROR__FAILED__JAIABOT_TSYS01_TEMPERATURE_SENSOR_DRIVER = 37
82  [(jaia.ev).rest_api.presence = GUARANTEED];
83  ERROR__FAILED__PYTHON_JAIABOT_TSYS01_TEMPERATURE_SENSOR_DRIVER = 38
84  [(jaia.ev).rest_api.presence = GUARANTEED];
85  ERROR__FAILED__PYTHON_JAIABOT_MOTOR_LISTENER = 39
86  [(jaia.ev).rest_api.presence = GUARANTEED];
87 
88  // from goby_coroner
89  // must be "ERROR__NOT_RESPONDING__" + uppercase(application name)
90  ERROR__NOT_RESPONDING__UNKNOWN_APP = 100
91  [(jaia.ev).rest_api.presence = GUARANTEED];
92  ERROR__NOT_RESPONDING__GOBYD = 101
93  [(jaia.ev).rest_api.presence = GUARANTEED];
94  ERROR__NOT_RESPONDING__GOBY_LIAISON = 102
95  [(jaia.ev).rest_api.presence = GUARANTEED];
96  ERROR__NOT_RESPONDING__GOBY_GPS = 103
97  [(jaia.ev).rest_api.presence = GUARANTEED];
98  ERROR__NOT_RESPONDING__GOBY_LOGGER = 104
99  [(jaia.ev).rest_api.presence = GUARANTEED];
100  ERROR__NOT_RESPONDING__GOBY_CORONER = 105
101  [(jaia.ev).rest_api.presence = GUARANTEED];
102  ERROR__NOT_RESPONDING__JAIABOT_HEALTH = 106
103  [(jaia.ev).rest_api.presence = GUARANTEED];
104  ERROR__NOT_RESPONDING__JAIABOT_METADATA = 107
105  [(jaia.ev).rest_api.presence = GUARANTEED];
106  ERROR__NOT_RESPONDING__JAIABOT_HUB_MANAGER = 108
107  [(jaia.ev).rest_api.presence = GUARANTEED];
108  ERROR__NOT_RESPONDING__JAIABOT_WEB_PORTAL = 109
109  [(jaia.ev).rest_api.presence = GUARANTEED];
110  ERROR__NOT_RESPONDING__JAIABOT_FUSION = 110
111  [(jaia.ev).rest_api.presence = GUARANTEED];
112  ERROR__NOT_RESPONDING__GOBY_MOOS_GATEWAY = 111
113  [(jaia.ev).rest_api.presence = GUARANTEED];
114  ERROR__NOT_RESPONDING__JAIABOT_MISSION_MANAGER = 112
115  [(jaia.ev).rest_api.presence = GUARANTEED];
116  ERROR__NOT_RESPONDING__JAIABOT_PID_CONTROL = 113
117  [(jaia.ev).rest_api.presence = GUARANTEED];
118  ERROR__NOT_RESPONDING__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER = 114
119  [(jaia.ev).rest_api.presence = GUARANTEED];
120  ERROR__NOT_RESPONDING__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER = 115
121  [(jaia.ev).rest_api.presence = GUARANTEED];
122  ERROR__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO055_DRIVER = 116
123  [(jaia.ev).rest_api.presence = GUARANTEED];
124  ERROR__NOT_RESPONDING__JAIABOT_DRIVER_ARDUINO = 117
125  [(jaia.ev).rest_api.presence = GUARANTEED];
126  ERROR__NOT_RESPONDING__JAIABOT_ENGINEERING = 118
127  [(jaia.ev).rest_api.presence = GUARANTEED];
128  ERROR__NOT_RESPONDING__JAIABOT_SINGLE_THREAD_PATTERN = 119
129  [(jaia.ev).rest_api.presence = GUARANTEED];
130  ERROR__NOT_RESPONDING__JAIABOT_MULTI_THREAD_PATTERN = 120
131  [(jaia.ev).rest_api.presence = GUARANTEED];
132  ERROR__NOT_RESPONDING__JAIABOT_SIMULATOR = 121
133  [(jaia.ev).rest_api.presence = GUARANTEED];
134  ERROR__NOT_RESPONDING__GOBY_INTERVEHICLE_PORTAL = 122
135  [(jaia.ev).rest_api.presence = GUARANTEED];
136  ERROR__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO085_DRIVER = 123
137  [(jaia.ev).rest_api.presence = GUARANTEED];
138  ERROR__NOT_RESPONDING__JAIABOT_ECHO_DRIVER = 124
139  [(jaia.ev).rest_api.presence = GUARANTEED];
140  ERROR__NOT_RESPONDING__JAIABOT_TSYS01_TEMPERATURE_SENSOR_DRIVER = 125
141  [(jaia.ev).rest_api.presence = GUARANTEED];
142 
143  // from jaiabot_fusion
144  ERROR__MISSING_DATA__GPS_FIX = 200
145  [(jaia.ev).rest_api.presence = GUARANTEED];
146  ERROR__MISSING_DATA__GPS_POSITION = 201
147  [(jaia.ev).rest_api.presence = GUARANTEED];
148  ERROR__MISSING_DATA__PRESSURE = 210
149  [(jaia.ev).rest_api.presence = GUARANTEED];
150  ERROR__MISSING_DATA__HEADING = 212
151  [(jaia.ev).rest_api.presence = GUARANTEED];
152  ERROR__MISSING_DATA__SPEED = 215 [(jaia.ev).rest_api.presence = GUARANTEED];
153  ERROR__MISSING_DATA__COURSE = 216
154  [(jaia.ev).rest_api.presence = GUARANTEED];
155  ERROR__MISSING_DATA__CALIBRATION_SYS = 217
156  [(jaia.ev).rest_api.presence = GUARANTEED];
157  ERROR__MISSING_DATA__CALIBRATION_GYRO = 218
158  [(jaia.ev).rest_api.presence = GUARANTEED];
159  ERROR__MISSING_DATA__CALIBRATION_ACCEL = 219
160  [(jaia.ev).rest_api.presence = GUARANTEED];
161  ERROR__MISSING_DATA__CALIBRATION_MAG = 220
162  [(jaia.ev).rest_api.presence = GUARANTEED];
163  ERROR__NOT_CALIBRATED_SYS = 221 [(jaia.ev).rest_api.presence = GUARANTEED];
164  ERROR__NOT_CALIBRATED_GYRO = 222 [(jaia.ev).rest_api.presence = GUARANTEED];
165  ERROR__NOT_CALIBRATED_ACCEL = 223
166  [(jaia.ev).rest_api.presence = GUARANTEED];
167  ERROR__NOT_CALIBRATED_MAG = 224 [(jaia.ev).rest_api.presence = GUARANTEED];
168  ERROR__NOT_CALIBRATED_IMU = 225 [(jaia.ev).rest_api.presence = GUARANTEED];
169 
170  // TODO: IMPLEMENT
171  // from xbee driver
172  ERROR__COMMS__NO_XBEE = 300;
173 
174  // from goby_moos_gateway
175  ERROR__MOOS__HELMIVP_STATE_NOT_DRIVE = 400
176  [(jaia.ev).rest_api.presence = GUARANTEED];
177  ERROR__MOOS__HELMIVP_NO_DESIRED_DATA = 401
178  [(jaia.ev).rest_api.presence = GUARANTEED];
179  ERROR__MOOS__NO_DATA = 402 [(jaia.ev).rest_api.presence = GUARANTEED];
180 
181  // from jaiabot_health
182  ERROR__SYSTEM__CANNOT_READ_MEMINFO = 500
183  [(jaia.ev).rest_api.presence = GUARANTEED];
184  ERROR__SYSTEM__RAM_SPACE_CRITICAL = 501
185  [(jaia.ev).rest_api.presence = GUARANTEED];
186 
187  ERROR__SYSTEM__CANNOT_READ_SYSINFO = 502
188  [(jaia.ev).rest_api.presence = GUARANTEED];
189  ERROR__SYSTEM__CPU_LOAD_FACTOR_CRITICAL = 503
190  [(jaia.ev).rest_api.presence = GUARANTEED];
191 
192  ERROR__SYSTEM__CANNOT_READ_DISK_USAGE = 504
193  [(jaia.ev).rest_api.presence = GUARANTEED];
194  ERROR__SYSTEM__ROOTFS_DISK_SPACE_CRITICAL = 505
195  [(jaia.ev).rest_api.presence = GUARANTEED];
196  ERROR__SYSTEM__DATA_DISK_SPACE_CRITICAL = 506
197  [(jaia.ev).rest_api.presence = GUARANTEED];
198 
199  ERROR__SYSTEM__NTP_PEERS_QUERY_FAILED = 510
200  [(jaia.ev).rest_api.presence = GUARANTEED];
201  ERROR__SYSTEM__NTP_STATUS_QUERY_FAILED = 511
202  [(jaia.ev).rest_api.presence = GUARANTEED];
203 
204  ERROR__VEHICLE__VERY_LOW_BATTERY = 600
205  [(jaia.ev).rest_api.presence = GUARANTEED];
206  ERROR__VEHICLE__CRITICALLY_LOW_BATTERY = 601
207  [(jaia.ev).rest_api.presence = GUARANTEED];
208  ERROR__VEHICLE__MISSING_DATA_BATTERY = 602
209  [(jaia.ev).rest_api.presence = GUARANTEED];
210 
211  // arduino driver
212  ERROR__VERSION__MISMATCH_ARDUINO = 700
213  [(jaia.ev).rest_api.presence = GUARANTEED];
214  ERROR__MISSING_DATA__ARDUINO_REPORT = 701
215  [(jaia.ev).rest_api.presence = GUARANTEED];
216  ERROR__VERSION__MISMATCH_INTERVEHICLE__UPGRADE_HUB = 702 [
217  (jaia.ev).rest_api.presence = GUARANTEED
218  ]; // INTERVEHICLE_API_VERSION_mismatch - hub version < bot_version
219  ERROR__VERSION__MISMATCH_INTERVEHICLE__UPGRADE_BOT = 703 [
220  (jaia.ev).rest_api.presence = GUARANTEED
221  ]; // INTERVEHICLE_API_VERSION_mismatch - hub_version > bot_version
222  ERROR__ARDUINO_CONNECTION_FAILED = 704
223  [(jaia.ev).rest_api.presence = GUARANTEED];
224 }
225 
226 enum Warning
227 {
228  // from jaiabot_fusion
229  WARNING__TOO_MANY_WARNINGS_TO_REPORT_ALL = 0
230  [(jaia.ev).rest_api.presence = GUARANTEED];
231 
232  // from jaiabot_coroner
233  WARNING__NOT_RESPONDING__UNKNOWN_APP = 100
234  [(jaia.ev).rest_api.presence = GUARANTEED];
235  WARNING__NOT_RESPONDING__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER = 101
236  [(jaia.ev).rest_api.presence = GUARANTEED];
237  WARNING__NOT_RESPONDING__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER = 102
238  [(jaia.ev).rest_api.presence = GUARANTEED];
239  WARNING__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO055_DRIVER = 103
240  [(jaia.ev).rest_api.presence = GUARANTEED];
241  WARNING__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO085_DRIVER = 104
242  [(jaia.ev).rest_api.presence = GUARANTEED];
243  WARNING__NOT_RESPONDING__JAIABOT_ECHO_DRIVER = 105
244  [(jaia.ev).rest_api.presence = GUARANTEED];
245  WARNING__NOT_RESPONDING__JAIABOT_TSYS01_TEMPERATURE_SENSOR_DRIVER = 106
246  [(jaia.ev).rest_api.presence = GUARANTEED];
247 
248  // from jaiabot_fusion
249  WARNING__MISSING_DATA__PITCH = 200
250  [(jaia.ev).rest_api.presence = GUARANTEED];
251  WARNING__MISSING_DATA__ROLL = 201
252  [(jaia.ev).rest_api.presence = GUARANTEED];
253  WARNING__MISSING_DATA__TEMPERATURE = 202
254  [(jaia.ev).rest_api.presence = GUARANTEED];
255  WARNING__MISSING_DATA__COURSE = 216
256  [(jaia.ev).rest_api.presence = GUARANTEED];
257  WARNING__NOT_CALIBRATED_SYS = 221
258  [(jaia.ev).rest_api.presence = GUARANTEED];
259  WARNING__IMU_ISSUE = 222 [(jaia.ev).rest_api.presence = GUARANTEED];
260 
261  // TODO: IMPLEMENT
262  WARNING__TEMPERATURE__ARDUINO_TOO_HIGH = 210
263  [(jaia.ev).rest_api.presence = GUARANTEED];
264  WARNING__TEMPERATURE__LINUX_TOO_HIGH = 211
265  [(jaia.ev).rest_api.presence = GUARANTEED];
266 
267  // TODO: IMPLEMENT
268  // from xbee driver
269  WARNING__COMMS_LOW_SIGNAL_STRENGTH = 300
270  [(jaia.ev).rest_api.presence = GUARANTEED];
271 
272  // from jaiabot_health
273  WARNING__VEHICLE__LOW_BATTERY = 400
274  [(jaia.ev).rest_api.presence = GUARANTEED];
275 
276  WARNING__SYSTEM__NTP_NOT_SYNCHRONIZED = 500
277  [(jaia.ev).rest_api.presence = GUARANTEED];
278  WARNING__SYSTEM__NTP_OFFSET_HIGH = 501
279  [(jaia.ev).rest_api.presence = GUARANTEED];
280  WARNING__SYSTEM__NTP_JITTER_HIGH = 502
281  [(jaia.ev).rest_api.presence = GUARANTEED];
282  WARNING__SYSTEM__RAM_SPACE_LOW = 503
283  [(jaia.ev).rest_api.presence = GUARANTEED];
284  WARNING__SYSTEM__CPU_LOAD_FACTOR_HIGH = 504
285  [(jaia.ev).rest_api.presence = GUARANTEED];
286  WARNING__SYSTEM__ROOTFS_DISK_SPACE_LOW = 505
287  [(jaia.ev).rest_api.presence = GUARANTEED];
288  WARNING__SYSTEM__DATA_DISK_SPACE_LOW = 506
289  [(jaia.ev).rest_api.presence = GUARANTEED];
290 
291  // from Motor Status Thread
292  WARNING__NOT_RESPONDING__JAIABOT_RPM_LISTENER = 600
293  [(jaia.ev).rest_api.presence = GUARANTEED];
294  WARNING__NOT_RESPONDING__JAIABOT_ARDUINO_MOTOR_TEMP = 601
295  [(jaia.ev).rest_api.presence = GUARANTEED];
296 
297  // from jaiabot_mission_manager
298  WARNING__MISSION__INFEASIBLE_MISSION__TRANSIT_MUST_HAVE_A_GOAL = 700
299  [(jaia.ev).rest_api.presence = GUARANTEED];
300  WARNING__MISSION__INFEASIBLE_MISSION__TRANSIT_CANNOT_RECOVER_AT_FINAL_GOAL_WITHOUT_A_GOAL =
301  701 [(jaia.ev).rest_api.presence = GUARANTEED];
302  WARNING__MISSION__INFEASIBLE_MISSION__MUST_HAVE_RECOVERY_LOCATION_IF_NOT_RECOVERING_AT_FINAL_GOAL =
303  702 [(jaia.ev).rest_api.presence = GUARANTEED];
304  WARNING__MISSION__INFEASIBLE_MISSION__MINIMUM_BOTTOM_DEPTH_REACHED = 703
305  [(jaia.ev).rest_api.presence = GUARANTEED];
306  WARNING__MISSION__INFEASIBLE_MISSION__GOAL_DESIRED_DEPTH_EXCEEDED_MAX = 704
307  [(jaia.ev).rest_api.presence = GUARANTEED];
308  WARNING__VEHICLE__NO_FORWARD_PROGRESS = 705
309  [(jaia.ev).rest_api.presence = GUARANTEED];
310 
311  WARNING__MISSION__DATA_OFFLOAD_FAILED = 720
312  [(jaia.ev).rest_api.presence = GUARANTEED];
313  WARNING__MISSION__DATA__GPS_FIX_DEGRADED = 721
314  [(jaia.ev).rest_api.presence = GUARANTEED];
315  WARNING__MISSION__DATA_PRE_OFFLOAD_FAILED = 722
316  [(jaia.ev).rest_api.presence = GUARANTEED];
317  WARNING__MISSION__DATA_POST_OFFLOAD_FAILED = 723
318  [(jaia.ev).rest_api.presence = GUARANTEED];
319 }
320 
321 message LinuxHardwareStatus
322 {
323  option (dccl.msg) = {
324  unit_system: "si"
325  };
326 
327  message Processor
328  {
329  // from sysinfo
330  message LoadAverages
331  {
332  required float one_min = 1;
333  required float five_min = 2;
334  required float fifteen_min = 3;
335  }
336  optional LoadAverages loads = 10;
337 
338  optional int32 num_processes = 15;
339 
340  // from nproc
341  optional int32 num_processors = 20;
342  }
343 
344  message Information
345  {
346  required uint64 total = 1 [(dccl.field) = {
347  units { prefix: "kilo" unit: "information::byte" }
348  }];
349  required uint64 available = 2 [(dccl.field) = {
350  units { prefix: "kilo" unit: "information::byte" }
351  }];
352  required float use_percent = 3;
353  }
354 
355  message Memory
356  {
357  // from sysinfo
358  required Information ram = 1;
359  required Information swap = 2;
360  }
361 
362  message Disk
363  {
364  // from boost filesystem
365  optional Information rootfs = 1;
366  optional Information data = 2;
367  }
368 
369  message WiFi
370  {
371  required bool is_connected = 1;
372  optional uint32 link_quality = 2;
373  optional uint32 link_quality_percentage = 3;
374  optional int32 signal_level = 4;
375  optional int32 noise_level = 5;
376  }
377 
378  optional int32 uptime = 10
379  [(dccl.field) = { units { base_dimensions: "T" } }];
380  optional Processor processor = 20;
381  optional Memory memory = 30;
382  optional Disk disk = 40;
383  optional WiFi wifi = 50;
384 }
385 
386 message NTPStatus
387 {
388  option (dccl.msg) = {
389  unit_system: "si"
390  };
391  // from ntpq -c rv 0
392  enum SyncSource
393  {
394  SYNC_UNKNOWN = -1;
395  SYNC_UNSPECIFIED = 0;
396  SYNC_PPS = 1;
397  SYNC_LF_RADIO = 2;
398  SYNC_HF_RADIO = 3;
399  SYNC_UHF_RADIO = 4;
400  SYNC_LOCAL = 5;
401  SYNC_NTP = 6;
402  SYNC_OTHER = 7;
403  SYNC_WRISTWATCH = 8;
404  SYNC_TELEPHONE = 9;
405  }
406 
407  optional SyncSource sync_source = 10 [default = SYNC_UNKNOWN];
408 
409  enum LeapIndicator
410  {
411  LEAP_UNKNOWN = -1;
412  LEAP_NONE = 0x00;
413  LEAP_LAST_MINUTE_HAS_61_SECONDS = 0x01;
414  LEAP_LAST_MINUTE_HAS_59_SECONDS = 0x02;
415  LEAP_CLOCK_NOT_SYNCHRONIZED = 0x03;
416  }
417  optional LeapIndicator leap_indicator = 11 [default = LEAP_UNKNOWN];
418  optional int32 system_event_counter = 12 [default = 0];
419  enum NTPSystemEvent
420  {
421  NTP_SYSTEM_EVENT_UNKNOWN = -1;
422  NTP_SYSTEM_EVENT_UNSPECIFIED = 0x0;
423  NTP_SYSTEM_FREQ_NOT_SET = 0x1;
424  NTP_SYSTEM_FREQ_SET = 0x2;
425  NTP_SYSTEM_SPIKE_DETECT = 0x3;
426  NTP_SYSTEM_FREQ_MODE = 0x4;
427  NTP_SYSTEM_CLOCK_SYNC = 0x5;
428  NTP_SYSTEM_RESTART = 0x6;
429  NTP_SYSTEM_PANIC_STOP = 0x7;
430  NTP_SYSTEM_NO_SYSTEM_PEER = 0x8;
431  NTP_SYSTEM_LEAP_ARMED = 0x9;
432  NTP_SYSTEM_LEAP_DISARMED = 0xa;
433  NTP_SYSTEM_LEAP_EVENT = 0xb;
434  NTP_SYSTEM_CLOCK_STEP = 0xc;
435  NTP_SYSTEM_KERNEL_INFO = 0xd;
436  NTP_SYSTEM_LEAPSECOND_VALUES_UPDATE_FROM_FILE = 0xe;
437  NTP_SYSTEM_STALE_LEAPSECOND_VALUES = 0xf;
438  }
439  optional NTPSystemEvent last_system_event = 13
440  [default = NTP_SYSTEM_EVENT_UNKNOWN];
441 
442  // from ntpq -p
443  message NTPPeer
444  {
445  enum TallyCode
446  {
447  PEER_CODE_UNKNOWN = -1;
448  PEER_NOT_VALID = 0x20; // ' '
449  PEER_DISCARDED_BY_INTERSECTION = 0x78; // 'x'
450  PEER_DISCARDED_BY_TABLE_OVERFLOW = 0x2E; // '.'
451  PEER_DISCARDED_BY_CLUSTER_ALGORITHM = 0x2D; // '-'
452  PEER_INCLUDED_IN_COMBINE = 0x2B; // '+'
453  PEER_ALTERNATIVE_BACKUP = 0x23; // '#'
454  PEER_SYSTEM_SYNC_SOURCE = 0x2A; // '*'
455  PEER_PPS_SYNC = 0x6F; // 'o'
456  }
457 
458  required TallyCode tally_code = 1 [default = PEER_CODE_UNKNOWN];
459  required string remote = 2;
460  required string refid = 3;
461  optional int32 stratum = 4 [default = 16];
462  optional int32 when = 5
463  [default = -1, (dccl.field) = { units { base_dimensions: "T" } }];
464  optional int32 poll = 6
465  [default = -1, (dccl.field) = { units { base_dimensions: "T" } }];
466  // bitmask
467  optional int32 reach = 7 [default = 0];
468  optional float delay = 8 [
469  default = nan,
470  (dccl.field) = { units { prefix: "milli" base_dimensions: "T" } }
471  ];
472  optional float offset = 9 [
473  default = nan,
474  (dccl.field) = { units { prefix: "milli" base_dimensions: "T" } }
475  ];
476  optional float jitter = 10 [
477  default = nan,
478  (dccl.field) = { units { prefix: "milli" base_dimensions: "T" } }
479  ];
480  }
481  optional NTPPeer system_sync_peer = 20;
482  repeated NTPPeer peer = 21;
483 }
484 
485 message HelmIVPStatus
486 {
487  option (dccl.msg) = {
488  unit_system: "si"
489  };
490  optional string helm_ivp_state = 1 [default = "PARK"];
491  optional bool helm_ivp_desired_speed = 2 [default = false];
492  optional bool helm_ivp_desired_heading = 3 [default = false];
493  optional bool helm_ivp_desired_depth = 4 [default = false];
494  optional bool helm_ivp_data = 5 [default = false];
495 }
496 
497 message ThreadHealth
498 {
499  repeated Error error = 1;
500  repeated Warning warning = 2;
501 }
502 
503 extend goby.middleware.protobuf.ThreadHealth
504 {
505  optional ThreadHealth jaiabot_thread = 1000;
506 }
507 
508 message VehicleHealth {}
509 
510 extend goby.middleware.protobuf.VehicleHealth
511 {
512  optional VehicleHealth jaiabot_vehicle = 1000;
513 }
514 
515 message SystemdStartReport
516 {
517  required Error clear_error =
518  1; // the corresponding ERROR__FAILED__* to clear (if exists)
519 }
520 
521 message SystemdStopReport
522 {
523  enum ServiceResult
524  {
525  SERVICE_RESULT_UNKNOWN = 0;
526  SERVICE_RESULT_SUCCESS = 1;
527  SERVICE_RESULT_PROTOCOL = 2;
528  SERVICE_RESULT_TIMEOUT = 3;
529  SERVICE_RESULT_EXIT_CODE = 4;
530  SERVICE_RESULT_SIGNAL = 5;
531  SERVICE_RESULT_CORE_DUMP = 6;
532  SERVICE_RESULT_WATCHDOG = 7;
533  SERVICE_RESULT_START_LIMIT_HIT = 8;
534  SERVICE_RESULT_RESOURCES = 9;
535  }
536  required ServiceResult result = 1;
537  required Error error = 2; // the corresponding ERROR__FAILED__*
538  optional string journal_dump_file =
539  3; // if failed, the journal snippet from last boot was written here
540 }
541 
542 message SystemdReportAck
543 {
544  required Error error_ack =
545  1; // which app this relates to, by its corresponding error value
546 }