The vehicle HAL interface defines the properties OEMs can implement and contains property metadata (for example, whether the property is an int and which change modes are allowed). The vehicle HAL interface is based on accessing (read, write, subscribe) a property, which is an abstraction for a specific function.

HAL interfaces

The vehicle HAL uses the following interfaces:

The vehicle HAL uses the following callback interfaces:

Vehicle properties

Properties can be read-only, write-only (used to pass information to vehicle HAL level), or read and write (support of most properties is optional). Each property is uniquely identified by an int32 key and has a predefined type (value_type):

Zone types

The vehicle HAL defines three zone types:

Each zoned property should use pre-defined zone type. If necessary, you can use a custom zone type for each property (for details, see Handling custom properties).

Configuring a property

Use vehicle_prop_config_t to provide configuration information for each property. Information includes:

In addition, some properties have specific configuration flags to represent capability.

Handling zone properties

A zoned property is equivalent to a collection of multiple properties where each sub property is accessible by specified zone value.

Get calls

During initialization, the value for the property may not be available yet as the matching vehicle network message has not yet been received. In such cases, the get call should return -EAGAIN. Some properties (such as HVAC) have separate on/off power property. Calling get for such a property (when powered off) should return a special value (VEHICLE_INT_OUT_OF_RANGE_OFF/VEHICLE_FLOAT_OUT_OF_RANGE_OFF) rather than returning an error.

In addition, some properties (such as HVAC temperature) can have a value to indicate it is in max power mode rather than in specific temperature value. In such cases, use special values to represent such state.

Example: get HVAC Temperature

Vehicle HAL get HVAC example

Figure 1. Get HVAC temperature (CS = CarService, VNS = VehicleNetworkService, VHAL = Vehicle HAL)

Set calls

A set call is an asynchronous operation involving event notification after a requested change is made. In a typical operation, a set call leads to making a change request across vehicle network. When the change is performed by the electronic control unit (ECU) owning the property, the updated value is returned through vehicle network and the vehicle HAL sends an updated value as an event to vehicle network service (VNS).

Some set calls may require initial data to be ready but during initialization, such data may not be available yet. In such cases, the set call should return -EAGAIN. Some properties with separate power on /off should return -ESHUTDOWN when the property is powered off and set cannot be done.

Until set is made effective, get does not necessarily return the same value as what is set. The exception is a property with change mode of VEHICLE_PROP_CHANGE_MODE_ON_SET. This property notifies change only when it is set by external component outside Android (for example, clock properties such as VEHICLE_PROPERTY_UNIX_TIME).

Example: set HVAC Temperature

Vehicle HAL set HVAC example

Figure 2. Set HVAC temperature (CD = CarService, VNS = VehicleNetworkService, VHAL = Vehicle HAL)

Handling custom properties

To support partner-specific needs, the vehicle HAL allows custom properties that are restricted to system apps. Use the following guidelines when working with custom properties:

Handling HVAC properties

You can use the vehicle HAL to control HVAC by setting HVAC-related properties. Most HVAC properties are zoned properties, but a few are non-zoned (global) properties. Example properties defined include:

For full list of HVAC properties, search for VEHICLE_PROPERTY_HVAC_* in vehicle.h.

Handling sensor properties

Vehicle HAL sensor properties represent real sensor data or policy information such as driving status. Some sensor information (such as driving status and day/night mode) is accessible by any app without restriction as the data is mandatory to build a safe vehicle application. Other sensor information (such as vehicle speed) is more sensitive and requires specific permissions that users can manage.

Supported sensor properties include: