Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 Cloud Translation API 翻译。
Switch to English

车辆特性

车辆硬件抽象层(VHAL)接口定义OEM可以实现的属性,并包含属性元数据(例如,该属性是否为int以及允许使用哪些更改模式)。 VHAL接口基于访问(读取,写入,订阅)属性,该属性是特定功能的抽象。

HAL接口

VHAL使用以下接口:

  • getAllPropConfigs()生成(vec<VehiclePropConfig>propConfigs)
    列出VHAL支持的所有属性的配置。 CarService仅使用支持的属性。
  • getPropConfigs(vec<int32_t> props)生成(StatusCode status,vec<VehiclePropConfig> propConfigs);
    返回所选属性的配置。
  • set(VehiclePropValue propValue)生成(StatusCodestatus);
    向属性写一个值。写入结果是针对每个属性定义的。
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)生成(StatusCode status);
    开始监视属性值更改。对于区域属性, unsubscribe(IVehicleCallback callback, int32_t propId)生成(StatusCode status);

VHAL使用以下回调接口:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    通知车辆财产的价值变动。仅应针对已订阅的属性执行此操作。
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    返回全局VHAL级别错误或每个属性错误。全局错误导致HAL重新启动,这可能导致重新启动其他组件(包括应用程序)。

车辆性能

属性可以是只读,仅写(用于将信息传递到VHAL级别),也可以是读和写(支持大多数属性是可选的)。每个属性都由int32键唯一标识,并具有预定义的类型( value_type ):

  • BYTES
  • BOOLEAN
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

基于属性支持的区域数,分区属性可能具有多个值。

区域类型

VHAL定义了多种区域类型:

区域类型描述
GLOBAL此属性是单例,没有多个区域。
WINDOW基于Windows的区域,使用VehicleAreaWindow枚举。
MIRROR基于镜像的区域,使用VehicleAreaMirror枚举。
SEAT基于座位的面积,使用VehicleAreaSeat枚举。
DOOR基于门的面积,使用VehicleAreaDoor枚举。
WHEEL基于车轮的面积,使用VehicleAreaWheel枚举。

每个分区属性都必须使用预定义的区域类型。每种区域类型都有在该区域类型的枚举中定义的一组位标志。例如, SEAT区域定义了VehicleAreaSeat枚举:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

区域编号

区域属性通过区域ID寻址。每个分区属性都可以支持一个或多个区域ID。区域ID由其各自的枚举中的一个或多个标志组成。例如,使用VehicleAreaSeat的属性可能使用以下区域ID:

物品描述
ROW_1_LEFT | ROW_1_RIGHT区域ID适用于两个前排座椅。
ROW_2_LEFT仅适用于左后座椅。
ROW_2_RIGHT仅适用于右后排座椅。

财产状况

每个属性值都带有VehiclePropertyStatus值。这指示属性的当前状态:

物品描述
AVAILABLE属性可用,并且值有效。
UNAVAILABLE属性值当前不可用。用于支持的属性的暂时禁用的功能。
ERROR此属性有问题。

配置属性

使用VehiclePropConfig提供每个属性的配置信息。信息包括:

多变的描述
access r wrw
changeMode表示在更改与连续之间如何监视属性。
areaConfigs areaIdminmax值。
configArray附加配置参数。
configString以字符串形式传递的其他信息。
minSampleRate maxSampleRate
prop物业编号,int

处理区域属性

分区属性等效于多个属性的集合,其中可以使用指定的区域ID值访问每个子属性。

  • 区域属性的get调用始终在请求中包含Area ID。因此,仅返回请求区域ID的当前值。如果该属性是全局属性,则“区域ID”为0。
  • 区域属性的set调用始终在请求中包含Area ID。因此,仅更改了请求的区域ID。
  • subscribe呼叫会为该属性的所有区域ID生成事件。

接听电话

在初始化期间,该属性的值可能尚不可用,因为尚未收到匹配的车辆网络消息。在这种情况下, get调用应返回-EAGAIN 。某些属性(例如HVAC)具有单独的开/关电源属性。调用get这样的属性(在断电时)应该返回UNAVAILABLE状态,而不是返回错误。例如,获取HVAC温度

VHAL获取HVAC示例

图1 。获取HVAC温度(CS = CarService,VHAL =车辆HAL)

设定通话

set调用是一种异步操作,涉及在进行请求的更改后进行事件通知。在典型的操作中, set呼叫导致在整个车辆网络上发出更改请求。某些set调用可能需要准备好初始数据,但在初始化期间,此类数据可能尚不可用。在这种情况下, set调用应返回-EAGAIN 。当属性关闭电源且无法完成设置时,某些具有单独打开/关闭电源的属性应返回-ESHUTDOWN 。在set生效之前, get不一定返回与set相同的值。例如, set HVAC Temperature

VHAL设置HVAC示例

图2 。设置HVAC温度(CS = CarService,VHAL =车辆HAL)

处理自定义属性

为了支持特定于合作伙伴的需求,VHAL允许使用仅限于系统应用程序的自定义属性。使用自定义属性时,请遵循以下准则:

  • 应该使用以下字段来生成属性ID:
    • VehiclePropertyGroup:VENDOR
      VENDOR组仅用于自定义属性。
    • VehicleArea
      选择适当的区域类型。
    • VehiclePropertyType
      选择适当的数据类型。 BYTES类型允许传递原始数据,在大多数情况下这是足够的。通过自定义属性频繁发送大数据可能会减慢整个车辆网络的访问速度-添加大有效负载时请务必小心。
    • Property ID
      为自定义属性选择一个四个半字节ID。
  • 为防止生态系统崩溃,不得使用自定义属性来复制( VehiclePropertyIds SDK)中已经存在的车辆属性。
  • 使用对自定义属性的简短描述填写VehiclePropConfig.configString 。这允许使用健全性检查工具来标记现有车辆特性的意外复制。例如,“危险灯状态”。
  • 通过CarPropertyManager (对于Java组件)或通过Vehicle Network Service API(对于本机)进行访问。请勿修改其他汽车API,否则可能会导致将来的兼容性问题。
  • 实施供应商属性后,VehicleVendorPermission枚举中选择供应商属性的权限列表。将供应商权限映射到系统属性将破坏CTS和VTS。

处理HVAC属性

您可以通过设置与HVAC相关的属性来使用VHAL来控制HVAC。大多数HVAC属性是分区属性,尽管有些是非分区(全局)属性。样本定义的属性包括:

财产目的
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET设置每个区域的温度。
VEHICLE_PROPERTY_HVAC_RECIRC_ON控制每个区域的再循环。

要查看HVAC属性的完整列表,请在types.hal搜索VEHICLE_PROPERTY_HVAC_* 。当HVAC属性使用VehicleAreaSeat ,适用将区域HVAC属性映射到Area ID的其他规则。汽车中的每个可用座位都必须是Area ID阵列中Area ID的一部分。

例子一。一辆汽车有两个前排座椅( ROW_1_LEFT, ROW_1_RIGHT )和三个后排座椅( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT )。该车有两个温度控制单元:驾驶员侧和乘客侧。

  • HVAC_TEMPERATURE SET的区域ID的有效映射集是:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • 相同硬件配置的替代映射是:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

例子二。一辆汽车有三排座位,前排有两个座位( ROW_1_LEFT, ROW_1_RIGHT ),第二排有三个座位( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ),第三排有三个座位( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT )。该车具有三个温度控制单元:驾驶员侧,乘客侧和后部。将HVAC_TEMPERATURE_SET映射到Area ID的合理方法是作为三元素数组:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

处理传感器属性

VHAL传感器属性代表实际的传感器数据或策略信息,例如行驶状态。任何应用程序都可以不受限制地访问某些传感器信息(例如驾驶状态和昼/夜模式),因为数据对于构建安全的车辆应用程序是必不可少的。其他传感器信息(例如车速)更加敏感,并且需要用户可以管理的特定权限。

请参阅支持的传感器属性(在types.hal )。

车辆地图服务

车辆地图服务(VMS)提供了一种机制,可通过发布/订阅界面在客户端之间交换地图数据,以支持常见的车辆功能,例如高级驾驶员辅助系统(ADAS) 。客户端可以包括通过VHAL中的VMS属性或特权Android应用程序连接的车辆系统。在VMS上共享的数据旨在限于供车辆系统和支持应用程序使用的地图数据。

VMS仅适用于Android Automotive实现; AOSP不包含发布或订阅VMS的默认客户端。对于VHAL中的VMS属性,消息类型和数据结构在VmsMessageType枚举的VHAL 2.0中进行了描述,该枚举列出了受支持的VMS消息的类型。该枚举用作车辆属性整数数组中的第一个整数,并确定如何解码其余消息。