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 // Indicates whether this step is about to be executed. 496 bool is_imminent = 6; 497} 498 499// An object representing a latitude/longitude pair. This is expressed as a pair 500// of doubles representing degrees latitude and degrees longitude. Unless 501// specified otherwise, this must conform to the WGS84 standard 502// (http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf) Values must be 503// within normalized ranges. 504// 505// Copied from: 506// https://github.com/googleapis/googleapis/blob/master/google/type/latlng.proto 507message LatLng { 508 // The latitude in degrees. It must be in the range [-90.0, +90.0]. 509 double latitude = 1; 510 // The longitude in degrees. It must be in the range [-180.0, +180.0]. 511 double longitude = 2; 512} 513 514// A Timestamp represents a point in time independent of any time zone 515// or calendar, represented as seconds and fractions of seconds at 516// nanosecond resolution in UTC Epoch time. It is encoded using the 517// Proleptic Gregorian Calendar which extends the Gregorian calendar 518// backwards to year one. It is encoded assuming all minutes are 60 519// seconds long, i.e. leap seconds are "smeared" so that no leap second 520// table is needed for interpretation. Range is from 521// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. 522// By restricting to that range, we ensure that we can convert to 523// and from RFC 3339 date strings. 524// See 525// [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). 526// 527// This is a subset of 528// https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto 529message Timestamp { 530 // Reserved fields 531 reserved 2; 532 533 // Represents seconds of UTC time since Unix epoch 534 // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 535 // 9999-12-31T23:59:59Z inclusive. 536 int64 seconds = 1; 537} 538 539// Final or intermediate stop in a navigation route. 540message Destination { 541 // Congestion level on the way to a destination, 542 // compared to ideal driving conditions. 543 enum Traffic { 544 // Traffic information is not available 545 UNKNOWN = 0; 546 547 // High amount of traffic 548 HIGH = 1; 549 550 // Intermediate amount of traffic 551 MEDIUM = 2; 552 553 // Traffic level close to free flow 554 LOW = 3; 555 } 556 557 // The name of the destination (formatted for the current user's locale), 558 // or empty if destination name is unknown. 559 string title = 1; 560 561 // The address of the destination (formatted for the current user's locale), 562 // or empty if there is no address associated with this destination 563 string address = 2; 564 565 // The travel distance along the route from the current position to this 566 // destination, or not set if distance was not provided or is unknown. 567 Distance distance = 3; 568 569 // The estimated time at arrival at this destination, 570 // or not set if it was not provided or is unknown. 571 Timestamp estimated_time_at_arrival = 4; 572 573 // The timezone at destination (for example, ‘Europe/Paris’) 574 string zone_id = 5; 575 576 // The geo-location of this destination, 577 // or not set if not provided or unknown. 578 LatLng location = 6; 579 580 // The congestion level on the route to this destination, 581 // compared to to ideal driving conditions. 582 Traffic traffic = 7; 583 584 // The estimated duration between now and arrival, formatted for desired 585 // rounding (formatted for the current user's locale). For example, a 586 // duration of seven minutes and 15 seconds could be set here as "7 min". 587 string formatted_duration_until_arrival = 8; 588} 589 590// The description for a road. 591message Road { 592 // Name of the road, for example "Main St" or "101-S". 593 string name = 1; 594} 595 596// Navigation state data to be displayed on the instrument cluster of a car. 597// This is composed of: 598// - a list of destinations 599// - the immediate step or steps in order to drive towards those destinations 600message NavigationStateProto { 601 // The navigation steps, in order of execution. 602 // It is up to the third-party navigation app to decide how many steps in 603 // advance will be provided (and need not be truncated by an upcoming 604 // destination). 605 repeated Step steps = 1; 606 607 // The destinations and intermediate stops in the navigation, 608 // sorted in the order in which the driver will arrive to them. 609 repeated Destination destinations = 2; 610 611 // The current road being driven, may not be set if the road 612 // being driven is unknown. This indicates where the driver is at the moment. 613 Road current_road = 3; 614 615 enum ServiceStatus { 616 // Service status is not known or an unknown value is specified. 617 SERVICE_STATUS_UNSPECIFIED = 0; 618 619 // Default service status, 620 // indicating that navigation state data is valid and up-to-date. 621 NORMAL = 1; 622 623 // New navigation information is being fetched, and an updated navigation 624 // state will be provided soon. OEM rendering services can use this signal 625 // to display a progress indicator to the user. 626 REROUTING = 2; 627 } 628 629 // Current status of the navigation. 630 ServiceStatus service_status = 4; 631} 632 633