C
Qt IF Android车辆属性
Qt IF Android车辆属性库是Qt Android Automotive车辆模块的一部分。这些自动生成的库基于相似的Qt IF车辆功能。
访问车辆属性的接口由一个QFace
配置文件定义,它覆盖了Android Automotive 车辆属性。该接口描述用于生成各种前端和后端,这些前端和后端可以用于访问车辆数据或进行开发中的模拟。该解决方案基于来自Qt接口框架生成器的模板以及我们在Qt Android Automotive车辆模块中实现的自己的Qt IF生成器扩展。
工作原理
生成的后端之一,Qt for Android Automotive JNI后端促进了直接访问Android Automotive车辆属性。生成一个C++前端以访问多个后端访问车辆数据。还生成一个Qt Quick插件,通过使用QML语言实现相同的功能。
可用的车辆属性集合,这些属性按功能组件分组,由QFace
配置文件以及一个YAML注释文件(YAML注释)定义。这两个文件反映了在AOSP源代码(VHAL v2.0)中定义的Android车辆属性,并定义了属性ID映射以及区域配置。因此,修改此接口需要反映在提到的文件中,然后从源代码重新构建这些库。
模块结构
车辆属性包括以下组件
- 车辆属性前端:一个包含QFace格式中定义的接口功能的库。
- 车辆属性QML插件:负责在Qt Quick应用程序和Qt IF车辆属性前端之间进行接口操作。
- 车辆属性JNI后端:一个专门实现能与后端服务(直接访问Android汽车API的那个)交互的实现。
车辆属性按以下组件分组
组件名称 | 属性名称 | 车辆属性ID // QIfHvac |
---|---|---|
QIfHvac | powerOn | HVAC_POWER_ON |
acOn | HVAC_AC_ON | |
maxAcOn | HVAC_MAX_AC_ON | |
dualOn | HVAC_DUAL_ON | |
autoOn | HVAC_AUTO_ON | |
当前温度 | HVAC_CURRENT_TEMPERATURE | |
设定温度 | HVAC_SET_TEMPERATURE | |
风扇方向 | HVAC_FAN_DIRECTION | |
实际风扇速度 | HVAC_ACTUAL_FAN_SPEED_RPM | |
风扇速度 | HVAC_FAN_SPEED | |
除霜器 | HVAC_DEFROSTER | |
开启循环通风 | HVAC_RECIRC_ON | |
自动循环通风开启 | HVAC_AUTO_RECIRC_ON | |
座椅通风 | HVAC_SEAT_VENTILATION | |
最大除霜开启 | HVAC_MAX_DEFROST_ON | |
座椅温度 | HVAC_SEAT_TEMPERATURE | |
侧视镜加热 | HVAC_SIDE_MIRROR_HEAT | |
方向盘加热 | HVAC_STEERING_WHEEL_HEAT | |
温度显示单位 | HVAC_TEMPERATURE_DISPLAY_UNITS // QIfWindowControl | |
QIfWindowControl | 窗口位置 | WINDOW_POS |
窗口移动 | WINDOW_MOVE | |
窗口锁定 | WINDOW_LOCK // QIfCarInfo | |
QIfCarInfo | 车型年款信息 | INFO_MODEL_YEAR |
油箱容量信息 | INFO_FUEL_CAPACITY | |
电动车电池容量信息 | INFO_EV_BATTERY_CAPACITY | |
燃料门位置信息 | INFO_FUEL_DOOR_LOCATION | |
电动车充电口位置信息 | INFO_EV_PORT_LOCATION | |
驾驶员座椅信息 | INFO_DRIVER_SEAT // QIfMirrorControl | |
QIfMirrorControl | 镜子Z轴位置 | MIRROR_Z_POS |
镜子Z轴移动 | MIRROR_Z_MOVE | |
镜子Y轴位置 | MIRROR_Y_POS | |
镜子Y轴移动 | MIRROR_Y_MOVE | |
镜子锁定 | MIRROR_LOCK | |
镜子折叠 | MIRROR_FOLD // QIfSeatControl | |
QIfSeatControl | 座椅记忆选择 | SEAT_MEMORY_SELECT |
座椅记忆设置 | SEAT_MEMORY_SET | |
座椅安全带扣紧 | SEAT_BELT_BUCKLED | |
座椅安全带高度位置 | SEAT_BELT_HEIGHT_POS | |
座椅安全带高度移动 | SEAT_BELT_HEIGHT_MOVE | |
座椅前后位置 | SEAT_FORE_AFT_POS | |
座椅前后移动 | SEAT_FORE_AFT_MOVE | |
座椅靠背角度1位置 | SEAT_BACKREST_ANGLE_1_POS | |
座椅靠背角度1移动 | SEAT_BACKREST_ANGLE_1_MOVE | |
座椅靠背角度2位置 | SEAT_BACKREST_ANGLE_2_POS | |
座椅靠背角度2移动 | SEAT_BACKREST_ANGLE_2_MOVE | |
座椅高度位置 | SEAT_HEIGHT_POS | |
座椅高度移动 | SEAT_HEIGHT_MOVE | |
座椅深度位置 | SEAT_DEPTH_POS | |
座椅深度移动 | SEAT_DEPTH_MOVE | |
座椅倾斜位置 | SEAT_TILT_POS | |
座椅倾斜移动 | SEAT_TILT_MOVE | |
座椅腰部前后位置 | SEAT_LUMBAR_FORE_AFT_POS | |
座椅腰部前后移动 | SEAT_LUMBAR_FORE_AFT_MOVE | |
座椅腰部侧面支撑位置 | SEAT_LUMBAR_SIDE_SUPPORT_POS | |
座椅腰部侧面支撑移动 | SEAT_LUMBAR_SIDE_SUPPORT_MOVE | |
座椅头枕高度位置 | SEAT_HEADREST_HEIGHT_POS | |
座椅头枕高度移动 | SEAT_HEADREST_HEIGHT_MOVE | |
座椅头枕角度位置 | SEAT_HEADREST_ANGLE_POS | |
座椅头枕角度移动 | SEAT_HEADREST_ANGLE_MOVE | |
座椅头枕前后位置 | SEAT_HEADREST_FORE_AFT_POS | |
座椅头枕前后移动 | SEAT_HEADREST_FORE_AFT_MOVE | |
座椅占用 | SEAT_OCCUPANCY // QIfTireControl | |
QIfTireControl | 轮胎气压 | TIRE_PRESSURE |
轮胎气压显示单位 | TIRE_PRESSURE_DISPLAY_UNITS // QIfLightsControl | |
QIfLightsControl | 大灯状态 | HEADLIGHTS_STATE |
远光灯状态 | HIGH_BEAM_LIGHTS_STATE | |
雾灯状态 | FOG_LIGHTS_STATE | |
危险报警灯状态 | HAZARD_LIGHTS_STATE | |
大灯开关 | HEADLIGHTS_SWITCH | |
远光灯开关 | HIGH_BEAM_LIGHTS_SWITCH | |
雾灯开关 | FOG_LIGHTS_SWITCH | |
危险报警灯开关 | HAZARD_LIGHTS_SWITCH | |
车内灯状态 | CABIN_LIGHTS_STATE | |
车内灯开关 | CABIN_LIGHTS_SWITCH | |
阅读灯状态 | READING_LIGHTS_STATE | |
阅读灯开关 | READING_LIGHTS_SWITCH | |
夜间模式 | NIGHT_MODE // QIfFuelControl | |
QIfFuelControl | 燃油水平 | FUEL_LEVEL |
燃油门开启 | FUEL_DOOR_OPEN | |
燃油水平低 | FUEL_LEVEL_LOW | |
燃油体积显示单位 | FUEL_VOLUME_DISPLAY_UNITS | |
燃油消耗单位:体积/距离 | FUEL_CONSUMPTION_UNITS_DISTANCE_over_VOLUME | |
剩余行驶里程 | RANGE_REMAINING | |
电动车电池电量 | EV_BATTERY_LEVEL | |
电动车充电口开启 | EV_CHARGE_PORT_OPEN | |
电动车充电口连接 | EV_CHARGE_PORT_CONNECTED | |
电动车电池瞬时充电率 | EV_BATTERY_INSTANTANEOUS_CHARGE_RATE | |
电动车电池显示单位 | EV_BATTERY_DISPLAY_UNITS // QIfDoorControl | |
QIfDoorControl | 车门位置 | DOOR_POS |
车门移动 | DOOR_MOVE | |
车门锁定 | DOOR_LOCK // QIfDriveInfo | |
QIfDriveInfo | 性能总里程表 | PERF_ODOMETER |
性能车辆速度 | PERF_VEHICLE_SPEED | |
性能车辆速度显示 | PERF_VEHICLE_SPEED_DISPLAY | |
perfSteeringAngle | PERF_STEERING_ANGLE | |
gearSelection | GEAR_SELECTION | |
currentGear | CURRENT_GEAR | |
parkingBrakeAutoApply | PARKING_BRAKE_AUTO_APPLY | |
parkingBrakeOn | PARKING_BRAKE_ON | |
turnSignalState | TURN_SIGNAL_STATE | |
ignitionState | IGNITION_STATE | |
absActive | ABS_ACTIVE | |
tractionControlActive | TRACTION_CONTROL_ACTIVE | |
distanceDisplayUnits | DISTANCE_DISPLAY_UNITS | |
vehicleSpeedDisplayUnits | VEHICLE_SPEED_DISPLAY_UNITS | |
envOutsideTemperature | ENV_OUTSIDE_TEMPERATURE // QIfEngineInfo | |
QIfEngineInfo | engineCoolantTemp | ENGINE_COOLANT_TEMP |
engineOilLevel | ENGINE_OIL_LEVEL | |
engineOilTemp | ENGINE_OIL_TEMP | |
engineRpm | ENGINE_RPM // QIfHWControl | |
QIfHWControl | apPowerBootupReason | AP_POWER_BOOTUP_REASON |
displayBrightness | DISPLAY_BRIGHTNESS |
如何使用它
前端库可以通过直接与C++代码交互或使用QML插件来使用。要在C++代码级别使用插件,请遵循Qt IF车辆功能模块中描述的步骤。(请注意,C++代码是在默认的Qt命名空间下生成的,如在Qt在命名空间内。)使用QML插件的示例由车辆属性浏览器示例展示。通过以下步骤将此库集成到您的项目中
- 如果使用qmake,请将Qt IF Android车辆属性前端依赖项添加到您的qmake项目文件(*.pro)中
QT += ifandroidvehicleproperties interfaceframework
如果使用CMake
find_package(Qt6 COMPONENTS InterfaceFramework) find_package(Qt6 COMPONENTS IfAndroidVehicleProperties) target_link_libraries(my_target PUBLIC Qt::InterfaceFramework Qt::IfAndroidVehicleProperties )
- 将android运行时环境补充依赖库的路径添加到CMake中。对于qmake使用以下代码
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
对于CMake使用以下代码
set_property(TARGET my_target PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android)
注意:为了在Android上设置目标属性,请按CMake手册中的finalization所述使用
MANUAL_FINALIZATION
。 - 在AndroidManifest.xml文件中添加访问VHAL属性的适当权限(例如,对于HVAC将是
CONTROL_CAR_CLIMATE
)<uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE"/>
- 在QML文件中添加此插件的导入语句
import QtIf.Android.VehicleProperties
- 在QML中定义所需组件的实例(例如,HVAC)
HVAC { id: climateControl }
- 与车辆属性的交互与任何其他典型Qt属性相同
onClicked: { climateControl.setHvacAcOn(!climateControl.hvacAcOn) } text: climateControl.hvacAcOn ? "AC ON" : "AC OFF"
- 如果车辆有区域接口,则与属性的交互需要指向特定区域(请参阅区域HVAC控制)。
与此库相关的示例
已知问题和限制
- 目前,为了部署使用本模块的应用程序,需要采取额外措施以满足依赖关系
- 通过在gradle.properties文件中添加android.useAndroidX=true来启用AndroidX
- 将android.car.jar包添加到APK中
有关更多信息,请参阅在Android上部署应用程序。
- Android构建必须与本模块使用的车辆接口定义保持一致,并且必须与APK一起提供适当的
android.car.jar
包,如车辆属性浏览器示例中所示。 - 此库的当前版本使用JNI后端来访问Android Car服务。要使用Qt Remote Objects后端,库需要对源代码进行调整。
- 属性
fuelDoorOpen
在Android 10上是只读的,但从Android 11开始可以写入。 - 静态车辆属性在模拟器中不会对更改做出反应。静态属性应在生产期间由汽车制造商一次性设置,因此Android Automotive不会广播其更改。这些属性包括
- QIfCarInfo.infoModelYear (INFO_MODEL_YEAR)
- QIfCarInfo.infoFuelCapacity (INFO_FUEL_CAPACITY)
- QIfCarInfo.infoEvBatteryCapacity (INFO_EV_BATTERY_CAPACITY)
- QIfCarInfo.infoFuelDoorLocation (INFO_FUEL_DOOR_LOCATION)
- QIfCarInfo.infoEvPortLocation (INFO_EV_PORT_LOCATION)
- QIfCarInfo.infoDriverSeat (INFO_DRIVER_SEAT)
Android Automotive静态属性的全列表可在以下AOSP:车辆属性源代码中找到AOSP: 车辆属性源代码。
也请参阅 Qt for Android 和 Qt接口框架。
在特定的Qt许可证下提供。
了解更多。