Home | History | Annotate | Download | only in 2.0
      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