Android Automotive及IVI概述,对IVI系统,Framework各个模块简单描述
Android Automotive是⼀个基本的Android平台,它运⾏预安装的(车载信息娱乐)IVI系统,Android应⽤程序以及可选的第⼆⽅和第三⽅Android应⽤程序。
Android Automotive的硬件抽象层(HAL)为Android框架提供了一致的接口(无需考虑物理传输层)。此车载HAL是开发Android Automotive实现的接口。
系统集成商可以将特定于功能的平台HAL接口(如HVAC)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。典型的实现可能包括运行专有实时操作系统(RTOS)的专用微控制器单元 (MCU),该微控制器单元用于CAN总线访问或类似操作,可通过串行链路连接到运行Android Automotive的CPU。
车载HAL是汽车与车辆网络服务之间的接口定义(同时保护传入的数据):
车载HAL与Android Automotive架构:
组件 | 说明 |
---|---|
锁屏界面 | 用户通过该屏幕向特定用户帐号验证身份。 |
导航栏 | 一种系统栏,可以位于屏幕的左侧、底部或右侧,并且可以包含用于导航到不同应用、切换“通知”面板以及提供车辆控制(例如 HVAC)的属性按钮。它与 Android 系统界面实现不同,后者提供返回、主屏幕和应用堆栈按钮。 |
状态栏 | 沿屏幕放置的系统栏,用作导航栏。状态栏还提供支持以下各项内容的功能:1.连接图标。包括蓝牙、Wi-Fi 和热点/移动网络连接;2.下拉“通知”面板。例如,从屏幕顶部向下滑动;3.浮动通知 (HUN) |
系统界面 | 指屏幕上显示的任何不属于应用的元素。 |
用户切换器界面 | 用户可通过该屏幕选择其他用户。 |
音量界面 | 司机使用实体音量按钮改变设备音量时显示的对话框 |
车载硬件抽象层(HAL)接口会定义原始设备制造商(OEM)可以实现的属性,并会包含属性元数据(例如,属性是否为int以及允许使用哪些更改模式)。VHAL接口基于对属性(特定功能的抽象表示)的访问(读取、写入、订阅)
VHAL 使用以下接口:
vehicle_prop_config_t const *(*list_properties)(..., int* num_properties)
:列出 VHAL 所支持的所有属性的配置。车辆网络服务只会使用受支持的属性。(*get)(..., vehicle_prop_value_t *data)
:读取属性的当前值。对于区域属性,每个区域都可能具有不同的值(*set)(..., const vehicle_prop_value_t *data)
:为属性写入相应值。写入的结果是按属性进行定义(*subscribe)(..., int32_t prop, float sample_rate, int32_t zones)
:开始监视属性值的变化。对于区域属性,订阅适用于请求的区域。Zones=0
用于请求所有受支持的区域。VHAL应该在属性值发生变化时(即变化时触发类型)或按一定间隔(即连续类型)调用单独的回调(*release_memory_from_get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data)
:释放从get调用分配的内存VHAL 使用以下回调接口:
(*vehicle_event_callback_fn)(const vehicle_prop_value_t *event_data)
:通知车辆属性值的变化。应只针对已订阅属性执行。(*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation)
:返回全局VHAL级错误或每个属性的错误。全局错误会导致 HAL 重新启动,这可能会导致包括应用在内的其他组件重新启动每个属性值都随附一个VehiclePropertyStatus值。该值指示相应属性的当前状态:
车载信息娱乐系统(In-Vehicle Infotainment 简称IVI),是采用车载专用中央处理器,基于车身总线系统和互联网服务,形成的车载综合信息处理系统。IVI能够实现包括三维导航、实时路况、IPTV、辅助驾驶、故障检测、车辆信息、车身控制、移动办公、无线通讯、基于在线的娱乐功能及TSP服务等一系列应用,极大的提升了车辆电子化、网络化和智能化水平。
硬件按三部分组成:
接口 | 含义 | 传输距离 |
---|---|---|
I2C | INTER IC BUS,意为IC之间总线,包括时钟线(SCL)和数据线(SDA) | 板级总线 |
SPI | Serial Peripheral Interface,即串行外设接口 | 板级总线 |
UART串口 | UART是通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称 | RS232是20M,RS485是1KM |
CAN总线通信接口 | Controller Area Network,即控制器局域网,集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作 | 10KM |
usb | usb接口 | 5M |
Android Framework,可以理解成是Android系统的中间件层,⼤致分为以下⼏部分:
packages/services/Car/service/src/com/android/car/CarInputService.java
,Android Automotive根据hardware/libhardware/include/hardware/vehicle.h
中定义的车载HAL属性VEHICLE_PROPERTY_HW_KEY_INPUT处理来自转向远程开关、硬件按钮和触摸面板等元素的按键输入。例如通过CAN总线网络调度按键事件:Path:packages/services/Car/service/src/com/android/car/CarBluetoothService.java
;CarBluetoothManager会提供connectDevices() API调用,根据为每个蓝牙配置文件定义的优先级列表继续连接设备,Path:packages/services/Car/car-lib/src/android/car/CarBluetoothManager.java
frameworks/av/services/
目录下/hardware/interfaces/automotive/evs/1.0/default
中提供Instrument Cluster API(仪表组API,一款Android API)可在车载辅助显示设备(如位于方向盘后方的仪表盘上的辅助显示设备)上显示导航应用,包括Google地图。以及创建服务以控制该辅助显示设备并将该服务与CarService集成,以便导航应用可以显示界面
术语 | 说明 |
---|---|
CarInstrumentClusterManager | 一个CarManager,使外部应用能够在仪表板上启动Activity,并在仪表板准备好显示Activity时接收回调。Path:packages/services/Car/car-lib/src/android/car/cluster/CarInstrumentClusterManager.java |
CarManager | 所有管理器的基类,外部应用使用这些管理器与通过CarService实现的汽车特有服务进行交互 |
CarService | 一种Android平台服务,可在Google地图等外部应用与仪表板等汽车特有功能之间提供通信服务 |
车机HU | 车内嵌入的主要计算单元。HU会运行所有Android代码,并连接到汽车中央显示屏。能够搭载Android 9(或更高版本)的Android设备。此设备必须具有自己的显示屏,并且能够使用Android的新build刷写显示屏 |
仪表板 | 位于方向盘后方车载仪表之间的辅助显示设备。这可以是通过汽车内部网络(CAN 总线)连接到HU的独立计算单元,也可以是连接到HU的辅助显示设备 |
InstrumentClusterRenderingService | 用于与仪表板显示屏连接的服务的基类。原始设备制造商(OEM)必须提供该类的扩展,以便与OEM特有硬件互动。Path:packages/services/Car/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderingService.java |
KitchenSink应用 | Android Automotive中包含的测试应用 |
CarService可在导航应用与汽车之间进行协调,确保在任何时候只有一个导航应用处于活动状态,并且只有具有 android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL 权限的应用才能向汽车发送数据。
CarService可以启动所有汽车特有服务,并通过一系列管理器提供对这些服务的访问。为了与服务进行互动,在汽车内运行的应用可以访问这些管理器。
对于仪表板实现,汽车OEM必须创建自定义的InstrumentClusterRendererService实现,并更新config.xml文件以指向该自定义实现。
当呈现仪表板时,CarService会在启动过程中读取config.xml的InstrumentClusterRendererService密钥,以定位InstrumentClusterService实现。
spi与i2c区别 I2C、UART串口、SPI、CAN、USB通信接口 SPI、I2C、UART、CAN Google开发官网——Automotive Google开发官网——仪表板 Google开发官网——系统界面 Google开发官网——车辆属性