1/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17syntax = "proto3";
18
19package android.car.cluster.navigation;
20
21option java_package = "android.car.cluster.navigation";
22option java_outer_classname = "NavigationState";
23
24// A reference to an image. This consists of a 'content://' style URI plus
25// attributes describing the image.
26//
27// Sizing: The aspect ratio of the image is given in aspect_ratio.
28//         When requesting the image using this URI a 'w' and 'h' parameter
29//         must be added to the URI parameter list to request an image size.
30//         There is no guarantee that the specific size requested will actually
31//         be returned, however.
32// Margins: The referenced image does not have internal margins.
33// Format: Content URI must reference a file with MIME type
34//         'image/png', 'image/jpeg' or 'image/bmp'.
35// Color: Images can be either "tintable" or not. A "tintable" image is such
36// that
37//        all its content is defined in its alpha channel, while its color
38//        (all other channels) can be altered without losing information
39//        (e.g. icons). A non "tintable" images contains information in all its
40//        channels (e.g. photos).
41// Caching: Given the same image reference and the same requested size,
42//          it is assumed that the exact same image will always be returned.
43//          This means that it should be safe to cache an image once requested
44//          the first time, using this image reference plus requested size as
45//          key, for as long as needed.
46message ImageReference {
47  // A URI defining the location that the image can be retrieved from.
48  //
49  // When requesting the image from this URI, a desired image size must be
50  // specified by editing the parameter list to add the following two
51  // parameters:
52  //   w: width desired maximum width (must be greater than 0)
53  //   h: height desired maximum height (must be greater than 0)
54  //
55  // For example, if the `content_uri` is
56  // `content://some.package.name/some/path`, then the request must be:
57  // `content://some.package.name/some/path?w=<width>&h=<height>` (with <width>
58  // and <height> replaced with the requested values).
59  //
60  // Note that the resulting image is not guaranteed to match the requested
61  // size.
62  string content_uri = 1;
63
64  // The aspect ratio of the image, being width divided by height.
65  double aspect_ratio = 2;
66
67  // Indicates whether this image is "tintable" or not.
68  // An image is "tintable" when all its content is defined in its
69  // alpha-channel, designed to be colorized
70  // (e.g. using android.graphics.PorterDuff.Mode#SRC_ATOP image composition).
71  bool is_tintable = 3;
72}
73
74// Distance along the planned route between relevant points in the navigation
75message Distance {
76  // Possible units used to display this distance.
77  enum Unit {
78    // Display unit is unknown, no distance information should be displayed.
79    UNKNOWN = 0;
80    METERS = 1;
81    KILOMETERS = 2;
82    MILES = 3;
83    FEET = 4;
84    YARDS = 5;
85  }
86
87  // The distance in meters.
88  int32 meters = 1;
89
90  // The distance measured in the unit indicated at `display_units`, already
91  // internationalized and ready for display, or empty if no distance value was
92  // provided. If empty, the distance shouldn’t be displayed to the driver.
93  //
94  // This distance is for display only (it might be a rounded representation of
95  // the actual distance) and must match the distance displayed anywhere else
96  // in the vehicle.
97  //
98  // For example, a distance of 1200 meters in ES_es locale could be
99  // represented with `display_value` of "1,2" and `display_units` of
100  // KILOMETERS.
101  string display_value = 2;
102
103  // The distance unit that should be used to display the distance value
104  // (adjusted to the current user's locale and/or location). This matches the
105  // unit used in `display_value`.
106  Unit display_units = 3;
107}
108
109// Information about a maneuver that the driver will be required to perform.
110message Maneuver {
111  // Next ID: 57
112  enum Type {
113    // Maneuver type is unknown, no maneuver information should be displayed.
114    UNKNOWN = 0;
115
116    // Starting point of the navigation (e.g. "Start driving on Main St.")
117    DEPART = 1;
118
119    // No turn, but the street name changes (e.g. "Continue on Main St.")
120    NAME_CHANGE = 2;
121
122    // No turn, from 0 (included) to 10 (excluded) degrees. Used when we just
123    // wish to say "Keep left". Note that this is used in contrast to STRAIGHT
124    // for disambiguating cases where there is more than one option to go into
125    // the same general direction.
126    KEEP_LEFT = 3;
127    // No turn, from 0 (included) to 10 (excluded) degrees. Used when we just
128    // wish to say "Keep right". Note that this is used in contrast to STRAIGHT
129    // for disambiguating cases where there is more than one option to go into
130    // the same general direction.
131    KEEP_RIGHT = 4;
132
133    // Slight left turn at an intersection, from 10 (included) to 45 (excluded)
134    // degrees.
135    TURN_SLIGHT_LEFT = 5;
136    // Slight right turn at an intersection, from 10 (included) to 45 (excluded)
137    // degrees.
138    TURN_SLIGHT_RIGHT = 6;
139
140    // Regular left turn at an intersection, from 45 (included) to 135
141    // (excluded) degrees.
142    TURN_NORMAL_LEFT = 7;
143    // Regular right turn at an intersection, from 45 (included) to 135
144    // (excluded) degrees.
145    TURN_NORMAL_RIGHT = 8;
146
147    // Sharp left turn at an intersection, from 135 (included) to 175 (excluded)
148    // degrees.
149    TURN_SHARP_LEFT = 9;
150    // Sharp right turn at an intersection, from 135 (included) to 175
151    // (excluded) degrees.
152    TURN_SHARP_RIGHT = 10;
153
154    // A left turn onto the opposite side of the same street, from 175
155    // (included) to 180 (included) degrees.
156    U_TURN_LEFT = 11;
157    // A right turn onto the opposite side of the same street, from 175
158    // (included) to 180 (included) degrees.
159    U_TURN_RIGHT = 12;
160
161    // A slight left turn to enter a turnpike or freeway. See TURN_SLIGHT_LEFT
162    // for the definition of slight.
163    ON_RAMP_SLIGHT_LEFT = 13;
164    // A slight right turn to enter a turnpike or freeway. See TURN_SLIGHT_RIGHT
165    // for the definition of slight.
166    ON_RAMP_SLIGHT_RIGHT = 14;
167    // A normal left turn to enter a turnpike or freeway. See TURN_NORMAL_LEFT
168    // for the definition of normal.
169    ON_RAMP_NORMAL_LEFT = 15;
170    // A normal right turn to enter a turnpike or freeway. See TURN_NORMAL_RIGHT
171    // for the definition of normal.
172    ON_RAMP_NORMAL_RIGHT = 16;
173    // A sharp left turn to enter a turnpike or freeway. See TURN_SHARP_LEFT
174    // for the definition of sharp.
175    ON_RAMP_SHARP_LEFT = 17;
176    // A sharp right turn to enter a turnpike or freeway. See TURN_SHARP_RIGHT
177    // for the definition of sharp.
178    ON_RAMP_SHARP_RIGHT = 18;
179    // A left u-turn to enter a turnpike or freeway. See U_TURN_LEFT for the
180    // definition of u-turn.
181    ON_RAMP_U_TURN_LEFT = 19;
182    // A right u-turn to enter a turnpike or freeway. See U_TURN_RIGHT for the
183    // definition of u-turn.
184    ON_RAMP_U_TURN_RIGHT = 20;
185
186    // A slight left turn to exit a turnpike or freeway. See TURN_SLIGHT_LEFT
187    // for the definition of slight.
188    OFF_RAMP_SLIGHT_LEFT = 21;
189    // A slight right turn to exit a turnpike or freeway. See TURN_SLIGHT_RIGHT
190    // for the definition of slight.
191    OFF_RAMP_SLIGHT_RIGHT = 22;
192    // A left turn to exit a turnpike or freeway. See TURN_NORMAL_LEFT
193    // for the definition of normal.
194    OFF_RAMP_NORMAL_LEFT = 23;
195    // A right turn to exit a turnpike or freeway. See TURN_NORMAL_RIGHT
196    // for the definition of normal.
197    OFF_RAMP_NORMAL_RIGHT = 24;
198
199    // Road diverges (e.g. "Keep left at the fork").
200    FORK_LEFT = 25;
201    // Road diverges (e.g. "Keep right at the fork").
202    FORK_RIGHT = 26;
203
204    // Current road joins another (e.g. "Merge right onto Main St.").
205    MERGE_LEFT = 27;
206    // Current road joins another (e.g. "Merge left onto Main St.").
207    MERGE_RIGHT = 28;
208    // Current road joins another (e.g. "Merge onto Main St.").
209    MERGE_SIDE_UNSPECIFIED = 54;
210
211    // Roundabout entrance on which the current road ends (e.g. "Enter the
212    // roundabout").
213    ROUNDABOUT_ENTER = 29;
214
215    // Used when leaving a roundabout when the step starts in it (e.g. "Exit
216    // the roundabout").
217    ROUNDABOUT_EXIT = 30;
218
219    // Entrance and exit (e.g. "At the roundabout, take Nth exit") on a
220    // clockwise roundabout (as seen from above, typical for left-hand drive
221    // countries).
222    ROUNDABOUT_ENTER_AND_EXIT_CW = 55;
223    // Entrance and sharp right turn exit (e.g. "At the roundabout, take Nth
224    // exit") on a clockwise roundabout (as seen from above, typical for
225    // left-hand drive countries). See TURN_SHARP_RIGHT for the definition of
226    // sharp.
227    ROUNDABOUT_ENTER_AND_EXIT_CW_SHARP_RIGHT = 31;
228    // Entrance and regular right turn exit (e.g. "At the roundabout, take Nth
229    // exit") on a clockwise roundabout (as seen from above, typical for
230    // left-hand drive countries). See TURN_NORMAL_RIGHT for the definition of
231    // normal.
232    ROUNDABOUT_ENTER_AND_EXIT_CW_NORMAL_RIGHT = 32;
233    // Entrance and slight right turn exit (e.g. "At the roundabout, take Nth
234    // exit") on a clockwise roundabout (as seen from above, typical for
235    // left-hand drive countries). See TURN_SLIGHT_RIGHT for the definition of
236    // slight.
237    ROUNDABOUT_ENTER_AND_EXIT_CW_SLIGHT_RIGHT = 33;
238    // Entrance and straight exit (e.g. "At the roundabout, take Nth exit") on a
239    // clockwise roundabout (as seen from above, typical for left-hand drive
240    // countries).
241    ROUNDABOUT_ENTER_AND_EXIT_CW_STRAIGHT = 34;
242    // Entrance and sharp left turn exit (e.g. "At the roundabout, take Nth
243    // exit") on a clockwise roundabout (as seen from above, typical for
244    // left-hand drive countries). See TURN_SHARP_LEFT for the definition of
245    // sharp.
246    ROUNDABOUT_ENTER_AND_EXIT_CW_SHARP_LEFT = 35;
247    // Entrance and regular left turn exit (e.g. "At the roundabout, take Nth
248    // exit") on a clockwise roundabout (as seen from above, typical for
249    // left-hand drive countries). See TURN_NORMAL_LEFT for the definition of
250    // normal.
251    ROUNDABOUT_ENTER_AND_EXIT_CW_NORMAL_LEFT = 36;
252    // Entrance and slight left turn exit (e.g. "At the roundabout, take Nth
253    // exit") on a clockwise roundabout (as seen from above, typical for
254    // left-hand drive countries). See TURN_SLIGHT_LEFT for the definition of
255    // slight.
256    ROUNDABOUT_ENTER_AND_EXIT_CW_SLIGHT_LEFT = 37;
257    // Entrance and u-turn exit (e.g. "At the roundabout, take Nth exit") on a
258    // clockwise roundabout (as seen from above, typical for left-hand drive
259    // countries).
260    ROUNDABOUT_ENTER_AND_EXIT_CW_U_TURN = 38;
261
262    // Entrance and exit (e.g. "At the roundabout, take Nth exit") on a
263    // counter-clockwise roundabout (as seen from above, typical for right-hand
264    // drive countries).
265    ROUNDABOUT_ENTER_AND_EXIT_CCW = 56;
266    // Entrance and sharp right turn exit (e.g. "At the roundabout, take Nth
267    // exit") on a counter-clockwise roundabout (as seen from above, typical for
268    // right-hand drive countries). See TURN_SHARP_RIGHT for the definition of
269    // sharp.
270    ROUNDABOUT_ENTER_AND_EXIT_CCW_SHARP_RIGHT = 39;
271    // Entrance and regular right turn exit (e.g. "At the roundabout, take Nth
272    // exit") on a counter-clockwise roundabout (as seen from above, typical for
273    // right-hand drive countries). See TURN_NORMAL_RIGHT for the definition of
274    // normal.
275    ROUNDABOUT_ENTER_AND_EXIT_CCW_NORMAL_RIGHT = 40;
276    // Entrance and slight right turn exit (e.g. "At the roundabout, take Nth
277    // exit") on a counter-clockwise roundabout (as seen from above, typical for
278    // right-hand drive countries). See TURN_SLIGHT_RIGHT for the definition of
279    // slight.
280    ROUNDABOUT_ENTER_AND_EXIT_CCW_SLIGHT_RIGHT = 41;
281    // Entrance and straight exit (e.g. "At the roundabout, take Nth exit") on a
282    // counter-clockwise roundabout (as seen from above, typical for right-hand
283    // drive countries).
284    ROUNDABOUT_ENTER_AND_EXIT_CCW_STRAIGHT = 42;
285    // Entrance and sharp left turn exit (e.g. "At the roundabout, take Nth
286    // exit") on a counter-clockwise roundabout (as seen from above, typical for
287    // right-hand drive countries). See TURN_SHARP_LEFT for the definition of
288    // sharp.
289    ROUNDABOUT_ENTER_AND_EXIT_CCW_SHARP_LEFT = 43;
290    // Entrance and regular left turn exit (e.g. "At the roundabout, take Nth
291    // exit") on a counter-clockwise roundabout (as seen from above, typical for
292    // right-hand drive countries). See TURN_NORMAL_LEFT for the definition of
293    // normal.
294    ROUNDABOUT_ENTER_AND_EXIT_CCW_NORMAL_LEFT = 44;
295    // Entrance and slight left turn exit (e.g. "At the roundabout, take Nth
296    // exit") on a counter-clockwise roundabout (as seen from above, typical for
297    // right-hand drive countries). See TURN_SLIGHT_LEFT for the definition of
298    // slight.
299    ROUNDABOUT_ENTER_AND_EXIT_CCW_SLIGHT_LEFT = 45;
300    // Entrance and u-turn exit (e.g. "At the roundabout, take Nth exit") on a
301    // counter-clockwise roundabout (as seen from above, typical for right-hand
302    // drive countries).
303    ROUNDABOUT_ENTER_AND_EXIT_CCW_U_TURN = 46;
304
305    // Driver should steer straight.
306    STRAIGHT = 47;
307
308    // Drive towards a boat ferry for vehicles (e.g. "Take the ferry").
309    FERRY_BOAT = 48;
310
311    // Drive towards a train ferry for vehicles (e.g. "Take the train").
312    FERRY_TRAIN = 49;
313
314    // Arrival to a destination where the direction is unknown.
315    DESTINATION = 50;
316
317    // Arrival to a destination located straight ahead.
318    DESTINATION_STRAIGHT = 51;
319    // Arrival to a destination located on the left side of the road.
320    DESTINATION_LEFT = 52;
321    // Arrival to a destination located on the right side of the road.
322    DESTINATION_RIGHT = 53;
323  }
324
325  // The type of the maneuver.
326  Type type = 1;
327
328  // The roundabout exit number, starting from 1 to designate the first exit
329  // after joining the roundabout, and increasing in circulation order.
330  // Only relevant if type is ROUNDABOUT_EXIT or any variation of
331  // ROUNDABOUT_ENTER_AND_EXIT.
332  //
333  // For example, if the driver is joining a counter-clockwise roundabout
334  // with 4 exits, then the exit to the right would be exit #1, the one
335  // straight ahead would be exit #2, the one to the left would be exit #3
336  // and the one used by the driver to join the roundabout would be exit #4.
337  int32 roundabout_exit_number = 2;
338
339  // A reference to an image representing this maneuver,
340  // or not present if image representation is not available.
341  ImageReference icon = 3;
342}
343
344// Configuration of a single lane of a road at a particular point in the
345// navigation. It describes all possible directions the driver could go
346// from this lane, and indicates which directions the driver could take
347// to stay on the navigation route.
348message Lane {
349  // One of the possible directions a driver can go when using a particular
350  // lane at a particular step in the navigation. This defines the icon(s)
351  // that must be combined to display a lane configuration to the user.
352  message LaneDirection {
353    enum Shape {
354      // The shape is unknown, in which case no lane information should be
355      // shown.
356      UNKNOWN = 0;
357
358      // No turn.
359      STRAIGHT = 1;
360
361      // Slight left turn, from 10 (included) to 45 (excluded) degrees.
362      SLIGHT_LEFT = 2;
363
364      // Slight right turn, from 10 (included) to 45 (excluded) degrees.
365      SLIGHT_RIGHT = 3;
366
367      // Regular left turn, from 45 (included) to 135 (excluded) degrees.
368      NORMAL_LEFT = 4;
369
370      // Regular right turn, from 45 (included) to 135 (excluded) degrees.
371      NORMAL_RIGHT = 5;
372
373      // Sharp left turn, from 135 (included) to 175 (excluded) degrees.
374      SHARP_LEFT = 6;
375
376      // Sharp right turn, from 135 (included) to 175 (excluded) degrees.
377      SHARP_RIGHT = 7;
378
379      // A left turn onto the opposite side of the same street, from 175
380      // (included) to 180 (included) degrees
381      U_TURN_LEFT = 8;
382
383      // A right turn onto the opposite side of the same street, from 175
384      // (included) to 180 (included) degrees
385      U_TURN_RIGHT = 9;
386    }
387
388    // The shape of this lane direction.
389    Shape shape = 1;
390
391    // True if this is a valid direction the driver can take in order to stay
392    // in the navigation route, or false if it will take the drive off the
393    // navigation route.
394    bool is_highlighted = 2;
395  }
396
397  // The possible directions a driver can take from this lane.
398  repeated LaneDirection lane_directions = 1;
399}
400
401// An instruction to a user to perform an action during their drive composed of
402// a sequence of graphic elements (e.g. text, images) to be displayed
403// one after another.
404//
405// Each sequence will have a plain text representation in `alternate_text`
406// and in the case of the absence of a rich representation,
407// the sequence of elements in `elements` may be left empty.
408// The textual representation may also be used as a fallback for when the
409// elements fail to render.
410message Cue {
411  // One item in the sequence that makes up a Cue,
412  // a sequence of graphic elements that can be displayed one after another.
413  //
414  // A CueElement can contain text, a graphic element, or both.
415  // The text of a CueElement with an image reference should be representative
416  // of the image.
417  //
418  // The image should be rendered if possible instead of the
419  // text. Otherwise, `CueElement.text` should be used as a fallback.
420  //
421  // If rendering fails and the text is empty, then no elements in the sequence
422  // should be rendered and `Cue.alternate_text` must be used instead.
423  //
424  // New graphic elements might be added in the future. If such elements are
425  // unknown to the OEM rendering service, they will be delivered as text.
426  message CueElement {
427    // The textual representation of this element.
428    //
429    // If image is provided, then this is used as a fallback in the case of
430    // render failures, otherwise this is the string to be used when rendering
431    // this element.
432    string text = 1;
433
434    // An image representing this element. This representation should be used
435    // over the textual representation whenever possible.
436    //
437    // In case of failure to render, `text` should be shown instead. If
438    // rendering fails and text is empty, then no elements should be shown and
439    // instead the `alternate_text` should be shown.
440    ImageReference image = 2;
441  }
442
443  // The sequence of graphic elements.
444  //
445  // If no rich cue representation is available,
446  // the list may be empty and `alternate_text` should be used as a fallback.
447  // Spacing between the elements is provided, and rendering services should
448  // not attempt to add their own spacing between the CueElement objects.
449  repeated CueElement elements = 1;
450
451  // The plain-text string representing the content of this Cue.
452  string alternate_text = 2;
453}
454
455// An action that the driver should take in order to remain on the current
456// navigation route.
457//
458// For example: turning onto a street, taking a highway exit and merging onto
459// a different highway, continuing straight through a roundabout, etc.
460message Step {
461  // The distance from the current position to the point where
462  // this navigation step should be executed.
463  Distance distance = 1;
464
465  // The maneuver to be performed on this step,
466  // or not present if this step doesn't involve a maneuver.
467  Maneuver maneuver = 2;
468
469  // The configuration of road lanes at the point where the driver should
470  // execute this step, or an empty list if lane configuration metadata
471  // is not available. Lane configurations are listed from left to right.
472  repeated Lane lanes = 3;
473
474  // An image representing the lane configuration at this point in the
475  // navigation, or not present if the lanes configuration image was not
476  // provided. The image, if provided, is expected to contain:
477  //   - A representation of all lanes, one next to the other in a single row.
478  //   - For each lane, a set of arrows, representing each possible driving
479  //     direction (e.g. straight, left turn, etc.) within such lane.
480  //   - Each of such driving directions that would keep the driver within
481  //     the navigation route should be highlighted.
482  // Lane configuration images are expected to be displayed in a canvas
483  // with fixed height and variable width.
484  ImageReference lanes_image = 4;
485
486  // Auxiliary instructions on how to complete this navigation step,
487  // described as a Cue object containing a sequence of texts
488  // (e.g. "onto ", "Wallaby way") and images (e.g. road badge of a highway).
489  // Separators, such as spaces, should be provided in the sequence.
490  // If space is not enough to display the complete content of this Cue
491  // instance, the beginning of these instructions must be displayed,
492  // cutting as much from the end as needed to fit.
493  Cue cue = 5;
494}
495
496// An object representing a latitude/longitude pair. This is expressed as a pair
497// of doubles representing degrees latitude and degrees longitude. Unless
498// specified otherwise, this must conform to the WGS84 standard
499// (http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf) Values must be
500// within normalized ranges.
501//
502// Copied from:
503// https://github.com/googleapis/googleapis/blob/master/google/type/latlng.proto
504message LatLng {
505  // The latitude in degrees. It must be in the range [-90.0, +90.0].
506  double latitude = 1;
507  // The longitude in degrees. It must be in the range [-180.0, +180.0].
508  double longitude = 2;
509}
510
511// A Timestamp represents a point in time independent of any time zone
512// or calendar, represented as seconds and fractions of seconds at
513// nanosecond resolution in UTC Epoch time. It is encoded using the
514// Proleptic Gregorian Calendar which extends the Gregorian calendar
515// backwards to year one. It is encoded assuming all minutes are 60
516// seconds long, i.e. leap seconds are "smeared" so that no leap second
517// table is needed for interpretation. Range is from
518// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
519// By restricting to that range, we ensure that we can convert to
520// and from  RFC 3339 date strings.
521// See
522// [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
523//
524// This is a subset of
525// https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
526message Timestamp {
527  // Reserved fields
528  reserved 2;
529
530  // Represents seconds of UTC time since Unix epoch
531  // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
532  // 9999-12-31T23:59:59Z inclusive.
533  int64 seconds = 1;
534}
535
536// Final or intermediate stop in a navigation route.
537message Destination {
538  // Congestion level on the way to a destination,
539  // compared to ideal driving conditions.
540  enum Traffic {
541    // Traffic information is not available
542    UNKNOWN = 0;
543
544    // High amount of traffic
545    HIGH = 1;
546
547    // Intermediate amount of traffic
548    MEDIUM = 2;
549
550    // Traffic level close to free flow
551    LOW = 3;
552  }
553
554  // The name of the destination (formatted for the current user's locale),
555  // or empty if destination name is unknown.
556  string title = 1;
557
558  // The address of the destination (formatted for the current user's locale),
559  // or empty if there is no address associated with this destination
560  string address = 2;
561
562  // The travel distance along the route from the current position to this
563  // destination, or not set if distance was not provided or is unknown.
564  Distance distance = 3;
565
566  // The estimated time at arrival at this destination,
567  // or not set if it was not provided or is unknown.
568  Timestamp estimated_time_at_arrival = 4;
569
570  // The timezone at destination (for example, ‘Europe/Paris’)
571  string zone_id = 5;
572
573  // The geo-location of this destination,
574  // or not set if not provided or unknown.
575  LatLng location = 6;
576
577  // The congestion level on the route to this destination,
578  // compared to to ideal driving conditions.
579  Traffic traffic = 7;
580
581  // The estimated duration between now and arrival, formatted for desired
582  // rounding (formatted for the current user's locale). For example, a
583  // duration of seven minutes and 15 seconds could be set here as "7 min".
584  string formatted_duration_until_arrival = 8;
585}
586
587// The description for a road.
588message Road {
589  // Name of the road, for example "Main St" or "101-S".
590  string name = 1;
591}
592
593// Navigation state data to be displayed on the instrument cluster of a car.
594// This is composed of:
595//   - a list of destinations
596//   - the immediate step or steps in order to drive towards those destinations
597message NavigationStateProto {
598  // The navigation steps, in order of execution.
599  // It is up to the third-party navigation app to decide how many steps in
600  // advance will be provided (and need not be truncated by an upcoming
601  // destination).
602  repeated Step steps = 1;
603
604  // The destinations and intermediate stops in the navigation,
605  // sorted in the order in which the driver will arrive to them.
606  repeated Destination destinations = 2;
607
608  // The current road being driven, may not be set if the road
609  // being driven is unknown. This indicates where the driver is at the moment.
610  Road current_road = 3;
611
612  enum ServiceStatus {
613    // Service status is not known or an unknown value is specified.
614    SERVICE_STATUS_UNSPECIFIED = 0;
615
616    // Default service status,
617    // indicating that navigation state data is valid and up-to-date.
618    NORMAL = 1;
619
620    // New navigation information is being fetched, and an updated navigation
621    // state will be provided soon. OEM rendering services can use this signal
622    // to display a progress indicator to the user.
623    REROUTING = 2;
624  }
625
626  // Current status of the navigation.
627  ServiceStatus service_status = 4;
628}
629
630