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
QIfHvacpowerOnHVAC_POWER_ON
acOnHVAC_AC_ON
maxAcOnHVAC_MAX_AC_ON
dualOnHVAC_DUAL_ON
autoOnHVAC_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
perfSteeringAnglePERF_STEERING_ANGLE
gearSelectionGEAR_SELECTION
currentGearCURRENT_GEAR
parkingBrakeAutoApplyPARKING_BRAKE_AUTO_APPLY
parkingBrakeOnPARKING_BRAKE_ON
turnSignalStateTURN_SIGNAL_STATE
ignitionStateIGNITION_STATE
absActiveABS_ACTIVE
tractionControlActiveTRACTION_CONTROL_ACTIVE
distanceDisplayUnitsDISTANCE_DISPLAY_UNITS
vehicleSpeedDisplayUnitsVEHICLE_SPEED_DISPLAY_UNITS
envOutsideTemperatureENV_OUTSIDE_TEMPERATURE // QIfEngineInfo
QIfEngineInfoengineCoolantTempENGINE_COOLANT_TEMP
engineOilLevelENGINE_OIL_LEVEL
engineOilTempENGINE_OIL_TEMP
engineRpmENGINE_RPM // QIfHWControl
QIfHWControlapPowerBootupReasonAP_POWER_BOOTUP_REASON
displayBrightnessDISPLAY_BRIGHTNESS

如何使用它

前端库可以通过直接与C++代码交互或使用QML插件来使用。要在C++代码级别使用插件,请遵循Qt IF车辆功能模块中描述的步骤。(请注意,C++代码是在默认的Qt命名空间下生成的,如在Qt在命名空间内。)使用QML插件的示例由车辆属性浏览器示例展示。通过以下步骤将此库集成到您的项目中

  1. 如果使用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
    )
  2. 将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

  3. 在AndroidManifest.xml文件中添加访问VHAL属性的适当权限(例如,对于HVAC将是CONTROL_CAR_CLIMATE
    <uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE"/>
  4. 在QML文件中添加此插件的导入语句
    import QtIf.Android.VehicleProperties
  5. 在QML中定义所需组件的实例(例如,HVAC)
    HVAC { id: climateControl }
  6. 与车辆属性的交互与任何其他典型Qt属性相同
    onClicked: {
        climateControl.setHvacAcOn(!climateControl.hvacAcOn)
    }
    text: climateControl.hvacAcOn ? "AC ON" : "AC OFF"
  7. 如果车辆有区域接口,则与属性的交互需要指向特定区域(请参阅区域HVAC控制)。

已知问题和限制

  1. 目前,为了部署使用本模块的应用程序,需要采取额外措施以满足依赖关系
    1. 通过在gradle.properties文件中添加android.useAndroidX=true来启用AndroidX
    2. 将android.car.jar包添加到APK中

    有关更多信息,请参阅在Android上部署应用程序

  2. Android构建必须与本模块使用的车辆接口定义保持一致,并且必须与APK一起提供适当的android.car.jar包,如车辆属性浏览器示例中所示。
  3. 此库的当前版本使用JNI后端来访问Android Car服务。要使用Qt Remote Objects后端,库需要对源代码进行调整。
  4. 属性fuelDoorOpen在Android 10上是只读的,但从Android 11开始可以写入。
  5. 静态车辆属性在模拟器中不会对更改做出反应。静态属性应在生产期间由汽车制造商一次性设置,因此Android Automotive不会广播其更改。这些属性包括
    1. QIfCarInfo.infoModelYear (INFO_MODEL_YEAR)
    2. QIfCarInfo.infoFuelCapacity (INFO_FUEL_CAPACITY)
    3. QIfCarInfo.infoEvBatteryCapacity (INFO_EV_BATTERY_CAPACITY)
    4. QIfCarInfo.infoFuelDoorLocation (INFO_FUEL_DOOR_LOCATION)
    5. QIfCarInfo.infoEvPortLocation (INFO_EV_PORT_LOCATION)
    6. QIfCarInfo.infoDriverSeat (INFO_DRIVER_SEAT)

    Android Automotive静态属性的全列表可在以下AOSP:车辆属性源代码中找到AOSP: 车辆属性源代码

也请参阅 Qt for AndroidQt接口框架

在特定的Qt许可证下提供。
了解更多。