1 /* 2 * Copyright (C) 2016 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 17 package android.hardware.automotive.vehicle@2.0; 18 19 /** 20 * Enumerates supported data types for VehicleProperty. 21 * 22 * This is a bitwise flag that supposed to be used in VehicleProperty enum. 23 */ 24 enum VehiclePropertyType : int32_t { 25 STRING = 0x00100000, 26 BOOLEAN = 0x00200000, 27 INT32 = 0x00400000, 28 INT32_VEC = 0x00410000, 29 INT64 = 0x00500000, 30 FLOAT = 0x00600000, 31 FLOAT_VEC = 0x00610000, 32 BYTES = 0x00700000, 33 34 /** 35 * Any combination of scalar or vector types. The exact format must be 36 * provided in the description of the property. 37 */ 38 COMPLEX = 0x00e00000, 39 40 MASK = 0x00ff0000 41 }; 42 43 /** 44 * Some properties may be associated with particular vehicle areas. For 45 * example, VehicleProperty:DOOR_LOCK property must be associated with 46 * particular door, thus this property must be marked with 47 * VehicleArea:DOOR flag. 48 * 49 * Other properties may not be associated with particular vehicle area, 50 * these kind of properties must have VehicleArea:GLOBAL flag. 51 * 52 * This is a bitwise flag that supposed to be used in VehicleProperty enum. 53 */ 54 enum VehicleArea : int32_t { 55 GLOBAL = 0x01000000, 56 ZONE = 0x02000000, 57 WINDOW = 0x03000000, 58 MIRROR = 0x04000000, 59 SEAT = 0x05000000, 60 DOOR = 0x06000000, 61 62 MASK = 0x0f000000, 63 }; 64 65 /** 66 * Enumerates property groups. 67 * 68 * This is a bitwise flag that supposed to be used in VehicleProperty enum. 69 */ 70 enum VehiclePropertyGroup : int32_t { 71 /** 72 * Properties declared in AOSP must have this flag. 73 */ 74 SYSTEM = 0x10000000, 75 76 /** 77 * Properties declared by vendors must have this flag. 78 */ 79 VENDOR = 0x20000000, 80 81 MASK = 0xf0000000, 82 }; 83 84 /** 85 * Declares all vehicle properties. VehicleProperty has a bitwise structure. 86 * Each property must have: 87 * - an unique id from range 0x0100 - 0xffff 88 * - associated data type using VehiclePropertyType 89 * - property group (VehiclePropertyGroup) 90 * - vehicle area (VehicleArea) 91 * 92 * Vendors are allowed to extend this enum with their own properties. In this 93 * case they must use VehiclePropertyGroup:VENDOR flag when property is 94 * declared. 95 */ 96 enum VehicleProperty: int32_t { 97 98 /** Undefined property. */ 99 INVALID = 0x00000000, 100 101 /** 102 * VIN of vehicle 103 * 104 * @change_mode VehiclePropertyChangeMode:STATIC 105 * @access VehiclePropertyAccess:READ 106 */ 107 INFO_VIN= ( 108 0x0100 109 | VehiclePropertyGroup:SYSTEM 110 | VehiclePropertyType:STRING 111 | VehicleArea:GLOBAL), 112 113 /** 114 * Maker name of vehicle 115 * 116 * @change_mode VehiclePropertyChangeMode:STATIC 117 * @access VehiclePropertyAccess:READ 118 */ 119 INFO_MAKE = ( 120 0x0101 121 | VehiclePropertyGroup:SYSTEM 122 | VehiclePropertyType:STRING 123 | VehicleArea:GLOBAL), 124 125 /** 126 * Model of vehicle 127 * 128 * @change_mode VehiclePropertyChangeMode:STATIC 129 * @access VehiclePropertyAccess:READ 130 */ 131 INFO_MODEL = ( 132 0x0102 133 | VehiclePropertyGroup:SYSTEM 134 | VehiclePropertyType:STRING 135 | VehicleArea:GLOBAL), 136 137 /** 138 * Model year of vehicle. 139 * 140 * @change_mode VehiclePropertyChangeMode:STATIC 141 * @access VehiclePropertyAccess:READ 142 * @unit VehicleUnit:YEAR 143 */ 144 INFO_MODEL_YEAR = ( 145 0x0103 146 | VehiclePropertyGroup:SYSTEM 147 | VehiclePropertyType:INT32 148 | VehicleArea:GLOBAL), 149 150 /** 151 * Fuel capacity of the vehicle 152 * 153 * @change_mode VehiclePropertyChangeMode:STATIC 154 * @access VehiclePropertyAccess:READ 155 * @unit VehicleUnit:MILLILITER 156 */ 157 INFO_FUEL_CAPACITY = ( 158 0x0104 159 | VehiclePropertyGroup:SYSTEM 160 | VehiclePropertyType:FLOAT 161 | VehicleArea:GLOBAL), 162 163 /** 164 * Current odometer value of the vehicle 165 * 166 * @change_mode VehiclePropertyChangeMode:ON_CHANGE | VehiclePropertyChangeMode:CONTINUOUS 167 * @access VehiclePropertyAccess:READ 168 * @unit VehicleUnit:KILOMETER 169 */ 170 PERF_ODOMETER = ( 171 0x0204 172 | VehiclePropertyGroup:SYSTEM 173 | VehiclePropertyType:FLOAT 174 | VehicleArea:GLOBAL), 175 176 /** 177 * Speed of the vehicle 178 * 179 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 180 * @access VehiclePropertyAccess:READ 181 * @unit VehicleUnit:METER_PER_SEC 182 */ 183 PERF_VEHICLE_SPEED = ( 184 0x0207 185 | VehiclePropertyGroup:SYSTEM 186 | VehiclePropertyType:FLOAT 187 | VehicleArea:GLOBAL), 188 189 /** 190 * Temperature of engine coolant 191 * 192 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 193 * @access VehiclePropertyAccess:READ 194 * @unit VehicleUnit:CELSIUS 195 */ 196 ENGINE_COOLANT_TEMP = ( 197 0x0301 198 | VehiclePropertyGroup:SYSTEM 199 | VehiclePropertyType:FLOAT 200 | VehicleArea:GLOBAL), 201 202 /** 203 * Temperature of engine oil 204 * 205 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 206 * @access VehiclePropertyAccess:READ 207 * @unit VehicleUnit:CELSIUS 208 */ 209 ENGINE_OIL_TEMP = ( 210 0x0304 211 | VehiclePropertyGroup:SYSTEM 212 | VehiclePropertyType:FLOAT 213 | VehicleArea:GLOBAL), 214 215 /** 216 * Engine rpm 217 * 218 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 219 * @access VehiclePropertyAccess:READ 220 * @unit VehicleUnit:RPM 221 */ 222 ENGINE_RPM = ( 223 0x0305 224 | VehiclePropertyGroup:SYSTEM 225 | VehiclePropertyType:FLOAT 226 | VehicleArea:GLOBAL), 227 228 /** 229 * Reports wheel ticks 230 * 231 * The first four elements represent ticks for individual wheels in the 232 * following order: front left, front right, rear right, rear left. All 233 * tick counts are cumulative. Tick counts increment when the vehicle 234 * moves forward, and decrement when vehicles moves in reverse. The ticks 235 * should be reset to 0 when the vehicle is started by the user. 236 * 237 * The next element in the vector is a reset count. A reset indicates 238 * previous tick counts are not comparable with this and future ones. Some 239 * sort of discontinuity in tick counting has occurred. 240 * 241 * int64Values[0] = reset count 242 * int64Values[1] = front left ticks 243 * int64Values[2] = front right ticks 244 * int64Values[3] = rear right ticks 245 * int64Values[4] = rear left ticks 246 * 247 * configArray is used to indicate the micrometers-per-wheel-tick value as well as 248 * which wheels are supported. configArray is set as follows: 249 * 250 * configArray[0], bits [0:3] = supported wheels. Uses enum Wheel. 251 * configArray[1] = micrometers per front left wheel tick 252 * configArray[2] = micrometers per front right wheel tick 253 * configArray[3] = micrometers per rear right wheel tick 254 * configArray[4] = micrometers per rear left wheel tick 255 * 256 * NOTE: If a wheel is not supported, its value shall always be set to 0. 257 * 258 * VehiclePropValue.timestamp must be correctly filled in. 259 * 260 * @change_mode VehiclePropertyChangeMode:CONTINUOUS 261 * @access VehiclePropertyAccess:READ 262 * 263 * @since o.mr1 264 */ 265 WHEEL_TICK = ( 266 0x0306 267 | VehiclePropertyGroup:SYSTEM 268 | VehiclePropertyType:COMPLEX 269 | VehicleArea:GLOBAL), 270 271 272 /** 273 * Currently selected gear 274 * 275 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 276 * @access VehiclePropertyAccess:READ 277 * @data_enum VehicleGear 278 */ 279 GEAR_SELECTION = ( 280 0x0400 281 | VehiclePropertyGroup:SYSTEM 282 | VehiclePropertyType:INT32 283 | VehicleArea:GLOBAL), 284 285 /** 286 * Current gear. In non-manual case, selected gear does not necessarily 287 * match the current gear. 288 * 289 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 290 * @access VehiclePropertyAccess:READ 291 * @data_enum VehicleGear 292 */ 293 CURRENT_GEAR = ( 294 0x0401 295 | VehiclePropertyGroup:SYSTEM 296 | VehiclePropertyType:INT32 297 | VehicleArea:GLOBAL), 298 299 /** 300 * Parking brake state. 301 * 302 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 303 * @access VehiclePropertyAccess:READ 304 */ 305 PARKING_BRAKE_ON = ( 306 0x0402 307 | VehiclePropertyGroup:SYSTEM 308 | VehiclePropertyType:BOOLEAN 309 | VehicleArea:GLOBAL), 310 311 /** 312 * Driving status policy. 313 * 314 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 315 * @access VehiclePropertyAccess:READ 316 * @data_enum VehicleDrivingStatus 317 */ 318 DRIVING_STATUS = ( 319 0x0404 320 | VehiclePropertyGroup:SYSTEM 321 | VehiclePropertyType:INT32 322 | VehicleArea:GLOBAL), 323 324 /** 325 * Warning for fuel low level. 326 * 327 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 328 * @access VehiclePropertyAccess:READ 329 */ 330 FUEL_LEVEL_LOW = ( 331 0x0405 332 | VehiclePropertyGroup:SYSTEM 333 | VehiclePropertyType:BOOLEAN 334 | VehicleArea:GLOBAL), 335 336 /** 337 * Night mode or not. 338 * 339 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 340 * @access VehiclePropertyAccess:READ 341 */ 342 NIGHT_MODE = ( 343 0x0407 344 | VehiclePropertyGroup:SYSTEM 345 | VehiclePropertyType:BOOLEAN 346 | VehicleArea:GLOBAL), 347 348 /** 349 * State of the vehicles turn signals 350 * 351 * Values from VehicleTurnSignal 352 * 353 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 354 * @access VehiclePropertyAccess:READ 355 */ 356 TURN_SIGNAL_STATE = ( 357 0x0408 358 | VehiclePropertyGroup:SYSTEM 359 | VehiclePropertyType:INT32 360 | VehicleArea:GLOBAL), 361 362 /** 363 * Represents ignition state 364 * 365 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 366 * @access VehiclePropertyAccess:READ 367 */ 368 IGNITION_STATE = ( 369 0x0409 370 | VehiclePropertyGroup:SYSTEM 371 | VehiclePropertyType:INT32 372 | VehicleArea:GLOBAL), 373 374 /** 375 * ABS is active. Set to true whenever ABS is activated. Reset to false when ABS is off. 376 * 377 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 378 * @access VehiclePropertyAccess:READ 379 * 380 * @since o.mr1 381 */ 382 ABS_ACTIVE = ( 383 0x040A 384 | VehiclePropertyGroup:SYSTEM 385 | VehiclePropertyType:BOOLEAN 386 | VehicleArea:GLOBAL), 387 388 /** 389 * Traction Control is active. 390 * 391 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 392 * @access VehiclePropertyAccess:READ 393 * 394 * @since o.mr1 395 */ 396 TRACTION_CONTROL_ACTIVE = ( 397 0x040B 398 | VehiclePropertyGroup:SYSTEM 399 | VehiclePropertyType:BOOLEAN 400 | VehicleArea:GLOBAL), 401 402 /** 403 * Fan speed setting 404 * 405 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 406 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 407 * details. 408 * 409 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 410 * @access VehiclePropertyAccess:READ_WRITE 411 */ 412 HVAC_FAN_SPEED = ( 413 0x0500 414 | VehiclePropertyGroup:SYSTEM 415 | VehiclePropertyType:INT32 416 | VehicleArea:ZONE), 417 418 /** 419 * Fan direction setting 420 * 421 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 422 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 423 * details. 424 * 425 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 426 * @access VehiclePropertyAccess:READ_WRITE 427 * @data_enum VehicleHvacFanDirection 428 */ 429 HVAC_FAN_DIRECTION = ( 430 0x0501 431 | VehiclePropertyGroup:SYSTEM 432 | VehiclePropertyType:INT32 433 | VehicleArea:ZONE), 434 435 /** 436 * HVAC current temperature. 437 * 438 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 439 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 440 * details. 441 * 442 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 443 * @access VehiclePropertyAccess:READ_WRITE 444 */ 445 HVAC_TEMPERATURE_CURRENT = ( 446 0x0502 447 | VehiclePropertyGroup:SYSTEM 448 | VehiclePropertyType:FLOAT 449 | VehicleArea:ZONE), 450 451 /** 452 * HVAC, target temperature set. 453 * 454 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 455 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 456 * details. 457 * 458 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 459 * @access VehiclePropertyAccess:READ_WRITE 460 */ 461 HVAC_TEMPERATURE_SET = ( 462 0x0503 463 | VehiclePropertyGroup:SYSTEM 464 | VehiclePropertyType:FLOAT 465 | VehicleArea:ZONE), 466 467 /** 468 * On/off defrost 469 * 470 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 471 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 472 * details. 473 * 474 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 475 * @access VehiclePropertyAccess:READ_WRITE 476 */ 477 HVAC_DEFROSTER = ( 478 0x0504 479 | VehiclePropertyGroup:SYSTEM 480 | VehiclePropertyType:BOOLEAN 481 | VehicleArea:WINDOW), 482 483 /** 484 * On/off AC 485 * 486 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 487 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 488 * details. 489 * 490 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 491 * @access VehiclePropertyAccess:READ_WRITE 492 * @config_flags Supported zones 493 */ 494 HVAC_AC_ON = ( 495 0x0505 496 | VehiclePropertyGroup:SYSTEM 497 | VehiclePropertyType:BOOLEAN 498 | VehicleArea:ZONE), 499 500 /** 501 * On/off max AC 502 * 503 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 504 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 505 * details. 506 * 507 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 508 * @access VehiclePropertyAccess:READ_WRITE 509 */ 510 HVAC_MAX_AC_ON = ( 511 0x0506 512 | VehiclePropertyGroup:SYSTEM 513 | VehiclePropertyType:BOOLEAN 514 | VehicleArea:ZONE), 515 516 /** 517 * On/off max defrost 518 * 519 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 520 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 521 * details. 522 * 523 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 524 * @access VehiclePropertyAccess:READ_WRITE 525 */ 526 HVAC_MAX_DEFROST_ON = ( 527 0x0507 528 | VehiclePropertyGroup:SYSTEM 529 | VehiclePropertyType:BOOLEAN 530 | VehicleArea:ZONE), 531 532 /** 533 * On/off re-circulation 534 * 535 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 536 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 537 * details. 538 * 539 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 540 * @access VehiclePropertyAccess:READ_WRITE 541 */ 542 HVAC_RECIRC_ON = ( 543 0x0508 544 | VehiclePropertyGroup:SYSTEM 545 | VehiclePropertyType:BOOLEAN 546 | VehicleArea:ZONE), 547 548 /** 549 * On/off dual. This must be defined per each row. 550 * 551 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 552 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 553 * details. 554 * 555 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 556 * @access VehiclePropertyAccess:READ_WRITE 557 */ 558 HVAC_DUAL_ON = ( 559 0x0509 560 | VehiclePropertyGroup:SYSTEM 561 | VehiclePropertyType:BOOLEAN 562 | VehicleArea:ZONE), 563 564 /** 565 * On/off automatic mode 566 * 567 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 568 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 569 * details. 570 * 571 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 572 * @access VehiclePropertyAccess:READ_WRITE 573 */ 574 HVAC_AUTO_ON = ( 575 0x050A 576 | VehiclePropertyGroup:SYSTEM 577 | VehiclePropertyType:BOOLEAN 578 | VehicleArea:ZONE), 579 580 /** 581 * Seat temperature 582 * 583 * Negative values indicate cooling. 584 * 0 indicates off. 585 * Positive values indicate heating. 586 * 587 * Some vehicles may have multiple levels of heating and cooling. The 588 * min/max range defines the allowable range and number of steps in each 589 * direction. 590 * 591 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 592 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 593 * details. 594 * 595 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 596 * @access VehiclePropertyAccess:READ_WRITE 597 */ 598 HVAC_SEAT_TEMPERATURE = ( 599 0x050B 600 | VehiclePropertyGroup:SYSTEM 601 | VehiclePropertyType:INT32 602 | VehicleArea:SEAT), 603 604 /** 605 * Side Mirror Heat 606 * 607 * Increase values denote higher heating levels for side mirrors. 608 * 0 indicates heating is turned off. 609 * 610 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 611 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 612 * details. 613 * 614 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 615 * @access VehiclePropertyAccess:READ_WRITE 616 */ 617 HVAC_SIDE_MIRROR_HEAT = ( 618 0x050C 619 | VehiclePropertyGroup:SYSTEM 620 | VehiclePropertyType:INT32 621 | VehicleArea:MIRROR), 622 623 /** 624 * Steering Wheel Temperature 625 * 626 * Sets the temperature for the steering wheel 627 * Positive value indicates heating. 628 * Negative value indicates cooling. 629 * 0 indicates temperature control is off. 630 * 631 * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not 632 * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for 633 * details. 634 * 635 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 636 * @access VehiclePropertyAccess:READ_WRITE 637 */ 638 HVAC_STEERING_WHEEL_TEMP = ( 639 0x050D 640 | VehiclePropertyGroup:SYSTEM 641 | VehiclePropertyType:INT32 642 | VehicleArea:GLOBAL), 643 644 /** 645 * Temperature units 646 * 647 * Indicates whether the temperature is in Celsius, Fahrenheit, or a 648 * different unit from VehicleUnit enum. 649 * This parameter affects all HVAC temperatures in the system. 650 * 651 * IVehicle#get is not guaranteed to work if HVAC unit is off. See 652 * HVAC_POWER_ON property for details. 653 * 654 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 655 * @access VehiclePropertyAccess:READ 656 */ 657 HVAC_TEMPERATURE_UNITS = ( 658 0x050E 659 | VehiclePropertyGroup:SYSTEM 660 | VehiclePropertyType:INT32 661 | VehicleArea:ZONE), 662 663 /** 664 * Actual fan speed 665 * 666 * IVehicle#get is not guaranteed to work if HVAC unit is off. See 667 * HVAC_POWER_ON property for details. 668 * 669 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 670 * @access VehiclePropertyAccess:READ 671 */ 672 HVAC_ACTUAL_FAN_SPEED_RPM = ( 673 0x050F 674 | VehiclePropertyGroup:SYSTEM 675 | VehiclePropertyType:INT32 676 | VehicleArea:ZONE), 677 678 /** 679 * Represents power state for HVAC. Some HVAC properties must require 680 * matching power to be turned on to get out of OFF state. For non-zoned 681 * HVAC properties, VEHICLE_ALL_ZONE corresponds to global power state. 682 * 683 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 684 * @access VehiclePropertyAccess:READ_WRITE 685 * @config_string list of HVAC properties whose power is controlled by this 686 * property. Format is hexa-decimal number (0x...) separated 687 * by comma like "0x500,0x503". All zones defined in these 688 * affected properties must be available in the property. 689 */ 690 HVAC_POWER_ON = ( 691 0x0510 692 | VehiclePropertyGroup:SYSTEM 693 | VehiclePropertyType:BOOLEAN 694 | VehicleArea:ZONE), 695 696 /** 697 * Fan Positions Available 698 * 699 * This is a bit mask of fan positions available for the zone. Each entry in 700 * vehicle_hvac_fan_direction is selected by bit position. For instance, if 701 * only the FAN_DIRECTION_FACE (0x1) and FAN_DIRECTION_DEFROST (0x4) are available, 702 * then this value shall be set to 0x12. 703 * 704 * 0x12 = (1 << 1) | (1 << 4) 705 * 706 * @change_mode VehiclePropertyChangeMode:STATIC 707 * @access VehiclePropertyAccess:READ 708 */ 709 HVAC_FAN_DIRECTION_AVAILABLE = ( 710 0x0511 711 | VehiclePropertyGroup:SYSTEM 712 | VehiclePropertyType:INT32 713 | VehicleArea:ZONE), 714 715 /** 716 * Automatic re-circulation on/off 717 * 718 * IVehicle#set and IVehicle#get must return StatusCode::NOT_AVAILABLE when HVAC unit is off. 719 * See HVAC_POWER_ON property for details. 720 * 721 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 722 * @access VehiclePropertyAccess:READ_WRITE 723 * 724 * @since o.mr1 725 */ 726 HVAC_AUTO_RECIRC_ON = ( 727 0x0512 728 | VehiclePropertyGroup:SYSTEM 729 | VehiclePropertyType:BOOLEAN 730 | VehicleArea:ZONE), 731 732 /** 733 * Outside temperature 734 * 735 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 736 * @access VehiclePropertyAccess:READ 737 * @unit VehicleUnit:CELSIUS 738 */ 739 ENV_OUTSIDE_TEMPERATURE = ( 740 0x0703 741 | VehiclePropertyGroup:SYSTEM 742 | VehiclePropertyType:FLOAT 743 | VehicleArea:GLOBAL), 744 745 /** 746 * Cabin temperature 747 * 748 * @change_mode VehiclePropertyChangeMode:ON_CHANGE|VehiclePropertyChangeMode:CONTINUOUS 749 * @access VehiclePropertyAccess:READ 750 * @unit VehicleUnit:CELSIUS 751 */ 752 ENV_CABIN_TEMPERATURE = ( 753 0x0704 754 | VehiclePropertyGroup:SYSTEM 755 | VehiclePropertyType:FLOAT 756 | VehicleArea:GLOBAL), 757 758 /** 759 * Radio presets stored on the Car radio module. The data type used is int32 760 * array with the following fields: 761 * <ul> 762 * <li> int32Values[0]: Preset number </li> 763 * <li> int32Values[1]: Band type (see #RADIO_BAND_FM in 764 * system/core/include/system/radio.h). 765 * <li> int32Values[2]: Channel number </li> 766 * <li> int32Values[3]: Sub channel number </li> 767 * </ul> 768 * 769 * NOTE: When getting a current preset config ONLY set preset number (i.e. 770 * int32Values[0]). For setting a preset other fields are required. 771 * 772 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 773 * @access VehiclePropertyAccess:READ_WRITE 774 * @config_flags Number of presets supported 775 */ 776 RADIO_PRESET = ( 777 0x0801 778 | VehiclePropertyGroup:SYSTEM 779 | VehiclePropertyType:INT32_VEC 780 | VehicleArea:GLOBAL), 781 782 /** 783 * Represents audio focus state of Android side. Note that car's audio 784 * module must own audio focus and grant audio focus to Android side when 785 * requested by Android side. The focus has both per stream characteristics 786 * and global characteristics. 787 * 788 * Focus request (get of this property) must take the following form with indices defined 789 * by VehicleAudioFocusIndex: 790 * int32Values[0]: VehicleAudioFocusRequest type 791 * int32Values[1]: bit flags of streams requested by this focus request. 792 * There can be up to 32 streams. 793 * int32Values[2]: External focus state flags. For request, only flag like 794 * VehicleAudioExtFocusFlag#PLAY_ONLY_FLAG or 795 * VehicleAudioExtFocusFlag#MUTE_MEDIA_FLAG can be 796 * used. 797 * VehicleAudioExtFocusFlag#PLAY_ONLY_FLAG is for case 798 * like radio where android side app still needs to hold 799 * focus but playback is done outside Android. 800 * VehicleAudioExtFocusFlag#MUTE_MEDIA_FLAG is for 801 * muting media channel including radio. 802 * VehicleAudioExtFocusFlag#PLAY_ONLY_FLAG can be set 803 * even if android side releases focus (request type 804 * REQUEST_RELEASE). In that case, audio module must 805 * maintain mute state until user's explicit action to 806 * play some media. 807 * int32Values[3]: Audio contexts wishing to be active. Use combination of 808 * flags from VehicleAudioContextFlag. 809 * This can be used as a hint to adjust audio policy or 810 * other policy decision. 811 * Note that there can be multiple context active at the 812 * same time. And android can send the same focus request 813 * type gain due to change in audio contexts. 814 * Note that each focus request can request multiple streams that is 815 * expected to be used for the current request. But focus request itself 816 * is global behavior as GAIN or GAIN_TRANSIENT expects all sounds played 817 * by car's audio module to stop. Note that stream already allocated to 818 * android before this focus request must not be affected by focus 819 * request. 820 * 821 * Focus response (set and subscription callback for this property) must 822 * take the following form with indices defined by VehicleAudioFocusIndex: 823 * int32Values[0]: VehicleAudioFocusState type 824 * int32Values[1]: bit flags of streams allowed. 825 * int32Values[2]: External focus state: bit flags of currently active 826 * audio focus in car side (outside Android). Active 827 * audio focus does not necessarily mean currently 828 * playing, but represents the state of having focus or 829 * waiting for focus (pause state). 830 * One or combination of flags from 831 * VehicleAudioExtFocusFlag. 832 * 0 means no active audio focus holder outside Android. 833 * The state must have following values for each 834 * VehicleAudioFocusState: 835 * GAIN: VehicleAudioExtFocusFlag#PLAY_ONLY_FLAG 836 * when radio is active in Android side. Otherwise, 837 * VehicleAudioExtFocusFlag#NONE_FLAG. 838 * GAIN_TRANSIENT: Can be 839 * VehicleAudioExtFocusFlag#PERMANENT_FLAG or 840 * VehicleAudioExtFocusFlag#TRANSIENT_FLAG if android 841 * side has requested 842 * REQUEST_GAIN_TRANSIENT_MAY_DUCK and car side is 843 * ducking. Otherwise 844 * VehicleAudioExtFocusFlag#NONE_FLAG. 845 * LOSS: VehicleAudioExtFocusFlag#NONE_FLAG when no focus 846 * is active in car side. 847 * VehicleAudioExtFocusFlag#PERMANENT_FLAG when car 848 * side is playing something permanent. 849 * LOSS_TRANSIENT: must always be 850 * VehicleAudioExtFocusFlag#PERMANENT_FLAG 851 * int32Values[3]: Audio context(s) allowed to be active. When responding positively to a 852 * focus request from Android, the request's original context must be 853 * repeated here. When taking focus away, or denying a request, the 854 * rejected or stopped context would have its corresponding bit cleared. 855 * 856 * A focus response must be sent per each focus request even if there is 857 * no change in focus state. This can happen in case like focus request 858 * only involving context change where android side still needs matching 859 * focus response to confirm that audio module has made necessary changes. 860 * 861 * If car does not support AUDIO_FOCUS, focus is assumed to be granted 862 * always. 863 * 864 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 865 * @access VehiclePropertyAccess:READ_WRITE 866 */ 867 AUDIO_FOCUS = ( 868 0x0900 869 | VehiclePropertyGroup:SYSTEM 870 | VehiclePropertyType:INT32_VEC 871 | VehicleArea:GLOBAL), 872 873 /** 874 * A property to allow external component to control audio focus. Depending on 875 * H/W architecture, audio HAL may need to control audio focus while vehicle 876 * HAL is still interacting with upper layer. In such case, audio HAL may set 877 * this property and vehicle HAL may use this property value to decide 878 * response sent through AUDIO_FOCUS property. 879 * Data format is the same as AUDIO_FOCUS property. 880 * 881 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 882 * @access VehiclePropertyAccess:READ_WRITE 883 */ 884 AUDIO_FOCUS_EXT_SYNC = ( 885 0x0910 886 | VehiclePropertyGroup:SYSTEM 887 | VehiclePropertyType:INT32_VEC 888 | VehicleArea:GLOBAL), 889 890 /** 891 * Property to control audio volume of each audio context. 892 * 893 * VehiclePropConfig 894 * configArray[0] : bit flags of all supported audio contexts from 895 * VehicleAudioContextFlag. If this is 0, audio volume 896 * is controlled per physical stream. 897 * configArray[1] : flags defined in VehicleAudioVolumeCapabilityFlag to 898 * represent audio module's capability. 899 * configArray[2..3] : reserved 900 * configArray[4..N+3] : maximum values for each audio context, where N is 901 * the number of audio contexts provided in 902 * configArray[0], minimum value is always 0 which 903 * indicates mute state. 904 * 905 * Data type looks like: 906 * int32Values[0] : audio context as defined in VehicleAudioContextFlag. 907 * If only physical stream is supported 908 * (configArray[0] == 0), this must represent physical 909 * stream number. 910 * int32Values[1] : volume level, valid range is 0 (mute) to max level 911 * defined in the config. 912 * int32Values[2] : One of VehicleAudioVolumeState. 913 * 914 * HAL implementations must check the incoming value of audio context 915 * field in get call to return the right volume. 916 * 917 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 918 * @access VehiclePropertyAccess:READ_WRITE 919 * @config_flags all audio contexts supported. 920 */ 921 AUDIO_VOLUME = ( 922 0x0901 923 | VehiclePropertyGroup:SYSTEM 924 | VehiclePropertyType:INT32_VEC 925 | VehicleArea:GLOBAL), 926 927 /** 928 * Property to allow audio volume sync from external components like audio HAL. 929 * Some vehicle HAL implementation may get volume control from audio HAL and in such 930 * case, setting AUDIO_VOLUME_EXT_SYNC property may trigger event in AUDIO_VOLUME property. 931 * Data format for this property is the same as AUDIO_VOLUME property. 932 * 933 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 934 * @access VehiclePropertyAccess:READ_WRITE 935 * @config_flags all audio contexts supported. 936 */ 937 AUDIO_VOLUME_EXT_SYNC = ( 938 0x0911 939 | VehiclePropertyGroup:SYSTEM 940 | VehiclePropertyType:INT32_VEC 941 | VehicleArea:GLOBAL), 942 943 /** 944 * Property for handling volume limit set by user. This limits maximum 945 * volume that can be set per each context or physical stream. 946 * 947 * VehiclePropConfig 948 * configArray[0] : bit flags of all supported audio contexts. If this is 949 * 0, audio volume is controlled per physical stream. 950 * configArray[1] : flags defined in VehicleAudioVolumeCapabilityFlag 951 * to represent audio module's capability. 952 * 953 * Data type looks like: 954 * int32Values[0] : audio context as defined in VehicleAudioContextFlag. 955 * If only physical stream is supported 956 * (configArray[0] == 0), this must represent physical 957 * stream number. 958 * int32Values[1] : maximum volume set to the stream. If there is no 959 * restriction, this value must be equal to 960 * AUDIO_VOLUME's max value. 961 * 962 * If car does not support this feature, this property must not be 963 * populated by HAL. 964 * HAL implementations must check the incoming value of audio context 965 * field in get call to return the right volume. 966 * 967 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 968 * @access VehiclePropertyAccess:READ_WRITE 969 * @config_flags all audio contexts supported. 970 */ 971 AUDIO_VOLUME_LIMIT = ( 972 0x0902 973 | VehiclePropertyGroup:SYSTEM 974 | VehiclePropertyType:INT32_VEC 975 | VehicleArea:GLOBAL), 976 977 /** 978 * Property to share audio routing policy of android side. This property is 979 * set at startup to pass audio policy in android side down to 980 * vehicle HAL and car audio module. 981 * 982 * int32Values[0] : audio stream where the audio for the application 983 * context must be routed by default. Note that this is 984 * the default setting from system, but each app may 985 * still use different audio stream for whatever reason. 986 * int32Values[1] : All audio contexts that must be sent through the 987 * physical stream. Flag is defined in 988 * VehicleAudioContextFlag. 989 990 * Setting of this property must be done for all available physical streams 991 * based on audio H/W variant information acquired from AUDIO_HW_VARIANT 992 * property. 993 * 994 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 995 * @access VehiclePropertyAccess:WRITE 996 */ 997 AUDIO_ROUTING_POLICY = ( 998 0x0903 999 | VehiclePropertyGroup:SYSTEM 1000 | VehiclePropertyType:INT32_VEC 1001 | VehicleArea:GLOBAL), 1002 1003 /** 1004 * Property to return audio H/W variant type used in this car. This is a 1005 * zero based index into the set of audio routing policies defined in 1006 * R.array.audioRoutingPolicy on CarService, which may be overlaid to 1007 * support multiple variants. If this property does not exist, the default 1008 * audio policy must be used. 1009 * 1010 * @change_mode VehiclePropertyChangeMode:STATIC 1011 * @access VehiclePropertyAccess:READ 1012 * @config_flags Additional info on audio H/W. Must use 1013 * VehicleAudioHwVariantConfigFlag for this. 1014 */ 1015 AUDIO_HW_VARIANT = ( 1016 0x0904 1017 | VehiclePropertyGroup:SYSTEM 1018 | VehiclePropertyType:INT32 1019 | VehicleArea:GLOBAL), 1020 1021 /** 1022 * Property to pass hint on external audio routing. When android side 1023 * request focus with VehicleAudioExtFocusflag, this 1024 * property must be set before setting AUDIO_FOCUS property as a hint for 1025 * external audio source routing. 1026 * Note that setting this property alone must not trigger any change. 1027 * Audio routing must be changed only when AUDIO_FOCUS property is set. 1028 * Note that this property allows passing custom value as long as it is 1029 * defined in VehiclePropConfig#configString. This allows supporting 1030 * non-standard routing options through this property. 1031 * It is recommended to use separate name space for custom property to 1032 * prevent conflict in future android releases. 1033 * Enabling each external routing option is done by enabling each bit flag 1034 * for the routing. 1035 * This property can support up to 128 external routings. 1036 * To give full flexibility, there is no standard definition for each bit 1037 * flag and assigning each bit flag to specific routing type is decided by 1038 * VehiclePropConfig#configString. VehiclePropConfig#configString has 1039 * format of each entry separated by ',' and each entry has format of 1040 * bitFlagPositon:typeString[:physicalStreamNumber]. 1041 * bitFlagPosition: represents which bit flag will be set to enable this 1042 * routing. 0 means LSB in int32Values[0]. 31 will be MSB in 1043 * int32Values[0]. 127 will MSB in int32Values[3]. 1044 * typeString: string representation of external routing. Some types are 1045 * already defined in AUDIO_EXT_ROUTING_SOURCE_* and use them first 1046 * before adding something custom. Applications will find each routing 1047 * using this string. 1048 * physicalStreamNumber: This part is optional and represents physical 1049 * stream to android which will be disabled when this routing is enabled. 1050 * If not specified, this routing must not affect physical streams to 1051 * android. 1052 * As an example, let's assume a system with two physical streams, 0 for 1053 * media and 1 for nav guidance. And let's assume external routing option 1054 * of am fm radio, external navigation guidance, satellite radio, and one 1055 * custom. Let's assume that radio and satellite replaces physical stream 0 1056 * and external navigation replaces physical stream 1. And bit flag will be 1057 * assigned in the order listed above. This configuration will look like 1058 * this in config_string: 1059 * "0:RADIO_AM_FM:0,1:EXT_NAV_GUIDANCE:1,2:RADIO_SATELLITE:0,3:com.test.SOMETHING_CUSTOM" 1060 * When android requests RADIO_AM_FM, int32Values[0] will be set to 0x1. 1061 * When android requests RADIO_SATELLITE + EXT_NAV_GUIDANCE, int32Values[0] 1062 * will be set to 0x2|0x4. 1063 * 1064 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1065 * @access VehiclePropertyAccess:READ_WRITE 1066 * @config_string List of all avaiable external source in the system. 1067 */ 1068 AUDIO_EXT_ROUTING_HINT = ( 1069 0x0905 1070 | VehiclePropertyGroup:SYSTEM 1071 | VehiclePropertyType:INT32_VEC 1072 | VehicleArea:GLOBAL), 1073 1074 /** 1075 * Represents state of audio stream. Audio HAL should set this when a stream is starting or 1076 * ending. Car service can request focus for audio played without focus. If such feature 1077 * is not required, this property does not need to be implemented. 1078 * Car service only monitors setting of this property. It is up to each vehicle HAL 1079 * implementation to add necessary action but default implementation will be doing nothing on 1080 * this propery's set from audio HAL. 1081 * Actual streaming of data should be done only after getting focus for the given stream from 1082 * car audio module. Focus can be already granted when stream is started. Focus state can be 1083 * monitored by monitoring AUDIO_FOCUS property. If car does not support 1084 * AUDIO_FOCUS property, there is no need to monitor focus as focus is assumed to be 1085 * granted always. 1086 * Data has the following format: 1087 * int32_array[0] : vehicle_audio_stream_state, 0: stopped, 1: started 1088 * int32_array[1] : stream number like 0, 1, 2, ... 1089 * 1090 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1091 * @access VehiclePropertyAccess:READ_WRITE 1092 */ 1093 AUDIO_STREAM_STATE = ( 1094 0x0906 1095 | VehiclePropertyGroup:SYSTEM 1096 | VehiclePropertyType:INT32_VEC 1097 | VehicleArea:GLOBAL), 1098 1099 /** 1100 * Property to control car specific audio parameters. Each parameter is defined as string key- 1101 * value pair. 1102 * set and event notification can pass multiple parameters using the 1103 * following format: 1104 * key1=value1;key2=value2;... 1105 * get call can request multiple parameters using the following format: 1106 * key1;key2;... 1107 * Response for get call has the same format as set. 1108 * 1109 * VehiclePropConfig 1110 * configString: give list of all supported keys with ; as separator. For example: 1111 * key1;key2;... 1112 * 1113 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1114 * @access VehiclePropertyAccess:READ_WRITE 1115 */ 1116 AUDIO_PARAMETERS = ( 1117 0x907 1118 | VehiclePropertyGroup:SYSTEM 1119 | VehiclePropertyType:STRING 1120 | VehicleArea:GLOBAL), 1121 1122 /** 1123 * Property to control power state of application processor 1124 * 1125 * It is assumed that AP's power state is controller by separate power 1126 * controller. 1127 * 1128 * For configuration information, VehiclePropConfig.configFlags can 1129 * have bit flag combining values in VehicleApPowerStateConfigFlag. 1130 * 1131 * Value format for IVehicle#get / IVehicle#subscribe: 1132 * int32Values[0] : vehicle_ap_power_state_type 1133 * int32Values[1] : additional parameter relevant for each state, 1134 * 0 if not used. 1135 * Value format for IVehicle#set: 1136 * int32Values[0] : vehicle_ap_power_state_set_type 1137 * int32Values[1] : additional parameter relevant for each request. should be 0 if not used. 1138 * 1139 * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE 1140 * @access VEHICLE_PROP_ACCESS_READ_WRITE 1141 */ 1142 AP_POWER_STATE = ( 1143 0x0A00 1144 | VehiclePropertyGroup:SYSTEM 1145 | VehiclePropertyType:INT32_VEC 1146 | VehicleArea:GLOBAL), 1147 1148 /** 1149 * Property to represent brightness of the display. Some cars have single 1150 * control for the brightness of all displays and this property is to share 1151 * change in that control. 1152 * 1153 * If this is writable, android side can set this value when user changes 1154 * display brightness from Settings. If this is read only, user may still 1155 * change display brightness from Settings, but that will not be reflected 1156 * to other displays. 1157 * 1158 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1159 * @access VehiclePropertyAccess:READ_WRITE 1160 */ 1161 DISPLAY_BRIGHTNESS = ( 1162 0x0A01 1163 | VehiclePropertyGroup:SYSTEM 1164 | VehiclePropertyType:INT32 1165 | VehicleArea:GLOBAL), 1166 1167 /** 1168 * Property to report bootup reason for the current power on. This is a 1169 * static property that will not change for the whole duration until power 1170 * off. For example, even if user presses power on button after automatic 1171 * power on with door unlock, bootup reason must stay with 1172 * VehicleApPowerBootupReason#USER_UNLOCK. 1173 * 1174 * int32Values[0] must be VehicleApPowerBootupReason. 1175 * 1176 * @change_mode VehiclePropertyChangeMode:STATIC 1177 * @access VehiclePropertyAccess:READ 1178 */ 1179 AP_POWER_BOOTUP_REASON = ( 1180 0x0A02 1181 | VehiclePropertyGroup:SYSTEM 1182 | VehiclePropertyType:INT32 1183 | VehicleArea:GLOBAL), 1184 1185 /** 1186 * Property to feed H/W input events to android 1187 * 1188 * int32Values[0] : action defined by VehicleHwKeyInputAction 1189 * int32Values[1] : key code, must use standard android key code 1190 * int32Values[2] : target display defined in VehicleDisplay. Events not 1191 * tied to specific display must be sent to 1192 * VehicleDisplay#MAIN. 1193 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1194 * @access VehiclePropertyAccess:READ 1195 * @config_flags 1196 */ 1197 HW_KEY_INPUT = ( 1198 0x0A10 1199 | VehiclePropertyGroup:SYSTEM 1200 | VehiclePropertyType:INT32_VEC 1201 | VehicleArea:GLOBAL), 1202 1203 /** 1204 * Property to define instrument cluster information. 1205 * For VehicleInstrumentClusterType:EXTERNAL_DISPLAY: 1206 * READ: 1207 * int32Values[0] : The current screen mode index. Screen mode is defined 1208 * as a configuration in car service and represents 1209 * which area of screen is renderable. 1210 * int32Values[1] : Android can render to instrument cluster (=1) or 1211 * not(=0). When this is 0, instrument cluster may be 1212 * rendering some information in the area allocated for 1213 * android and android side rendering is invisible. 1214 * WRITE from android: 1215 * int32Values[0] : Preferred mode for android side. Depending on the app 1216 * rendering to instrument cluster, preferred mode can 1217 * change. Instrument cluster still needs to send 1218 * event with new mode to trigger actual mode change. 1219 * int32Values[1] : The current app context relevant for instrument 1220 * cluster. Use the same flag with 1221 * VehicleAudioContextFlag but this context represents 1222 * active apps, not active audio. Instrument cluster 1223 * side may change mode depending on the currently 1224 * active contexts. 1225 * When system boots up, Android side will write {0, 0, 0, 0} when it is 1226 * ready to render to instrument cluster. Before this message, rendering 1227 * from android must not be visible in the cluster. 1228 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1229 * @access VehiclePropertyAccess:READ_WRITE 1230 * @configArray 0:VehicleInstrumentClusterType 1:hw type 1231 */ 1232 INSTRUMENT_CLUSTER_INFO = ( 1233 0x0A20 1234 | VehiclePropertyGroup:SYSTEM 1235 | VehiclePropertyType:INT32_VEC 1236 | VehicleArea:GLOBAL), 1237 1238 /** 1239 * Current date and time, encoded as Unix time. 1240 * This value denotes the number of seconds that have elapsed since 1241 * 1/1/1970. 1242 * 1243 * @change_mode VehiclePropertyChangeMode:ON_SET 1244 * @access VehiclePropertyAccess:READ_WRITE 1245 * @unit VehicleUnit:SECS 1246 */ 1247 UNIX_TIME = ( 1248 0x0A30 1249 | VehiclePropertyGroup:SYSTEM 1250 | VehiclePropertyType:INT64 1251 | VehicleArea:GLOBAL), 1252 1253 /** 1254 * Current time only. 1255 * Some vehicles may not keep track of date. This property only affects 1256 * the current time, in seconds during the day. Thus, the max value for 1257 * this parameter is 86,400 (24 * 60 * 60) 1258 * 1259 * @change_mode VehiclePropertyChangeMode:ON_SET 1260 * @access VehiclePropertyAccess:READ_WRITE 1261 * @unit VehicleUnit:SECS 1262 */ 1263 CURRENT_TIME_IN_SECONDS = ( 1264 0x0A31 1265 | VehiclePropertyGroup:SYSTEM 1266 | VehiclePropertyType:INT32 1267 | VehicleArea:GLOBAL), 1268 1269 /** 1270 * Door position 1271 * 1272 * This is an integer in case a door may be set to a particular position. 1273 * Max value indicates fully open, min value (0) indicates fully closed. 1274 * 1275 * Some vehicles (minivans) can open the door electronically. Hence, the 1276 * ability to write this property. 1277 * 1278 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1279 * @access VehiclePropertyAccess:READ_WRITE 1280 */ 1281 DOOR_POS = ( 1282 0x0B00 1283 | VehiclePropertyGroup:SYSTEM 1284 | VehiclePropertyType:INT32 1285 | VehicleArea:DOOR), 1286 1287 /** 1288 * Door move 1289 * 1290 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1291 * @access VehiclePropertyAccess:READ_WRITE 1292 */ 1293 DOOR_MOVE = ( 1294 0x0B01 1295 | VehiclePropertyGroup:SYSTEM 1296 | VehiclePropertyType:INT32 1297 | VehicleArea:DOOR), 1298 1299 /** 1300 * Door lock 1301 * 1302 * 'true' indicates door is locked 1303 * 1304 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1305 * @access VehiclePropertyAccess:READ_WRITE 1306 */ 1307 DOOR_LOCK = ( 1308 0x0B02 1309 | VehiclePropertyGroup:SYSTEM 1310 | VehiclePropertyType:BOOLEAN 1311 | VehicleArea:DOOR), 1312 1313 /** 1314 * Mirror Z Position 1315 * 1316 * Positive value indicates tilt upwards, negative value is downwards 1317 * 1318 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1319 * @access VehiclePropertyAccess:READ_WRITE 1320 */ 1321 MIRROR_Z_POS = ( 1322 0x0B40 1323 | VehiclePropertyGroup:SYSTEM 1324 | VehiclePropertyType:INT32 1325 | VehicleArea:MIRROR), 1326 1327 /** 1328 * Mirror Z Move 1329 * 1330 * Positive value indicates tilt upwards, negative value is downwards 1331 * 1332 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1333 * @access VehiclePropertyAccess:READ_WRITE 1334 */ 1335 MIRROR_Z_MOVE = ( 1336 0x0B41 1337 | VehiclePropertyGroup:SYSTEM 1338 | VehiclePropertyType:INT32 1339 | VehicleArea:MIRROR), 1340 1341 /** 1342 * Mirror Y Position 1343 * 1344 * Positive value indicate tilt right, negative value is left 1345 * 1346 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1347 * @access VehiclePropertyAccess:READ_WRITE 1348 */ 1349 MIRROR_Y_POS = ( 1350 0x0B42 1351 | VehiclePropertyGroup:SYSTEM 1352 | VehiclePropertyType:INT32 1353 | VehicleArea:MIRROR), 1354 1355 /** 1356 * Mirror Y Move 1357 * 1358 * Positive value indicate tilt right, negative value is left 1359 * 1360 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1361 * @access VehiclePropertyAccess:READ_WRITE 1362 */ 1363 MIRROR_Y_MOVE = ( 1364 0x0B43 1365 | VehiclePropertyGroup:SYSTEM 1366 | VehiclePropertyType:INT32 1367 | VehicleArea:MIRROR), 1368 1369 /** 1370 * Mirror Lock 1371 * 1372 * True indicates mirror positions are locked and not changeable 1373 * 1374 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1375 * @access VehiclePropertyAccess:READ_WRITE 1376 */ 1377 MIRROR_LOCK = ( 1378 0x0B44 1379 | VehiclePropertyGroup:SYSTEM 1380 | VehiclePropertyType:BOOLEAN 1381 | VehicleArea:GLOBAL), 1382 1383 /** 1384 * Mirror Fold 1385 * 1386 * True indicates mirrors are folded 1387 * 1388 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1389 * @access VehiclePropertyAccess:READ_WRITE 1390 */ 1391 MIRROR_FOLD = ( 1392 0x0B45 1393 | VehiclePropertyGroup:SYSTEM 1394 | VehiclePropertyType:BOOLEAN 1395 | VehicleArea:GLOBAL), 1396 1397 /** 1398 * Seat memory select 1399 * 1400 * This parameter selects the memory preset to use to select the seat 1401 * position. The minValue is always 0, and the maxValue determines the 1402 * number of seat positions available. 1403 * 1404 * For instance, if the driver's seat has 3 memory presets, the maxValue 1405 * will be 3. When the user wants to select a preset, the desired preset 1406 * number (1, 2, or 3) is set. 1407 * 1408 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1409 * @access VehiclePropertyAccess:WRITE 1410 */ 1411 SEAT_MEMORY_SELECT = ( 1412 0x0B80 1413 | VehiclePropertyGroup:SYSTEM 1414 | VehiclePropertyType:INT32 1415 | VehicleArea:SEAT), 1416 1417 /** 1418 * Seat memory set 1419 * 1420 * This setting allows the user to save the current seat position settings 1421 * into the selected preset slot. The maxValue for each seat position 1422 * shall match the maxValue for SEAT_MEMORY_SELECT. 1423 * 1424 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1425 * @access VehiclePropertyAccess:WRITE 1426 */ 1427 SEAT_MEMORY_SET = ( 1428 0x0B81 1429 | VehiclePropertyGroup:SYSTEM 1430 | VehiclePropertyType:INT32 1431 | VehicleArea:SEAT), 1432 1433 /** 1434 * Seatbelt buckled 1435 * 1436 * True indicates belt is buckled. 1437 * 1438 * Write access indicates automatic seat buckling capabilities. There are 1439 * no known cars at this time, but you never know... 1440 * 1441 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1442 * @access VehiclePropertyAccess:READ_WRITE 1443 */ 1444 SEAT_BELT_BUCKLED = ( 1445 0x0B82 1446 | VehiclePropertyGroup:SYSTEM 1447 | VehiclePropertyType:BOOLEAN 1448 | VehicleArea:SEAT), 1449 1450 /** 1451 * Seatbelt height position 1452 * 1453 * Adjusts the shoulder belt anchor point. 1454 * Max value indicates highest position 1455 * Min value indicates lowest position 1456 * 1457 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1458 * @access VehiclePropertyAccess:READ_WRITE 1459 */ 1460 SEAT_BELT_HEIGHT_POS = ( 1461 0x0B83 1462 | VehiclePropertyGroup:SYSTEM 1463 | VehiclePropertyType:INT32 1464 | VehicleArea:SEAT), 1465 1466 /** 1467 * Seatbelt height move 1468 * 1469 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1470 * @access VehiclePropertyAccess:READ_WRITE 1471 */ 1472 SEAT_BELT_HEIGHT_MOVE = ( 1473 0x0B84 1474 | VehiclePropertyGroup:SYSTEM 1475 | VehiclePropertyType:INT32 1476 | VehicleArea:SEAT), 1477 1478 /** 1479 * Seat fore/aft position 1480 * 1481 * Sets the seat position forward (closer to steering wheel) and backwards. 1482 * Max value indicates closest to wheel, min value indicates most rearward 1483 * position. 1484 * 1485 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1486 * @access VehiclePropertyAccess:READ_WRITE 1487 */ 1488 SEAT_FORE_AFT_POS = ( 1489 0x0B85 1490 | VehiclePropertyGroup:SYSTEM 1491 | VehiclePropertyType:INT32 1492 | VehicleArea:SEAT), 1493 1494 /** 1495 * Seat fore/aft move 1496 * 1497 * Moves the seat position forward and aft. 1498 * 1499 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1500 * @access VehiclePropertyAccess:READ_WRITE 1501 */ 1502 SEAT_FORE_AFT_MOVE = ( 1503 0x0B86 1504 | VehiclePropertyGroup:SYSTEM 1505 | VehiclePropertyType:INT32 1506 | VehicleArea:SEAT), 1507 1508 /** 1509 * Seat backrest angle 1 position 1510 * 1511 * Backrest angle 1 is the actuator closest to the bottom of the seat. 1512 * Max value indicates angling forward towards the steering wheel. 1513 * Min value indicates full recline. 1514 * 1515 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1516 * @access VehiclePropertyAccess:READ_WRITE 1517 */ 1518 SEAT_BACKREST_ANGLE_1_POS = ( 1519 0x0B87 1520 | VehiclePropertyGroup:SYSTEM 1521 | VehiclePropertyType:INT32 1522 | VehicleArea:SEAT), 1523 1524 /** 1525 * Seat backrest angle 1 move 1526 * 1527 * Moves the backrest forward or recline. 1528 * 1529 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1530 * @access VehiclePropertyAccess:READ_WRITE 1531 */ 1532 SEAT_BACKREST_ANGLE_1_MOVE = ( 1533 0x0B88 1534 | VehiclePropertyGroup:SYSTEM 1535 | VehiclePropertyType:INT32 1536 | VehicleArea:SEAT), 1537 1538 /** 1539 * Seat backrest angle 2 position 1540 * 1541 * Backrest angle 2 is the next actuator up from the bottom of the seat. 1542 * Max value indicates angling forward towards the steering wheel. 1543 * Min value indicates full recline. 1544 * 1545 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1546 * @access VehiclePropertyAccess:READ_WRITE 1547 */ 1548 SEAT_BACKREST_ANGLE_2_POS = ( 1549 0x0B89 1550 | VehiclePropertyGroup:SYSTEM 1551 | VehiclePropertyType:INT32 1552 | VehicleArea:SEAT), 1553 1554 /** 1555 * Seat backrest angle 2 move 1556 * 1557 * Moves the backrest forward or recline. 1558 * 1559 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1560 * @access VehiclePropertyAccess:READ_WRITE 1561 */ 1562 SEAT_BACKREST_ANGLE_2_MOVE = ( 1563 0x0B8A 1564 | VehiclePropertyGroup:SYSTEM 1565 | VehiclePropertyType:INT32 1566 | VehicleArea:SEAT), 1567 1568 /** 1569 * Seat height position 1570 * 1571 * Sets the seat height. 1572 * Max value indicates highest position. 1573 * Min value indicates lowest position. 1574 * 1575 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1576 * @access VehiclePropertyAccess:READ_WRITE 1577 */ 1578 SEAT_HEIGHT_POS = ( 1579 0x0B8B 1580 | VehiclePropertyGroup:SYSTEM 1581 | VehiclePropertyType:INT32 1582 | VehicleArea:SEAT), 1583 1584 /** 1585 * Seat height move 1586 * 1587 * Moves the seat height. 1588 * 1589 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1590 * @access VehiclePropertyAccess:READ_WRITE 1591 */ 1592 SEAT_HEIGHT_MOVE = ( 1593 0x0B8C 1594 | VehiclePropertyGroup:SYSTEM 1595 | VehiclePropertyType:INT32 1596 | VehicleArea:SEAT), 1597 1598 /** 1599 * Seat depth position 1600 * 1601 * Sets the seat depth, distance from back rest to front edge of seat. 1602 * Max value indicates longest depth position. 1603 * Min value indicates shortest position. 1604 * 1605 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1606 * @access VehiclePropertyAccess:READ_WRITE 1607 */ 1608 SEAT_DEPTH_POS = ( 1609 0x0B8D 1610 | VehiclePropertyGroup:SYSTEM 1611 | VehiclePropertyType:INT32 1612 | VehicleArea:SEAT), 1613 1614 /** 1615 * Seat depth move 1616 * 1617 * Adjusts the seat depth. 1618 * 1619 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1620 * @access VehiclePropertyAccess:READ_WRITE 1621 */ 1622 SEAT_DEPTH_MOVE = ( 1623 0x0B8E 1624 | VehiclePropertyGroup:SYSTEM 1625 | VehiclePropertyType:INT32 1626 | VehicleArea:SEAT), 1627 1628 /** 1629 * Seat tilt position 1630 * 1631 * Sets the seat tilt. 1632 * Max value indicates front edge of seat higher than back edge. 1633 * Min value indicates front edge of seat lower than back edge. 1634 * 1635 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1636 * @access VehiclePropertyAccess:READ_WRITE 1637 */ 1638 SEAT_TILT_POS = ( 1639 0x0B8F 1640 | VehiclePropertyGroup:SYSTEM 1641 | VehiclePropertyType:INT32 1642 | VehicleArea:SEAT), 1643 1644 /** 1645 * Seat tilt move 1646 * 1647 * Tilts the seat. 1648 * 1649 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1650 * @access VehiclePropertyAccess:READ_WRITE 1651 */ 1652 SEAT_TILT_MOVE = ( 1653 0x0B90 1654 | VehiclePropertyGroup:SYSTEM 1655 | VehiclePropertyType:INT32 1656 | VehicleArea:SEAT), 1657 1658 /** 1659 * Lumber fore/aft position 1660 * 1661 * Pushes the lumbar support forward and backwards 1662 * Max value indicates most forward position. 1663 * Min value indicates most rearward position. 1664 * 1665 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1666 * @access VehiclePropertyAccess:READ_WRITE 1667 */ 1668 SEAT_LUMBAR_FORE_AFT_POS = ( 1669 0x0B91 1670 | VehiclePropertyGroup:SYSTEM 1671 | VehiclePropertyType:INT32 1672 | VehicleArea:SEAT), 1673 1674 /** 1675 * Lumbar fore/aft move 1676 * 1677 * Adjusts the lumbar support. 1678 * 1679 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1680 * @access VehiclePropertyAccess:READ_WRITE 1681 */ 1682 SEAT_LUMBAR_FORE_AFT_MOVE = ( 1683 0x0B92 1684 | VehiclePropertyGroup:SYSTEM 1685 | VehiclePropertyType:INT32 1686 | VehicleArea:SEAT), 1687 1688 /** 1689 * Lumbar side support position 1690 * 1691 * Sets the amount of lateral lumbar support. 1692 * Max value indicates widest lumbar setting (i.e. least support) 1693 * Min value indicates thinnest lumbar setting. 1694 * 1695 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1696 * @access VehiclePropertyAccess:READ_WRITE 1697 */ 1698 SEAT_LUMBAR_SIDE_SUPPORT_POS = ( 1699 0x0B93 1700 | VehiclePropertyGroup:SYSTEM 1701 | VehiclePropertyType:INT32 1702 | VehicleArea:SEAT), 1703 1704 /** 1705 * Lumbar side support move 1706 * 1707 * Adjusts the amount of lateral lumbar support. 1708 * 1709 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1710 * @access VehiclePropertyAccess:READ_WRITE 1711 */ 1712 SEAT_LUMBAR_SIDE_SUPPORT_MOVE = ( 1713 0x0B94 1714 | VehiclePropertyGroup:SYSTEM 1715 | VehiclePropertyType:INT32 1716 | VehicleArea:SEAT), 1717 1718 /** 1719 * Headrest height position 1720 * 1721 * Sets the headrest height. 1722 * Max value indicates tallest setting. 1723 * Min value indicates shortest setting. 1724 * 1725 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1726 * @access VehiclePropertyAccess:READ_WRITE 1727 */ 1728 SEAT_HEADREST_HEIGHT_POS = ( 1729 0x0B95 1730 | VehiclePropertyGroup:SYSTEM 1731 | VehiclePropertyType:INT32 1732 | VehicleArea:GLOBAL), 1733 1734 /** 1735 * Headrest height move 1736 * 1737 * Moves the headrest up and down. 1738 * 1739 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1740 * @access VehiclePropertyAccess:READ_WRITE 1741 */ 1742 SEAT_HEADREST_HEIGHT_MOVE = ( 1743 0x0B96 1744 | VehiclePropertyGroup:SYSTEM 1745 | VehiclePropertyType:INT32 1746 | VehicleArea:SEAT), 1747 1748 /** 1749 * Headrest angle position 1750 * 1751 * Sets the angle of the headrest. 1752 * Max value indicates most upright angle. 1753 * Min value indicates shallowest headrest angle. 1754 * 1755 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1756 * @access VehiclePropertyAccess:READ_WRITE 1757 */ 1758 SEAT_HEADREST_ANGLE_POS = ( 1759 0x0B97 1760 | VehiclePropertyGroup:SYSTEM 1761 | VehiclePropertyType:INT32 1762 | VehicleArea:SEAT), 1763 1764 /** 1765 * Headrest angle move 1766 * 1767 * Adjusts the angle of the headrest 1768 * 1769 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1770 * @access VehiclePropertyAccess:READ_WRITE 1771 */ 1772 SEAT_HEADREST_ANGLE_MOVE = ( 1773 0x0B98 1774 | VehiclePropertyGroup:SYSTEM 1775 | VehiclePropertyType:INT32 1776 | VehicleArea:SEAT), 1777 1778 /** 1779 * Headrest fore/aft position 1780 * 1781 * Adjusts the headrest forwards and backwards. 1782 * Max value indicates position closest to front of car. 1783 * Min value indicates position closest to rear of car. 1784 * 1785 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1786 * @access VehiclePropertyAccess:READ_WRITE 1787 */ 1788 SEAT_HEADREST_FORE_AFT_POS = ( 1789 0x0B99 1790 | VehiclePropertyGroup:SYSTEM 1791 | VehiclePropertyType:INT32 1792 | VehicleArea:SEAT), 1793 1794 /** 1795 * Headrest fore/aft move 1796 * 1797 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1798 * @access VehiclePropertyAccess:READ_WRITE 1799 */ 1800 SEAT_HEADREST_FORE_AFT_MOVE = ( 1801 0x0B9A 1802 | VehiclePropertyGroup:SYSTEM 1803 | VehiclePropertyType:INT32 1804 | VehicleArea:SEAT), 1805 1806 /** 1807 * Window Position 1808 * 1809 * Max = window up / closed 1810 * Min = window down / open 1811 * 1812 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1813 * @access VehiclePropertyAccess:READ_WRITE 1814 */ 1815 WINDOW_POS = ( 1816 0x0BC0 1817 | VehiclePropertyGroup:SYSTEM 1818 | VehiclePropertyType:INT32 1819 | VehicleArea:GLOBAL), 1820 1821 /** 1822 * Window Move 1823 * 1824 * Max = window up / closed 1825 * Min = window down / open 1826 * Magnitude denotes relative speed. I.e. +2 is faster than +1 in raising 1827 * the window. 1828 * 1829 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1830 * @access VehiclePropertyAccess:READ_WRITE 1831 */ 1832 WINDOW_MOVE = ( 1833 0x0BC1 1834 | VehiclePropertyGroup:SYSTEM 1835 | VehiclePropertyType:INT32 1836 | VehicleArea:GLOBAL), 1837 1838 /** 1839 * Window Vent Position 1840 * 1841 * This feature is used to control the vent feature on a sunroof. 1842 * 1843 * Max = vent open 1844 * Min = vent closed 1845 * 1846 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1847 * @access VehiclePropertyAccess:READ_WRITE 1848 */ 1849 WINDOW_VENT_POS = ( 1850 0x0BC2 1851 | VehiclePropertyGroup:SYSTEM 1852 | VehiclePropertyType:INT32 1853 | VehicleArea:GLOBAL), 1854 1855 /** 1856 * Window Vent Move 1857 * 1858 * This feature is used to control the vent feature on a sunroof. 1859 * 1860 * Max = vent open 1861 * Min = vent closed 1862 * 1863 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1864 * @access VehiclePropertyAccess:READ_WRITE 1865 */ 1866 WINDOW_VENT_MOVE = ( 1867 0x0BC3 1868 | VehiclePropertyGroup:SYSTEM 1869 | VehiclePropertyType:INT32 1870 | VehicleArea:GLOBAL), 1871 1872 /** 1873 * Window Lock 1874 * 1875 * True indicates windows are locked and can't be moved. 1876 * 1877 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1878 * @access VehiclePropertyAccess:READ_WRITE 1879 */ 1880 WINDOW_LOCK = ( 1881 0x0BC4 1882 | VehiclePropertyGroup:SYSTEM 1883 | VehiclePropertyType:BOOLEAN 1884 | VehicleArea:GLOBAL), 1885 1886 1887 /** 1888 * Vehicle Maps Service (VMS) message 1889 * 1890 * This property uses COMPLEX data to communicate vms messages. 1891 * 1892 * Its contents are to be interpreted as follows: 1893 * the indices defined in VmsMessageIntegerValuesIndex are to be used to 1894 * read from int32Values; 1895 * bytes is a serialized VMS message as defined in the vms protocol 1896 * which is opaque to the framework; 1897 * 1898 * IVehicle#get must always return StatusCode::NOT_AVAILABLE. 1899 * 1900 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1901 * @access VehiclePropertyAccess:READ_WRITE 1902 * 1903 * @since o.mr1 1904 */ 1905 VEHICLE_MAP_SERVICE = ( 1906 0x0C00 1907 | VehiclePropertyGroup:SYSTEM 1908 | VehiclePropertyType:COMPLEX 1909 | VehicleArea:GLOBAL), 1910 1911 /** 1912 * OBD2 Live Sensor Data 1913 * 1914 * Reports a snapshot of the current (live) values of the OBD2 sensors available. 1915 * 1916 * The configArray is set as follows: 1917 * configArray[0] = number of vendor-specific integer-valued sensors 1918 * configArray[1] = number of vendor-specific float-valued sensors 1919 * 1920 * The values of this property are to be interpreted as in the following example. 1921 * Considering a configArray = {2,3} 1922 * int32Values must be a vector containing Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX + 2 1923 * elements (that is, 33 elements); 1924 * floatValues must be a vector containing Obd2FloatSensorIndex.LAST_SYSTEM_INDEX + 3 1925 * elements (that is, 73 elements); 1926 * 1927 * It is possible for each frame to contain a different subset of sensor values, both system 1928 * provided sensors, and vendor-specific ones. In order to support that, the bytes element 1929 * of the property value is used as a bitmask,. 1930 * 1931 * bytes must have a sufficient number of bytes to represent the total number of possible 1932 * sensors (in this case, 14 bytes to represent 106 possible values); it is to be read as 1933 * a contiguous bitmask such that each bit indicates the presence or absence of a sensor 1934 * from the frame, starting with as many bits as the size of int32Values, immediately 1935 * followed by as many bits as the size of floatValues. 1936 * 1937 * For example, should bytes[0] = 0x4C (0b01001100) it would mean that: 1938 * int32Values[0 and 1] are not valid sensor values 1939 * int32Values[2 and 3] are valid sensor values 1940 * int32Values[4 and 5] are not valid sensor values 1941 * int32Values[6] is a valid sensor value 1942 * int32Values[7] is not a valid sensor value 1943 * Should bytes[5] = 0x61 (0b01100001) it would mean that: 1944 * int32Values[32] is a valid sensor value 1945 * floatValues[0 thru 3] are not valid sensor values 1946 * floatValues[4 and 5] are valid sensor values 1947 * floatValues[6] is not a valid sensor value 1948 * 1949 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1950 * @access VehiclePropertyAccess:READ 1951 * 1952 * @since o.mr1 1953 */ 1954 OBD2_LIVE_FRAME = ( 1955 0x0D00 1956 | VehiclePropertyGroup:SYSTEM 1957 | VehiclePropertyType:COMPLEX 1958 | VehicleArea:GLOBAL), 1959 1960 /** 1961 * OBD2 Freeze Frame Sensor Data 1962 * 1963 * Reports a snapshot of the value of the OBD2 sensors available at the time that a fault 1964 * occurred and was detected. 1965 * 1966 * A configArray must be provided with the same meaning as defined for OBD2_LIVE_FRAME. 1967 * 1968 * The values of this property are to be interpreted in a similar fashion as those for 1969 * OBD2_LIVE_FRAME, with the exception that the stringValue field may contain a non-empty 1970 * diagnostic troubleshooting code (DTC). 1971 * 1972 * A IVehicle#get request of this property must provide a value for int64Values[0]. 1973 * This will be interpreted as the timestamp of the freeze frame to retrieve. A list of 1974 * timestamps can be obtained by a IVehicle#get of OBD2_FREEZE_FRAME_INFO. 1975 * 1976 * Should no freeze frame be available at the given timestamp, a response of NOT_AVAILABLE 1977 * must be returned by the implementation. Because vehicles may have limited storage for 1978 * freeze frames, it is possible for a frame request to respond with NOT_AVAILABLE even if 1979 * the associated timestamp has been recently obtained via OBD2_FREEZE_FRAME_INFO. 1980 * 1981 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 1982 * @access VehiclePropertyAccess:READ 1983 * 1984 * @since o.mr1 1985 */ 1986 OBD2_FREEZE_FRAME = ( 1987 0x0D01 1988 | VehiclePropertyGroup:SYSTEM 1989 | VehiclePropertyType:COMPLEX 1990 | VehicleArea:GLOBAL), 1991 1992 /** 1993 * OBD2 Freeze Frame Information 1994 * 1995 * This property describes the current freeze frames stored in vehicle 1996 * memory and available for retrieval via OBD2_FREEZE_FRAME. 1997 * 1998 * The values are to be interpreted as follows: 1999 * each element of int64Values must be the timestamp at which a a fault code 2000 * has been detected and the corresponding freeze frame stored, and each 2001 * such element can be used as the key to OBD2_FREEZE_FRAME to retrieve 2002 * the corresponding freeze frame. 2003 * 2004 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 2005 * @access VehiclePropertyAccess:READ 2006 * 2007 * @since o.mr1 2008 */ 2009 OBD2_FREEZE_FRAME_INFO = ( 2010 0x0D02 2011 | VehiclePropertyGroup:SYSTEM 2012 | VehiclePropertyType:COMPLEX 2013 | VehicleArea:GLOBAL), 2014 2015 /** 2016 * OBD2 Freeze Frame Clear 2017 * 2018 * This property allows deletion of any of the freeze frames stored in 2019 * vehicle memory, as described by OBD2_FREEZE_FRAME_INFO. 2020 * 2021 * The configArray is set as follows: 2022 * configArray[0] = 1 if the implementation is able to clear individual freeze frames 2023 * by timestamp, 0 otherwise 2024 * 2025 * IVehicle#set of this property is to be interpreted as follows: 2026 * if int64Values contains no elements, then all frames stored must be cleared; 2027 * if int64Values contains one or more elements, then frames at the timestamps 2028 * stored in int64Values must be cleared, and the others not cleared. Should the 2029 * vehicle not support selective clearing of freeze frames, this latter mode must 2030 * return NOT_AVAILABLE. 2031 * 2032 * @change_mode VehiclePropertyChangeMode:ON_CHANGE 2033 * @access VehiclePropertyAccess:WRITE 2034 * 2035 * @since o.mr1 2036 */ 2037 OBD2_FREEZE_FRAME_CLEAR = ( 2038 0x0D03 2039 | VehiclePropertyGroup:SYSTEM 2040 | VehiclePropertyType:COMPLEX 2041 | VehicleArea:GLOBAL), 2042 }; 2043 2044 /** 2045 * Bit flags for fan direction 2046 */ 2047 enum VehicleHvacFanDirection : int32_t { 2048 FACE = 0x1, 2049 FLOOR = 0x2, 2050 FACE_AND_FLOOR = 0x3, 2051 DEFROST = 0x4, 2052 DEFROST_AND_FLOOR = 0x5, 2053 }; 2054 2055 /** 2056 * Constants relevant to radio. 2057 */ 2058 enum VehicleRadioConstants : int32_t { 2059 /** Minimum value for the radio preset */ 2060 VEHICLE_RADIO_PRESET_MIN_VALUE = 1, 2061 }; 2062 2063 enum VehicleAudioFocusRequest : int32_t { 2064 REQUEST_GAIN = 0x1, 2065 REQUEST_GAIN_TRANSIENT = 0x2, 2066 REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3, 2067 /** 2068 * This is for the case where android side plays sound like UI feedback 2069 * and car side does not need to duck existing playback as long as 2070 * requested stream is available. 2071 */ 2072 REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4, 2073 REQUEST_RELEASE = 0x5, 2074 }; 2075 2076 enum VehicleAudioFocusState : int32_t { 2077 /** 2078 * Android side has permanent focus and can play allowed streams. 2079 */ 2080 STATE_GAIN = 0x1, 2081 2082 /** 2083 * Android side has transient focus and can play allowed streams. 2084 */ 2085 STATE_GAIN_TRANSIENT = 0x2, 2086 2087 /** 2088 * Car audio module is playing guidance kind of sound outside Android. 2089 * Android side can still play through allowed streams with ducking. 2090 */ 2091 STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3, 2092 2093 /** 2094 * Car audio module is playing transient sound outside Android. Android side 2095 * must stop playing any sounds. 2096 */ 2097 STATE_LOSS_TRANSIENT = 0x4, 2098 2099 /** 2100 * Android side has lost focus and cannot play any sound. 2101 */ 2102 STATE_LOSS = 0x5, 2103 2104 /** 2105 * car audio module is playing safety critical sound, and Android side cannot 2106 * request focus until the current state is finished. car audio module 2107 * restore it to the previous state when it can allow Android to play. 2108 */ 2109 STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6, 2110 }; 2111 2112 /** 2113 * Flags to represent multiple streams by combining these. 2114 */ 2115 enum VehicleAudioStreamFlag : int32_t { 2116 STREAM0_FLAG = (0x1 << 0), 2117 STREAM1_FLAG = (0x1 << 1), 2118 STREAM2_FLAG = (0x1 << 2), 2119 }; 2120 2121 /** 2122 * Represents stream number (always 0 to N -1 where N is max number of streams). 2123 * Can be used for audio related property expecting one stream. 2124 */ 2125 enum VehicleAudioStream : int32_t { 2126 STREAM0 = 0, 2127 STREAM1 = 1, 2128 }; 2129 2130 /** 2131 * Flag to represent external focus state (outside Android). 2132 */ 2133 enum VehicleAudioExtFocusFlag : int32_t { 2134 /** 2135 * No external focus holder. 2136 */ 2137 NONE_FLAG = 0x0, 2138 2139 /** 2140 * Car side (outside Android) has component holding GAIN kind of focus state. 2141 */ 2142 PERMANENT_FLAG = 0x1, 2143 2144 /** 2145 * Car side (outside Android) has component holding GAIN_TRANSIENT kind of 2146 * focus state. 2147 */ 2148 TRANSIENT_FLAG = 0x2, 2149 2150 /** 2151 * Car side is expected to play something while focus is held by Android side. 2152 * One example can be radio attached in car side. But Android's radio app 2153 * still must have focus, and Android side must be in GAIN state, but 2154 * media stream will not be allocated to Android side and car side can play 2155 * radio any time while this flag is active. 2156 */ 2157 PLAY_ONLY_FLAG = 0x4, 2158 2159 /** 2160 * Car side must mute any media including radio. This can be used with any 2161 * focus request including GAIN* and RELEASE. 2162 */ 2163 MUTE_MEDIA_FLAG = 0x8, 2164 }; 2165 2166 /** 2167 * Index in int32Values for VehicleProperty#AUDIO_FOCUS property. 2168 */ 2169 enum VehicleAudioFocusIndex : int32_t { 2170 FOCUS = 0, 2171 STREAMS = 1, 2172 EXTERNAL_FOCUS_STATE = 2, 2173 AUDIO_CONTEXTS = 3, 2174 }; 2175 2176 /** 2177 * Flags to tell the current audio context. 2178 */ 2179 enum VehicleAudioContextFlag : int32_t { 2180 /** Music playback is currently active. */ 2181 MUSIC_FLAG = 0x1, 2182 2183 /** Navigation is currently running. */ 2184 NAVIGATION_FLAG = 0x2, 2185 2186 /** Voice command session is currently running. */ 2187 VOICE_COMMAND_FLAG = 0x4, 2188 2189 /** Voice call is currently active. */ 2190 CALL_FLAG = 0x8, 2191 2192 /** 2193 * Alarm is active. 2194 * This must be only used in VehicleProperty#AUDIO_ROUTING_POLICY. 2195 */ 2196 ALARM_FLAG = 0x10, 2197 2198 /** 2199 * Notification sound is active. 2200 * This must be only used in VehicleProperty#AUDIO_ROUTING_POLICY. 2201 */ 2202 NOTIFICATION_FLAG = 0x20, 2203 2204 /** 2205 * Context unknown. Only used for VehicleProperty#AUDIO_ROUTING_POLICY to 2206 * represent default stream for unknown contents. 2207 */ 2208 UNKNOWN_FLAG = 0x40, 2209 2210 /** Safety alert / warning is played. */ 2211 SAFETY_ALERT_FLAG = 0x80, 2212 2213 /** CD / DVD kind of audio is played */ 2214 CD_ROM_FLAG = 0x100, 2215 2216 /** Aux audio input is played */ 2217 AUX_AUDIO_FLAG = 0x200, 2218 2219 /** system sound like UI feedback */ 2220 SYSTEM_SOUND_FLAG = 0x400, 2221 2222 /** Radio is played */ 2223 RADIO_FLAG = 0x800, 2224 2225 /** Ext source is played. This is for tagging generic ext sources. */ 2226 EXT_SOURCE_FLAG = 0x1000, 2227 2228 /** The phone ring tone is played */ 2229 RINGTONE_FLAG = 0x2000 2230 }; 2231 2232 /** 2233 * flags to represent capability of audio volume property. 2234 * used in configArray[1] of VehiclePropConfig. 2235 */ 2236 enum VehicleAudioVolumeCapabilityFlag : int32_t { 2237 /** 2238 * External audio module or vehicle hal has persistent storage to keep the 2239 * volume level. When this is set, the audio volume level for each context 2240 * will be retrieved from the property when the system starts up. 2241 * And external audio module is also expected to adjust volume automatically 2242 * whenever there is an audio context change. 2243 * When this flag is not set, android side will assume that there is no 2244 * persistent storage and the value stored in the android side will be used to 2245 * initialize the volume level, and android side will set volume level 2246 * of each physical stream whenever there is an audio context change. 2247 */ 2248 PERSISTENT_STORAGE = 0x1, 2249 2250 /** 2251 * [DEPRECATED] 2252 * When this flag is set, the H/W can support only single master volume for 2253 * all streams. There is no way to set volume level differently for each stream 2254 * or context. 2255 */ 2256 MASTER_VOLUME_ONLY = 0x2, 2257 }; 2258 2259 /** 2260 * enum to represent audio volume state. 2261 */ 2262 enum VehicleAudioVolumeState : int32_t { 2263 STATE_OK = 0, 2264 2265 /** 2266 * Audio volume has reached volume limit set in 2267 * VehicleProperty#AUDIO_VOLUME_LIMIT and user's request to increase volume 2268 * further is not allowed. 2269 */ 2270 STATE_LIMIT_REACHED = 1, 2271 }; 2272 2273 /** 2274 * Index in int32Values for VehicleProperty#AUDIO_VOLUME property. 2275 */ 2276 enum VehicleAudioVolumeIndex : int32_t { 2277 STREAM = 0, 2278 VOLUME = 1, 2279 STATE = 2, 2280 }; 2281 2282 /** 2283 * Index in int32Values for VehicleProperty#AUDIO_VOLUME_LIMIT property. 2284 */ 2285 enum VehicleAudioVolumeLimitIndex : int32_t { 2286 STREAM = 0, 2287 MAX_VOLUME = 1, 2288 }; 2289 2290 /** 2291 * Index in int32Values for VehicleProperty#AUDIO_ROUTING_POLICY property. 2292 */ 2293 enum VehicleAudioRoutingPolicyIndex : int32_t { 2294 STREAM = 0, 2295 CONTEXTS = 1, 2296 }; 2297 2298 /** 2299 * Flag to be used in VehiclePropConfig#configFlags for 2300 * VehicleProperty#AUDIO_HW_VARIANT. 2301 */ 2302 enum VehicleAudioHwVariantConfigFlag : int32_t { 2303 /** 2304 * Flag to tell that radio is internal to android and radio must 2305 * be treated like other android stream like media. 2306 * When this flag is not set or AUDIO_HW_VARIANT does not exist, 2307 * radio is treated as external module. This may affect audio focus 2308 * handling as well. 2309 */ 2310 INTERNAL_RADIO_FLAG = 0x1, 2311 }; 2312 2313 enum VehicleApPowerStateConfigFlag : int32_t /* NOTE: type is guessed */ { 2314 /** 2315 * AP can enter deep sleep state. If not set, AP will always shutdown from 2316 * VehicleApPowerState#SHUTDOWN_PREPARE power state. 2317 */ 2318 ENABLE_DEEP_SLEEP_FLAG = 0x1, 2319 2320 /** 2321 * The power controller can power on AP from off state after timeout 2322 * specified in VehicleApPowerSet VEHICLE_AP_POWER_SET_SHUTDOWN_READY message. 2323 */ 2324 CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2, 2325 }; 2326 2327 enum VehicleApPowerState : int32_t /* NOTE: type is guessed */ { 2328 /** vehicle HAL will never publish this state to AP */ 2329 OFF = 0, 2330 2331 /** vehicle HAL will never publish this state to AP */ 2332 DEEP_SLEEP = 1, 2333 2334 /** AP is on but display must be off. */ 2335 ON_DISP_OFF = 2, 2336 2337 /** AP is on with display on. This state allows full user interaction. */ 2338 ON_FULL = 3, 2339 2340 /** 2341 * The power controller has requested AP to shutdown. AP can either enter 2342 * sleep state or start full shutdown. AP can also request postponing 2343 * shutdown by sending VehicleApPowerSetState#SHUTDOWN_POSTPONE message. The 2344 * power controller must change power state to this state to shutdown 2345 * system. 2346 * 2347 * int32Values[1] : one of enum_vehicle_ap_power_state_shutdown_param_type 2348 */ 2349 SHUTDOWN_PREPARE = 4, 2350 }; 2351 2352 enum VehicleApPowerStateShutdownParam : int32_t { 2353 /** AP must shutdown immediately. Postponing is not allowed. */ 2354 SHUTDOWN_IMMEDIATELY = 1, 2355 2356 /** AP can enter deep sleep instead of shutting down completely. */ 2357 CAN_SLEEP = 2, 2358 2359 /** AP can only shutdown with postponing allowed. */ 2360 SHUTDOWN_ONLY = 3, 2361 }; 2362 2363 enum VehicleApPowerSetState : int32_t /* NOTE: type is guessed */ { 2364 /** 2365 * AP has finished boot up, and can start shutdown if requested by power 2366 * controller. 2367 */ 2368 BOOT_COMPLETE = 0x1, 2369 2370 /** 2371 * AP is entering deep sleep state. How this state is implemented may vary 2372 * depending on each H/W, but AP's power must be kept in this state. 2373 */ 2374 DEEP_SLEEP_ENTRY = 0x2, 2375 2376 /** 2377 * AP is exiting from deep sleep state, and is in 2378 * VehicleApPowerState#SHUTDOWN_PREPARE state. 2379 * The power controller may change state to other ON states based on the 2380 * current state. 2381 */ 2382 DEEP_SLEEP_EXIT = 0x3, 2383 2384 /** 2385 * int32Values[1]: Time to postpone shutdown in ms. Maximum value can be 2386 * 5000 ms. 2387 * If AP needs more time, it will send another POSTPONE 2388 * message before the previous one expires. 2389 */ 2390 SHUTDOWN_POSTPONE = 0x4, 2391 2392 /** 2393 * AP is starting shutting down. When system completes shutdown, everything 2394 * will stop in AP as kernel will stop all other contexts. It is 2395 * responsibility of vehicle HAL or lower level to synchronize that state 2396 * with external power controller. As an example, some kind of ping 2397 * with timeout in power controller can be a solution. 2398 * 2399 * int32Values[1]: Time to turn on AP in secs. Power controller may turn on 2400 * AP after specified time so that AP can run tasks like 2401 * update. If it is set to 0, there is no wake up, and power 2402 * controller may not necessarily support wake-up. If power 2403 * controller turns on AP due to timer, it must start with 2404 * VehicleApPowerState#ON_DISP_OFF state, and after 2405 * receiving VehicleApPowerSetState#BOOT_COMPLETE, it shall 2406 * do state transition to 2407 * VehicleApPowerState#SHUTDOWN_PREPARE. 2408 */ 2409 SHUTDOWN_START = 0x5, 2410 2411 /** 2412 * User has requested to turn off headunit's display, which is detected in 2413 * android side. 2414 * The power controller may change the power state to 2415 * VehicleApPowerState#ON_DISP_OFF. 2416 */ 2417 DISPLAY_OFF = 0x6, 2418 2419 /** 2420 * User has requested to turn on headunit's display, most probably from power 2421 * key input which is attached to headunit. The power controller may change 2422 * the power state to VehicleApPowerState#ON_FULL. 2423 */ 2424 DISPLAY_ON = 0x7, 2425 }; 2426 2427 /** 2428 * Index in int32Values for VehicleProperty#AP_POWER_STATE property. 2429 */ 2430 enum VehicleApPowerStateIndex : int32_t { 2431 STATE = 0, 2432 ADDITIONAL = 1, 2433 }; 2434 2435 /** 2436 * Enum to represent bootup reason. 2437 */ 2438 enum VehicleApPowerBootupReason : int32_t { 2439 /** 2440 * Power on due to user's pressing of power key or rotating of ignition 2441 * switch. 2442 */ 2443 USER_POWER_ON = 0, 2444 2445 /** 2446 * Automatic power on triggered by door unlock or any other kind of automatic 2447 * user detection. 2448 */ 2449 USER_UNLOCK = 1, 2450 2451 /** 2452 * Automatic power on triggered by timer. This only happens when AP has asked 2453 * wake-up after 2454 * certain time through time specified in 2455 * VehicleApPowerSetState#SHUTDOWN_START. 2456 */ 2457 TIMER = 2, 2458 }; 2459 2460 enum VehicleHwKeyInputAction : int32_t { 2461 /** Key down */ 2462 ACTION_DOWN = 0, 2463 2464 /** Key up */ 2465 ACTION_UP = 1, 2466 }; 2467 2468 enum VehicleDisplay : int32_t { 2469 /** center console */ 2470 MAIN = 0, 2471 2472 INSTRUMENT_CLUSTER = 1, 2473 }; 2474 2475 /** 2476 * Represents instrument cluster type available in system 2477 */ 2478 enum VehicleInstrumentClusterType : int32_t { 2479 /** Android has no access to instument cluster */ 2480 NONE = 0, 2481 2482 /** 2483 * Instrument cluster can communicate through vehicle hal with additional 2484 * properties to exchange meta-data 2485 */ 2486 HAL_INTERFACE = 1, 2487 2488 /** 2489 * Instrument cluster is external display where android can render contents 2490 */ 2491 EXTERNAL_DISPLAY = 2, 2492 }; 2493 2494 /** 2495 * Units used for int or float type with no attached enum types. 2496 */ 2497 enum VehicleUnit : int32_t { 2498 SHOULD_NOT_USE = 0x000, 2499 2500 METER_PER_SEC = 0x01, 2501 RPM = 0x02, 2502 HERTZ = 0x03, 2503 PERCENTILE = 0x10, 2504 MILLIMETER = 0x20, 2505 METER = 0x21, 2506 KILOMETER = 0x23, 2507 CELSIUS = 0x30, 2508 FAHRENHEIT = 0x31, 2509 KELVIN = 0x32, 2510 MILLILITER = 0x40, 2511 NANO_SECS = 0x50, 2512 SECS = 0x53, 2513 YEAR = 0x59, 2514 }; 2515 2516 /** 2517 * This describes how value of property can change. 2518 */ 2519 enum VehiclePropertyChangeMode : int32_t { 2520 /** 2521 * Property of this type must never be changed. Subscription is not supported 2522 * for these properties. 2523 */ 2524 STATIC = 0x00, 2525 2526 /** 2527 * Property of this type must be reported when there is a change. 2528 * IVehicle#get call must return the current value. 2529 * Set operation for this property is assumed to be asynchronous. When the 2530 * property is read (using IVehicle#get) after IVehicle#set, it may still 2531 * return old value until underlying H/W backing this property has actually 2532 * changed the state. Once state is changed, the property must dispatch 2533 * changed value as event. 2534 */ 2535 ON_CHANGE = 0x01, 2536 2537 /** 2538 * Property of this type change continuously and requires fixed rate of 2539 * sampling to retrieve the data. 2540 */ 2541 CONTINUOUS = 0x02, 2542 2543 /** 2544 * Property of this type may be polled to get the current value. 2545 */ 2546 POLL = 0x03, 2547 2548 /** 2549 * This is for property where change event must be sent only when the 2550 * value is set from external component. Normal value change must not trigger 2551 * event. For example, clock property can send change event only when it is 2552 * set, outside android, for case like user setting time or time getting 2553 * update. There is no need to send it per every value change. 2554 */ 2555 ON_SET = 0x04, 2556 }; 2557 2558 /** 2559 * Property config defines the capabilities of it. User of the API 2560 * must first get the property config to understand the output from get() 2561 * commands and also to ensure that set() or events commands are in sync with 2562 * the expected output. 2563 */ 2564 enum VehiclePropertyAccess : int32_t { 2565 NONE = 0x00, 2566 2567 READ = 0x01, 2568 WRITE = 0x02, 2569 READ_WRITE = 0x03, 2570 }; 2571 2572 /** 2573 * Car states. 2574 * 2575 * The driving states determine what features of the UI will be accessible. 2576 */ 2577 enum VehicleDrivingStatus : int32_t { 2578 UNRESTRICTED = 0x00, 2579 NO_VIDEO = 0x01, 2580 NO_KEYBOARD_INPUT = 0x02, 2581 NO_VOICE_INPUT = 0x04, 2582 NO_CONFIG = 0x08, 2583 LIMIT_MESSAGE_LEN = 0x10, 2584 }; 2585 2586 /** 2587 * Various gears which can be selected by user and chosen in system. 2588 */ 2589 enum VehicleGear: int32_t { 2590 GEAR_NEUTRAL = 0x0001, 2591 GEAR_REVERSE = 0x0002, 2592 GEAR_PARK = 0x0004, 2593 GEAR_DRIVE = 0x0008, 2594 GEAR_LOW = 0x0010, 2595 GEAR_1 = 0x0010, 2596 GEAR_2 = 0x0020, 2597 GEAR_3 = 0x0040, 2598 GEAR_4 = 0x0080, 2599 GEAR_5 = 0x0100, 2600 GEAR_6 = 0x0200, 2601 GEAR_7 = 0x0400, 2602 GEAR_8 = 0x0800, 2603 GEAR_9 = 0x1000, 2604 }; 2605 2606 /** 2607 * Various zones in the car. 2608 * 2609 * Zones are used for Air Conditioning purposes and divide the car into physical 2610 * area zones. 2611 */ 2612 enum VehicleAreaZone : int32_t { 2613 ROW_1_LEFT = 0x00000001, 2614 ROW_1_CENTER = 0x00000002, 2615 ROW_1_RIGHT = 0x00000004, 2616 ROW_1 = 0x00000008, 2617 ROW_2_LEFT = 0x00000010, 2618 ROW_2_CENTER = 0x00000020, 2619 ROW_2_RIGHT = 0x00000040, 2620 ROW_2 = 0x00000080, 2621 ROW_3_LEFT = 0x00000100, 2622 ROW_3_CENTER = 0x00000200, 2623 ROW_3_RIGHT = 0x00000400, 2624 ROW_3 = 0x00000800, 2625 ROW_4_LEFT = 0x00001000, 2626 ROW_4_CENTER = 0x00002000, 2627 ROW_4_RIGHT = 0x00004000, 2628 ROW_4 = 0x00008000, 2629 WHOLE_CABIN = 0x80000000, 2630 }; 2631 2632 /** 2633 * Various Seats in the car. 2634 */ 2635 enum VehicleAreaSeat : int32_t { 2636 ROW_1_LEFT = 0x0001, 2637 ROW_1_CENTER = 0x0002, 2638 ROW_1_RIGHT = 0x0004, 2639 ROW_2_LEFT = 0x0010, 2640 ROW_2_CENTER = 0x0020, 2641 ROW_2_RIGHT = 0x0040, 2642 ROW_3_LEFT = 0x0100, 2643 ROW_3_CENTER = 0x0200, 2644 ROW_3_RIGHT = 0x0400 2645 }; 2646 2647 /** 2648 * Various windshields/windows in the car. 2649 */ 2650 enum VehicleAreaWindow : int32_t { 2651 FRONT_WINDSHIELD = 0x0001, 2652 REAR_WINDSHIELD = 0x0002, 2653 ROOF_TOP = 0x0004, 2654 ROW_1_LEFT = 0x0010, 2655 ROW_1_RIGHT = 0x0020, 2656 ROW_2_LEFT = 0x0100, 2657 ROW_2_RIGHT = 0x0200, 2658 ROW_3_LEFT = 0x1000, 2659 ROW_3_RIGHT = 0x2000, 2660 }; 2661 2662 enum VehicleAreaDoor : int32_t { 2663 ROW_1_LEFT = 0x00000001, 2664 ROW_1_RIGHT = 0x00000004, 2665 ROW_2_LEFT = 0x00000010, 2666 ROW_2_RIGHT = 0x00000040, 2667 ROW_3_LEFT = 0x00000100, 2668 ROW_3_RIGHT = 0x00000400, 2669 HOOD = 0x10000000, 2670 REAR = 0x20000000, 2671 }; 2672 2673 enum VehicleAreaMirror : int32_t { 2674 DRIVER_LEFT = 0x00000001, 2675 DRIVER_RIGHT = 0x00000002, 2676 DRIVER_CENTER = 0x00000004, 2677 }; 2678 2679 enum VehicleTurnSignal : int32_t { 2680 NONE = 0x00, 2681 RIGHT = 0x01, 2682 LEFT = 0x02, 2683 EMERGENCY = 0x04, 2684 }; 2685 2686 struct VehicleAreaConfig { 2687 /** 2688 * Area id is ignored for VehiclePropertyGroup:GLOBAL properties. 2689 */ 2690 int32_t areaId; 2691 2692 int32_t minInt32Value; 2693 int32_t maxInt32Value; 2694 2695 int64_t minInt64Value; 2696 int64_t maxInt64Value; 2697 2698 float minFloatValue; 2699 float maxFloatValue; 2700 }; 2701 2702 struct VehiclePropConfig { 2703 /** Property identifier */ 2704 int32_t prop; 2705 2706 /** 2707 * Defines if the property is read or write or both. 2708 */ 2709 VehiclePropertyAccess access; 2710 2711 /** 2712 * Defines the change mode of the property. 2713 */ 2714 VehiclePropertyChangeMode changeMode; 2715 2716 /** 2717 * Some of the properties may have associated areas (for example, some hvac 2718 * properties are associated with VehicleAreaZone), in these 2719 * cases the config may contain an ORed value for the associated areas. 2720 */ 2721 int32_t supportedAreas; 2722 2723 /** 2724 * Contains per-area configuration. 2725 */ 2726 vec<VehicleAreaConfig> areaConfigs; 2727 2728 /** 2729 * Configuration flags for this property. 2730 * 2731 * For example, it may store the number of presets that are stored by the 2732 * radio module. 2733 */ 2734 int32_t configFlags; 2735 2736 /** Contains additional configuration parameters */ 2737 vec<int32_t> configArray; 2738 2739 /** 2740 * Some properties may require additional information passed over this 2741 * string. Most properties do not need to set this. 2742 */ 2743 string configString; 2744 2745 /** 2746 * Min sample rate in Hz. 2747 * Must be defined for VehiclePropertyChangeMode::CONTINUOUS 2748 */ 2749 float minSampleRate; 2750 2751 /** 2752 * Must be defined for VehiclePropertyChangeMode::CONTINUOUS 2753 * Max sample rate in Hz. 2754 */ 2755 float maxSampleRate; 2756 }; 2757 2758 /** 2759 * Encapsulates the property name and the associated value. It 2760 * is used across various API calls to set values, get values or to register for 2761 * events. 2762 */ 2763 struct VehiclePropValue { 2764 /** Property identifier */ 2765 int32_t prop; 2766 2767 /** Time is elapsed nanoseconds since boot */ 2768 int64_t timestamp; 2769 2770 /** 2771 * Area type(s) for non-global property it must be one of the value from 2772 * VehicleArea* enums or 0 for global properties. 2773 */ 2774 int32_t areaId; 2775 2776 /** 2777 * Contains value for a single property. Depending on property data type of 2778 * this property (VehiclePropetyType) one field of this structure must be filled in. 2779 */ 2780 struct RawValue { 2781 /** 2782 * This is used for properties of types VehiclePropertyType#INT 2783 * and VehiclePropertyType#INT_VEC 2784 */ 2785 vec<int32_t> int32Values; 2786 2787 /** 2788 * This is used for properties of types VehiclePropertyType#FLOAT 2789 * and VehiclePropertyType#FLOAT_VEC 2790 */ 2791 vec<float> floatValues; 2792 2793 /** This is used for properties of type VehiclePropertyType#INT64 */ 2794 vec<int64_t> int64Values; 2795 2796 /** This is used for properties of type VehiclePropertyType#BYTES */ 2797 vec<uint8_t> bytes; 2798 2799 /** This is used for properties of type VehiclePropertyType#STRING */ 2800 string stringValue; 2801 }; 2802 2803 RawValue value; 2804 }; 2805 2806 enum VehicleIgnitionState : int32_t { 2807 UNDEFINED = 0, 2808 2809 /** Steering wheel is locked */ 2810 LOCK = 1, 2811 2812 /** 2813 * Steering wheel is not locked, engine and all accessories are OFF. If 2814 * car can be in LOCK and OFF state at the same time than HAL must report 2815 * LOCK state. 2816 */ 2817 OFF, 2818 2819 /** 2820 * Typically in this state accessories become available (e.g. radio). 2821 * Instrument cluster and engine are turned off 2822 */ 2823 ACC, 2824 2825 /** 2826 * Ignition is in state ON. Accessories and instrument cluster available, 2827 * engine might be running or ready to be started. 2828 */ 2829 ON, 2830 2831 /** Typically in this state engine is starting (cranking). */ 2832 START 2833 }; 2834 2835 2836 /** 2837 * Represent the operation where the current error has happened. 2838 */ 2839 enum VehiclePropertyOperation : int32_t { 2840 /** 2841 * Generic error to this property which is not tied to any operation. 2842 */ 2843 GENERIC = 0, 2844 2845 /** 2846 * Error happened while handling property set. 2847 */ 2848 SET = 1, 2849 2850 /** 2851 * Error happened while handling property get. 2852 */ 2853 GET = 2, 2854 2855 /** 2856 * Error happened while handling property subscription. 2857 */ 2858 SUBSCRIBE = 3, 2859 }; 2860 2861 2862 enum SubscribeFlags : int32_t { 2863 UNDEFINED = 0x0, 2864 2865 /** 2866 * Subscribe to event that was originated in vehicle HAL 2867 * (most likely this event came from the vehicle itself). 2868 */ 2869 HAL_EVENT = 0x1, 2870 2871 /** 2872 * Use this flag to subscribe on events when IVehicle#set(...) was called by 2873 * vehicle HAL's client (e.g. Car Service). 2874 */ 2875 SET_CALL = 0x2, 2876 2877 DEFAULT = HAL_EVENT, 2878 }; 2879 2880 /** 2881 * Encapsulates information about subscription to vehicle property events. 2882 */ 2883 struct SubscribeOptions { 2884 /** Property to subscribe */ 2885 int32_t propId; 2886 2887 /** 2888 * Area ids - this must be a bit mask of areas to subscribe or 0 to subscribe 2889 * to all areas. 2890 */ 2891 int32_t vehicleAreas; 2892 2893 /** 2894 * Sample rate in Hz. 2895 * 2896 * Must be provided for properties with 2897 * VehiclePropertyChangeMode::CONTINUOUS. The value must be within 2898 * VehiclePropConfig#minSamplingRate .. VehiclePropConfig#maxSamplingRate 2899 * for a given property. 2900 * This value indicates how many updates per second client wants to receive. 2901 */ 2902 float sampleRate; 2903 2904 /** Flags that indicate what kind of events listen to. */ 2905 SubscribeFlags flags; 2906 }; 2907 2908 /** Error codes used in vehicle HAL interface. */ 2909 enum StatusCode : int32_t { 2910 OK = 0, 2911 2912 /** Try again. */ 2913 TRY_AGAIN = 1, 2914 2915 /** Invalid argument provided. */ 2916 INVALID_ARG = 2, 2917 2918 /** 2919 * This code must be returned when device that associated with the vehicle 2920 * property is not available. For example, when client tries to set HVAC 2921 * temperature when the whole HVAC unit is turned OFF. 2922 */ 2923 NOT_AVAILABLE = 3, 2924 2925 /** Access denied */ 2926 ACCESS_DENIED = 4, 2927 2928 /** Something unexpected has happened in Vehicle HAL */ 2929 INTERNAL_ERROR = 5, 2930 }; 2931 2932 enum Wheel : int32_t { 2933 UNKNOWN = 0x0, 2934 2935 LEFT_FRONT = 0x1, 2936 RIGHT_FRONT = 0x2, 2937 LEFT_REAR = 0x4, 2938 RIGHT_REAR = 0x8, 2939 }; 2940 2941 /** 2942 * The status of the vehicle's fuel system. 2943 * These values come from the SAE J1979 standard. 2944 */ 2945 enum Obd2FuelSystemStatus : int32_t { 2946 OPEN_INSUFFICIENT_ENGINE_TEMPERATURE = 1, 2947 CLOSED_LOOP = 2, 2948 OPEN_ENGINE_LOAD_OR_DECELERATION = 4, 2949 OPEN_SYSTEM_FAILURE = 8, 2950 CLOSED_LOOP_BUT_FEEDBACK_FAULT = 16, 2951 }; 2952 2953 /** Defines which ignition monitors are available to be read. */ 2954 enum Obd2IgnitionMonitorKind : int32_t { 2955 SPARK = 0, 2956 COMPRESSION = 1, 2957 }; 2958 2959 /** 2960 * Ignition monitors common to both SPARK and COMPRESSION. 2961 * These values come from the SAE J1979 standard. 2962 */ 2963 enum Obd2CommonIgnitionMonitors : int32_t { 2964 COMPONENTS_AVAILABLE = 0x1 << 0, 2965 COMPONENTS_INCOMPLETE = 0x1 << 1, 2966 2967 FUEL_SYSTEM_AVAILABLE = 0x1 << 2, 2968 FUEL_SYSTEM_INCOMPLETE = 0x1 << 3, 2969 2970 MISFIRE_AVAILABLE = 0x1 << 4, 2971 MISFIRE_INCOMPLETE = 0x1 << 5, 2972 }; 2973 2974 /** 2975 * Ignition monitors available for SPARK vehicles. 2976 * These values come from the SAE J1979 standard. 2977 */ 2978 enum Obd2SparkIgnitionMonitors : Obd2CommonIgnitionMonitors { 2979 EGR_AVAILABLE = 0x1 << 6, 2980 EGR_INCOMPLETE = 0x1 << 7, 2981 2982 OXYGEN_SENSOR_HEATER_AVAILABLE = 0x1 << 8, 2983 OXYGEN_SENSOR_HEATER_INCOMPLETE = 0x1 << 9, 2984 2985 OXYGEN_SENSOR_AVAILABLE = 0x1 << 10, 2986 OXYGEN_SENSOR_INCOMPLETE = 0x1 << 11, 2987 2988 AC_REFRIGERANT_AVAILABLE = 0x1 << 12, 2989 AC_REFRIGERANT_INCOMPLETE = 0x1 << 13, 2990 2991 SECONDARY_AIR_SYSTEM_AVAILABLE = 0x1 << 14, 2992 SECONDARY_AIR_SYSTEM_INCOMPLETE = 0x1 << 15, 2993 2994 EVAPORATIVE_SYSTEM_AVAILABLE = 0x1 << 16, 2995 EVAPORATIVE_SYSTEM_INCOMPLETE = 0x1 << 17, 2996 2997 HEATED_CATALYST_AVAILABLE = 0x1 << 18, 2998 HEATED_CATALYST_INCOMPLETE = 0x1 << 19, 2999 3000 CATALYST_AVAILABLE = 0x1 << 20, 3001 CATALYST_INCOMPLETE = 0x1 << 21, 3002 }; 3003 3004 /** 3005 * Ignition monitors only available for COMPRESSION vehicles. 3006 * These values come from the SAE J1979 standard. 3007 */ 3008 enum Obd2CompressionIgnitionMonitors : Obd2CommonIgnitionMonitors { 3009 EGR_OR_VVT_AVAILABLE = 0x1 << 6, 3010 EGR_OR_VVT_INCOMPLETE = 0x1 << 7, 3011 3012 PM_FILTER_AVAILABLE = 0x1 << 8, 3013 PM_FILTER_INCOMPLETE = 0x1 << 9, 3014 3015 EXHAUST_GAS_SENSOR_AVAILABLE = 0x1 << 10, 3016 EXHAUST_GAS_SENSOR_INCOMPLETE = 0x1 << 11, 3017 3018 BOOST_PRESSURE_AVAILABLE = 0x1 << 12, 3019 BOOST_PRESSURE_INCOMPLETE = 0x1 << 13, 3020 3021 NOx_SCR_AVAILABLE = 0x1 << 14, 3022 NOx_SCR_INCOMPLETE = 0x1 << 15, 3023 3024 NMHC_CATALYST_AVAILABLE = 0x1 << 16, 3025 NMHC_CATALYST_INCOMPLETE = 0x1 << 17, 3026 }; 3027 3028 /** 3029 * The status of the vehicle's secondary air system. 3030 * These values come from the SAE J1979 standard. 3031 */ 3032 enum Obd2SecondaryAirStatus : int32_t { 3033 UPSTREAM = 1, 3034 DOWNSTREAM_OF_CATALYCIC_CONVERTER = 2, 3035 FROM_OUTSIDE_OR_OFF = 4, 3036 PUMP_ON_FOR_DIAGNOSTICS = 8, 3037 }; 3038 3039 /** 3040 * The fuel type(s) supported by a vehicle. 3041 * These values come from the SAE J1979 standard. 3042 */ 3043 enum Obd2FuelType : int32_t { 3044 NOT_AVAILABLE = 0, 3045 GASOLINE = 1, 3046 METHANOL = 2, 3047 ETHANOL = 3, 3048 DIESEL = 4, 3049 LPG = 5, 3050 CNG = 6, 3051 PROPANE = 7, 3052 ELECTRIC = 8, 3053 BIFUEL_RUNNING_GASOLINE = 9, 3054 BIFUEL_RUNNING_METHANOL = 10, 3055 BIFUEL_RUNNING_ETHANOL = 11, 3056 BIFUEL_RUNNING_LPG = 12, 3057 BIFUEL_RUNNING_CNG = 13, 3058 BIFUEL_RUNNING_PROPANE = 14, 3059 BIFUEL_RUNNING_ELECTRIC = 15, 3060 BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION = 16, 3061 HYBRID_GASOLINE = 17, 3062 HYBRID_ETHANOL = 18, 3063 HYBRID_DIESEL = 19, 3064 HYBRID_ELECTRIC = 20, 3065 HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION = 21, 3066 HYBRID_REGENERATIVE = 22, 3067 BIFUEL_RUNNING_DIESEL = 23, 3068 }; 3069 3070 /** 3071 * This enum provides the canonical mapping for sensor properties that have an integer value. 3072 * The ordering of the values is taken from the OBD2 specification. 3073 * Some of the properties are represented as an integer mapping to another enum. In those cases 3074 * expect a comment by the property definition describing the enum to look at for the mapping. 3075 * Any value greater than the last reserved index is available to vendors to map their extensions. 3076 * While these values do not directly map to SAE J1979 PIDs, an equivalence is listed next 3077 * to each one to aid implementors. 3078 */ 3079 enum DiagnosticIntegerSensorIndex : int32_t { 3080 /** refer to FuelSystemStatus for a description of this value. */ 3081 FUEL_SYSTEM_STATUS = 0, /* PID 0x03 */ 3082 MALFUNCTION_INDICATOR_LIGHT_ON = 1, /* PID 0x01 */ 3083 3084 /** refer to IgnitionMonitorKind for a description of this value. */ 3085 IGNITION_MONITORS_SUPPORTED = 2, /* PID 0x01 */ 3086 3087 /** 3088 * The value of this sensor is a bitmask that specifies whether ignition-specific 3089 * tests are available and whether they are complete. The semantics of the individual 3090 * bits in this value are given by, respectively, SparkIgnitionMonitors and 3091 * CompressionIgnitionMonitors depending on the value of IGNITION_MONITORS_SUPPORTED. 3092 */ 3093 IGNITION_SPECIFIC_MONITORS = 3, /* PID 0x01 */ 3094 INTAKE_AIR_TEMPERATURE = 4, /* PID 0x0F */ 3095 3096 /** refer to SecondaryAirStatus for a description of this value. */ 3097 COMMANDED_SECONDARY_AIR_STATUS = 5, /* PID 0x12 */ 3098 NUM_OXYGEN_SENSORS_PRESENT = 6, /* PID 0x13 */ 3099 RUNTIME_SINCE_ENGINE_START = 7, /* PID 0x1F */ 3100 DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 8, /* PID 0x21 */ 3101 WARMUPS_SINCE_CODES_CLEARED = 9, /* PID 0x30 */ 3102 DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 10, /* PID 0x31 */ 3103 ABSOLUTE_BAROMETRIC_PRESSURE = 11, /* PID 0x33 */ 3104 CONTROL_MODULE_VOLTAGE = 12, /* PID 0x42 */ 3105 AMBIENT_AIR_TEMPERATURE = 13, /* PID 0x46 */ 3106 TIME_WITH_MALFUNCTION_LIGHT_ON = 14, /* PID 0x4D */ 3107 TIME_SINCE_TROUBLE_CODES_CLEARED = 15, /* PID 0x4E */ 3108 MAX_FUEL_AIR_EQUIVALENCE_RATIO = 16, /* PID 0x4F */ 3109 MAX_OXYGEN_SENSOR_VOLTAGE = 17, /* PID 0x4F */ 3110 MAX_OXYGEN_SENSOR_CURRENT = 18, /* PID 0x4F */ 3111 MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 19, /* PID 0x4F */ 3112 MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 20, /* PID 0x50 */ 3113 3114 /** refer to FuelType for a description of this value. */ 3115 FUEL_TYPE = 21, /* PID 0x51 */ 3116 FUEL_RAIL_ABSOLUTE_PRESSURE = 22, /* PID 0x59 */ 3117 ENGINE_OIL_TEMPERATURE = 23, /* PID 0x5C */ 3118 DRIVER_DEMAND_PERCENT_TORQUE = 24, /* PID 0x61 */ 3119 ENGINE_ACTUAL_PERCENT_TORQUE = 25, /* PID 0x62 */ 3120 ENGINE_REFERENCE_PERCENT_TORQUE = 26, /* PID 0x63 */ 3121 ENGINE_PERCENT_TORQUE_DATA_IDLE = 27, /* PID 0x64 */ 3122 ENGINE_PERCENT_TORQUE_DATA_POINT1 = 28, /* PID 0x64 */ 3123 ENGINE_PERCENT_TORQUE_DATA_POINT2 = 29, /* PID 0x64 */ 3124 ENGINE_PERCENT_TORQUE_DATA_POINT3 = 30, /* PID 0x64 */ 3125 ENGINE_PERCENT_TORQUE_DATA_POINT4 = 31, /* PID 0x64 */ 3126 LAST_SYSTEM_INDEX = ENGINE_PERCENT_TORQUE_DATA_POINT4, 3127 }; 3128 3129 /** 3130 * This enum provides the canonical mapping for sensor properties that have a floating-point value. 3131 * The ordering of the values is taken from the OBD2 specification. 3132 * Any value greater than the last reserved index is available to vendors to map their extensions. 3133 * While these values do not directly map to SAE J1979 PIDs, an equivalence is listed next 3134 * to each one to aid implementors. 3135 */ 3136 enum DiagnosticFloatSensorIndex : int32_t { 3137 CALCULATED_ENGINE_LOAD = 0, /* PID 0x04 */ 3138 ENGINE_COOLANT_TEMPERATURE = 1, /* PID 0x05 */ 3139 SHORT_TERM_FUEL_TRIM_BANK1 = 2, /* PID 0x06 */ 3140 LONG_TERM_FUEL_TRIM_BANK1 = 3, /* PID 0x07 */ 3141 SHORT_TERM_FUEL_TRIM_BANK2 = 4, /* PID 0x08 */ 3142 LONG_TERM_FUEL_TRIM_BANK2 = 5, /* PID 0x09 */ 3143 FUEL_PRESSURE = 6, /* PID 0x0A */ 3144 INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 7, /* PID 0x0B */ 3145 ENGINE_RPM = 8, /* PID 0x0C */ 3146 VEHICLE_SPEED = 9, /* PID 0x0D */ 3147 TIMING_ADVANCE = 10, /* PID 0x0E */ 3148 MAF_AIR_FLOW_RATE = 11, /* PID 0x10 */ 3149 THROTTLE_POSITION = 12, /* PID 0x11 */ 3150 OXYGEN_SENSOR1_VOLTAGE = 13, /* PID 0x14 */ 3151 OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 14, /* PID 0x14 */ 3152 OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 15, /* PID 0x24 */ 3153 OXYGEN_SENSOR2_VOLTAGE = 16, /* PID 0x15 */ 3154 OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 17, /* PID 0x15 */ 3155 OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 18, /* PID 0x25 */ 3156 OXYGEN_SENSOR3_VOLTAGE = 19, /* PID 0x16 */ 3157 OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 20, /* PID 0x16 */ 3158 OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 21, /* PID 0x26 */ 3159 OXYGEN_SENSOR4_VOLTAGE = 22, /* PID 0x17 */ 3160 OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 23, /* PID 0x17 */ 3161 OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 24, /* PID 0x27 */ 3162 OXYGEN_SENSOR5_VOLTAGE = 25, /* PID 0x18 */ 3163 OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 26, /* PID 0x18 */ 3164 OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 27, /* PID 0x28 */ 3165 OXYGEN_SENSOR6_VOLTAGE = 28, /* PID 0x19 */ 3166 OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 29, /* PID 0x19 */ 3167 OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 30, /* PID 0x29 */ 3168 OXYGEN_SENSOR7_VOLTAGE = 31, /* PID 0x1A */ 3169 OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 32, /* PID 0x1A */ 3170 OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 33, /* PID 0x2A */ 3171 OXYGEN_SENSOR8_VOLTAGE = 34, /* PID 0x1B */ 3172 OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 35, /* PID 0x1B */ 3173 OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 36, /* PID 0x2B */ 3174 FUEL_RAIL_PRESSURE = 37, /* PID 0x22 */ 3175 FUEL_RAIL_GAUGE_PRESSURE = 38, /* PID 0x23 */ 3176 COMMANDED_EXHAUST_GAS_RECIRCULATION = 39, /* PID 0x2C */ 3177 EXHAUST_GAS_RECIRCULATION_ERROR = 40, /* PID 0x2D */ 3178 COMMANDED_EVAPORATIVE_PURGE = 41, /* PID 0x2E */ 3179 FUEL_TANK_LEVEL_INPUT = 42, /* PID 0x2F */ 3180 EVAPORATION_SYSTEM_VAPOR_PRESSURE = 43, /* PID 0x32 */ 3181 CATALYST_TEMPERATURE_BANK1_SENSOR1 = 44, /* PID 0x3C */ 3182 CATALYST_TEMPERATURE_BANK2_SENSOR1 = 45, /* PID 0x3D */ 3183 CATALYST_TEMPERATURE_BANK1_SENSOR2 = 46, /* PID 0x3E */ 3184 CATALYST_TEMPERATURE_BANK2_SENSOR2 = 47, /* PID 0x3F */ 3185 ABSOLUTE_LOAD_VALUE = 48, /* PID 0x43 */ 3186 FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 49, /* PID 0x44 */ 3187 RELATIVE_THROTTLE_POSITION = 50, /* PID 0x45 */ 3188 ABSOLUTE_THROTTLE_POSITION_B = 51, /* PID 0x47 */ 3189 ABSOLUTE_THROTTLE_POSITION_C = 52, /* PID 0x48 */ 3190 ACCELERATOR_PEDAL_POSITION_D = 53, /* PID 0x49 */ 3191 ACCELERATOR_PEDAL_POSITION_E = 54, /* PID 0x4A */ 3192 ACCELERATOR_PEDAL_POSITION_F = 55, /* PID 0x4B */ 3193 COMMANDED_THROTTLE_ACTUATOR = 56, /* PID 0x4C */ 3194 ETHANOL_FUEL_PERCENTAGE = 57,/* PID 0x52 */ 3195 ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 58, /* PID 0x53 */ 3196 SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 59, /* PID 0x55 */ 3197 SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 60, /* PID 0x57 */ 3198 SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 61,/* PID 0x55 */ 3199 SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 62, /* PID 0x57 */ 3200 LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 63, /* PID 0x56 */ 3201 LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 64, /* PID 0x58 */ 3202 LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 65, /* PID 0x56 */ 3203 LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 66, /* PID 0x58 */ 3204 RELATIVE_ACCELERATOR_PEDAL_POSITION = 67, /* PID 0x5A */ 3205 HYBRID_BATTERY_PACK_REMAINING_LIFE = 68, /* PID 0x5B */ 3206 FUEL_INJECTION_TIMING = 69, /* PID 0x5D */ 3207 ENGINE_FUEL_RATE = 70, /* PID 0x5E */ 3208 LAST_SYSTEM_INDEX = ENGINE_FUEL_RATE, 3209 }; 3210 3211 /** 3212 * This enum lists the types of supported VMS messages. It is used as the first 3213 * integer in the vehicle property integers array and determines how the rest of 3214 * the message is decoded. 3215 */ 3216 enum VmsMessageType : int32_t { 3217 /** 3218 * A request from the subscribers to the VMS service to subscribe to a layer. 3219 * 3220 * This message type uses enum VmsMessageWithLayerIntegerValuesIndex. 3221 */ 3222 SUBSCRIBE = 1, 3223 3224 /** 3225 * A request from the subscribers to the VMS service to subscribe to a layer from a specific publisher. 3226 * 3227 * This message type uses enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex. 3228 */ 3229 SUBSCRIBE_TO_PUBLISHER = 2, 3230 3231 /** 3232 * A request from the subscribers to the VMS service to unsubscribes from a layer. 3233 * 3234 * This message type uses enum VmsMessageWithLayerIntegerValuesIndex. 3235 */ 3236 UNSUBSCRIBE = 3, 3237 3238 /** 3239 * A request from the subscribers to the VMS service to unsubscribes from a layer from a specific publisher. 3240 * 3241 * This message type uses enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex. 3242 */ 3243 UNSUBSCRIBE_TO_PUBLISHER = 4, 3244 3245 /** 3246 * Information from the publishers to the VMS service about the layers which the client can publish. 3247 * 3248 * This message type uses enum VmsOfferingMessageIntegerValuesIndex. 3249 */ 3250 OFFERING = 5, 3251 3252 /** 3253 * A request from the subscribers to the VMS service to get the available layers. 3254 * 3255 * This message type uses enum VmsBaseMessageIntegerValuesIndex. 3256 */ 3257 AVAILABILITY_REQUEST = 6, 3258 3259 /** 3260 * A request from the publishers to the VMS service to get the layers with subscribers. 3261 * 3262 * This message type uses enum VmsBaseMessageIntegerValuesIndex. 3263 */ 3264 SUBSCRIPTIONS_REQUEST = 7, 3265 3266 /** 3267 * A response from the VMS service to the subscribers to a VmsMessageType.AVAILABILITY_REQUEST 3268 * 3269 * This message type uses enum VmsAvailabilityStateIntegerValuesIndex. 3270 */ 3271 AVAILABILITY_RESPONSE = 8, 3272 3273 /** 3274 * A notification from the VMS service to the subscribers on a change in the available layers. 3275 * 3276 * This message type uses enum VmsAvailabilityStateIntegerValuesIndex. 3277 */ 3278 AVAILABILITY_CHANGE = 9, 3279 3280 /** 3281 * A response from the VMS service to the publishers to a VmsMessageType.SUBSCRIPTIONS_REQUEST 3282 * 3283 * This message type uses enum VmsSubscriptionsStateIntegerValuesIndex. 3284 */ 3285 SUBSCRIPTIONS_RESPONSE = 10, 3286 3287 /** 3288 * A notification from the VMS service to the publishers on a change in the layers with subscribers. 3289 * 3290 * This message type uses enum VmsSubscriptionsStateIntegerValuesIndex. 3291 */ 3292 SUBSCRIPTIONS_CHANGE = 11, 3293 3294 /** 3295 * A message from the VMS service to the subscribers or from the publishers to the VMS service 3296 * with a serialized VMS data packet as defined in the VMS protocol. 3297 * 3298 * This message type uses enum VmsBaseMessageIntegerValuesIndex. 3299 */ 3300 DATA = 12, 3301 }; 3302 3303 /** 3304 * Every VMS message starts with the type of the message from the VmsMessageType enum. 3305 * Messages with no parameters such as VmsMessageType.AVAILABILITY_REQUEST, 3306 * VmsMessageType.SUBSCRIPTIONS_REQUEST and VmsMessageType.DATA are also based on this enum. 3307 */ 3308 enum VmsBaseMessageIntegerValuesIndex : int32_t { 3309 /* The message type as enumerated by VmsMessageType enum. */ 3310 MESSAGE_TYPE = 0, 3311 }; 3312 3313 /* 3314 * A VMS message with a layer is sent as part of a VmsMessageType.SUBSCRIBE or 3315 * VmsMessageType.UNSUBSCRIBE messages. 3316 * 3317 * The layer type is defined in the VMS protocol, and the subtype and version are 3318 * controlled by the implementer of the publisher. 3319 */ 3320 enum VmsMessageWithLayerIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex { 3321 LAYER_TYPE = 1, 3322 LAYER_SUBTYPE = 2, 3323 LAYER_VERSION = 3, 3324 }; 3325 3326 /* 3327 * A VMS message with a layer and publisher ID is sent as part of a 3328 * VmsMessageType.SUBSCRIBE_TO_PUBLISHER and VmsMessageType.UNSUBSCRIBE_TO_PUBLISHER messages. 3329 */ 3330 enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex : VmsMessageWithLayerIntegerValuesIndex { 3331 PUBLISHER_ID = 4, 3332 }; 3333 3334 /* 3335 * An offering can be sent by publishers as part of VmsMessageType.OFFERING in order to 3336 * advertise which layers they can publish and under which constraints: e.g., I can publish Layer X 3337 * if someone else will publish Layer Y. 3338 * The offering contains the publisher ID which was assigned to the publisher by the VMS service. 3339 * A single offering is represented as: 3340 * - Layer type 3341 * - Layer subtype 3342 * - Layer version 3343 * - Number of dependencies (N) 3344 * - N x (Layer type, Layer subtype, Layer version) 3345 */ 3346 enum VmsOfferingMessageIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex { 3347 PUBLISHER_ID = 1, 3348 NUMBER_OF_OFFERS = 2, 3349 OFFERING_START = 3, 3350 }; 3351 3352 /** 3353 * A subscriptions state is sent to the publishers in response to a change in the subscriptions 3354 * as part of a VmsMessageType.SUBSCRIPTIONS_CHANGE, or in response to a 3355 * VmsMessageType.SUBSCRIPTIONS_REQUEST message as part of VmsMessageType.SUBSCRIPTIONS_RESPONSE. 3356 * The VMS service issues monotonically increasing sequence numbers, and in case a subscriber receives 3357 * a smaller sequnce number it should ignore the message. 3358 * The subscriptions are sent as a list of layers followed by a list of associated layers: 3359 * {Sequence number, N, M, N x layer, M x associated layer} 3360 * A subscribed layer is represented as three integers: 3361 * - Layer type 3362 * - Layer subtype 3363 * - Layer version 3364 * A subscribed associated layer is a layer with a list of publisher IDs. It is represented as: 3365 * - Layer type 3366 * - Layer subtype 3367 * - Layer version 3368 * - Number of publisher IDs (N) 3369 * - N x publisher ID 3370 */ 3371 enum VmsSubscriptionsStateIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex { 3372 SEQUENCE_NUMBER = 1, 3373 NUMBER_OF_LAYERS = 2, 3374 NUMBER_OF_ASSOCIATED_LAYERS = 3, 3375 SUBSCRIPTIONS_START = 4, 3376 }; 3377 3378 /** 3379 * An availability state is sent to the subscribers in response to a change in the available 3380 * layers as part of a VmsMessageType.AVAILABILITY_CHANGE message, or in response to a 3381 * VmsMessageType.AVAILABILITY_REQUEST message as part of a VmsMessageType.AVAILABILITY_RESPONSE. 3382 * The VMS service issues monotonically increasing sequence numbers, and in case a subscriber receives 3383 * a smaller sequnce number, it should ignore the message. 3384 * An available associated layer is a layer with a list of publisher IDs: 3385 * - Layer type 3386 * - Layer subtype 3387 * - Layer version 3388 * - Number of publisher IDs (N) 3389 * - N x publisher ID 3390 */ 3391 enum VmsAvailabilityStateIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex { 3392 SEQUENCE_NUMBER = 1, 3393 NUMBER_OF_ASSOCIATED_LAYERS = 2, 3394 LAYERS_START = 3, 3395 }; 3396 3397