Skip to content
Vehicle properties
HVAC & climate

HVAC_DUAL_ON

What it is

Enable temperature coupling between areas.

The AreaIDs for HVAC_DUAL_ON property shall contain a combination of HVAC_TEMPERATURE_SET AreaIDs that can be coupled together. If HVAC_TEMPERATURE_SET is mapped to AreaIDs [a_1, a_2, ..., a_n], and if HVAC_DUAL_ON can be enabled to couple a_i and a_j, then HVAC_DUAL_ON property must be mapped to [a_i | a_j]. Further, if a_k and a_l can also be coupled together separately then HVAC_DUAL_ON must be mapped to [a_i | a_j, a_k | a_l].

Example: A car has two front seats (ROW_1_LEFT, ROW_1_RIGHT) and three back seats (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). There are two temperature control units -- driver side and passenger side -- which can be optionally synchronized. This may be expressed in the AreaIDs this way: - HVAC_TEMPERATURE_SET->[ROW_1_LEFT | ROW_2_LEFT, ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT] - HVAC_DUAL_ON->[ROW_1_LEFT | ROW_2_LEFT | ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT]

When the property is enabled, the ECU must synchronize the temperature for the affected areas. Any parameters modified as a side effect of turning on/off the DUAL_ON parameter shall generate onPropertyEvent() callbacks to the VHAL. In addition, if setting a temperature (i.e. driver's temperature) changes another temperature (i.e. front passenger's temperature), then the appropriate onPropertyEvent() callbacks must be generated. If a user changes a temperature that breaks the coupling (e.g. setting the passenger temperature independently) then the VHAL must send the appropriate onPropertyEvent() callbacks (i.e. HVAC_DUAL_ON = false, HVAC_TEMPERATURE_SET[AreaID] = xxx, etc).

This property is defined as VehiclePropertyAccess.READ_WRITE, but OEMs have the option to implement it as VehiclePropertyAccess.READ only.

How the ID is built

A property ID is a 32-bit value packing four fields. Reading 0x15200509 apart:

FieldMaskValueMeans
Group0xf00000000x10000000SYSTEM
Area0x0f0000000x05000000SEAT
Type0x00ff00000x00200000BOOLEAN
Ordinal0x0000ffff0x000005090x509

Reading it from an app

CarPropertyManager mgr = (CarPropertyManager)
        car.getCarManager(Car.PROPERTY_SERVICE);

boolean value =
        mgr.getBooleanProperty(VehiclePropertyIds.HVAC_DUAL_ON, areaId);

This property can be read and written, though an OEM may implement it as read-only. It fires a callback whenever the value changes.