C
Zoned HVAC Control
Demonstrates how to handle zoned features when using the Qt IF Generator Extensions for Android Automotive.
This example uses the zones capability of the Qt IF Generator Extensions for Android Automotive. For a detailed description see the HVAC Control documentation.
This page covers only the usage of zones.
Preparing Configuration Files with Zoning Enabled
First, in the .qface
file, the zoned attribute of config
for the component must be set to true:
@config: { zoned: true, id: "io.qt.qtif.android.ClimateControl/1.0", ... }
Second, to be able to access a specific VHAL property in different zones, it must be assigned to those zones. In the following example the targetTemperatureSet attribute of the QIfClimateControl
will be present both in the Driver
and Passenger
zones.
QtIfAndroidVehicleFunctions.QIfClimateControl#targetTemperatureSet: config_android_automotive: vhalId: HVAC_TEMPERATURE_SET zone: - DRIVER_ZONE_ID - PASSENGER_ZONE_ID vhalType: FLOAT javaType: Float mightNeedConversion: true
The DRIVER_ZONE_ID
and PASSENGER_ZONE_ID
are zone aliases to (Android Automotive Area Types).
zoneAliases: - DRIVER_ZONE_ID = VehicleAreaSeat.SEAT_ROW_1_LEFT | VehicleAreaSeat.SEAT_ROW_2_LEFT | VehicleAreaSeat.SEAT_ROW_2_CENTER - PASSENGER_ZONE_ID = VehicleAreaSeat.SEAT_ROW_1_RIGHT | VehicleAreaSeat.SEAT_ROW_2_RIGHT - SEAT_ALL = DRIVER_ZONE_ID | PASSENGER_ZONE_ID - REAR_WINDSHIELD = VehicleAreaWindow.WINDOW_REAR_WINDSHIELD - FRONT_WINDSHIELD = VehicleAreaWindow.WINDOW_FRONT_WINDSHIELD
The names of the zones, that will be used in QML (Driver
and Passenger
, etc.), are defined in zoneMappings section:
zoneMappings: "": SEAT_ALL Driver: DRIVER_ZONE_ID Passenger: PASSENGER_ZONE_ID RearWindshield: REAR_WINDSHIELD FrontWindshield: FRONT_WINDSHIELD
Running the Example
To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, see Qt Creator: Tutorial: Build and run.
Using Zones in QML
As in the HVAC Control example, the connection to the back end is defined in a distinct QML file: ClimateControlFacade.qml
.
Accessing a particular zone's property in QML is straightforward. The generated ClimateControl
component provides the zoneAt
property, which subsequently provides an additional property, named after the zone (Driver, Passenger, etc.). This property is an instance of the ClimateControl component. However, the only active properties are the ones that have been assigned to a particular zone. So, you could assign a value for Driver
's defroster, but it would not give any effect.
As the zone is a separate object we have to make the connections separately for each zone.
Connections { target: climateControl.zoneAt.Driver function onTargetTemperatureSetChanged(targetTemperatureSet) { facade.targetTemperatureSetDriver = targetTemperatureSet } } Connections { target: climateControl.zoneAt.Passenger function onTargetTemperatureSetChanged(targetTemperatureSet) { facade.targetTemperatureSetPassenger = targetTemperatureSet } }
To pass the values of the zoned properties to the back end, we must do it with respect to the zone containing those properties.
Connections { id: ui2vhal target: facade // Defrosters function onDefrostFrontOnChanged() { climateControl.zoneAt.FrontWindshield.defroster = facade.defrostFrontOn } function onDefrostRearOnChanged() { climateControl.zoneAt.RearWindshield.defroster = facade.defrostRearOn } // Temperatures function onTargetTemperatureSetDriverChanged() { climateControl.zoneAt.Driver.targetTemperatureSet = facade.targetTemperatureSetDriver } function onTargetTemperatureSetPassengerChanged() { climateControl.zoneAt.Passenger.targetTemperatureSet = facade.targetTemperatureSetPassenger }
See also Qt for Android and Qt IF.
Available under certain Qt licenses.
Find out more.