Android Automotive(九)总结
前面介绍了Android Automtive在各层的功能实现,这里总结一下。
系统框架层
启动流程
系统框架层从SystemServer启动开始,
SystemServer会通过bindService的形式启动CarServiceCarService创建ICarImpl,然后执行其init方法ICarImpl中会创建VehicleHal、CarPropertyService对象,并将VehicleHal中创建的PropertyHalService作为参数传给CarPropertyService。VehicleHal中创建PropertyHalService、HalClient对象- 然后
ICarImpl中会调用init方法初始化VehicleHal VehicleHal会执行PropertyHalService的takeProperties进行初始化ICarImpl中调用init方法初始化CarPropertyService

订阅流程
订阅一个车辆属性值从Car API开始,需要应用主动调用。
Application调用registerCallback向CarPropertyManager订阅车辆属性的监听CarPropertyManager调用registerListener向CarPropertyService订阅车辆属性,传入ICarPropertyEventListenerCarPropertyService会调用subscribeProperty向PropertyHalService订阅事件PropertyHalService会调用subscribeProperty将事件交给VehicleHal处理VehicleHal调用HalClient的subscribe方法将订阅事件发给硬件抽象层的VehicleService
而回调过程是由硬件抽象层的VehicleService发起的,最初会由VehicleHal接受到,然后进行分发。
VehicleHal调用PropertyHalService的onHalEvents方法PropertyHalService调用CarPropertyService的onPropertyChange方法。CarPropertyService中会调用ICarPropertyEventListener的onEvent方法,将事件回调给CarPropertyManagerCarPropertyManager通过onPropertyChanged方法,将事件回调给Application

获取流程
获取一个车辆属性值从Car API开始,需要应用主动调用

设置流程
设置一个车辆属性值从Car API开始,需要应用主动调用

硬件抽象层
硬件抽象层的进程是由initrc启动的,启动的时间比系统框架层的CarService早。
启动流程
initrc启动VehicleService,执行VehicleService的main函数。- 创建
VehiclePropertyStore对象,用于存储硬件抽象层的车辆属性配置 - 创建
PassthroughConnector对象,用于处理车辆属性的获取、设置和订阅处理 - 创建
EmulatedVehicleHal对象,负责对车辆属性的业务逻辑处理 - 创建
VehicleEmulator对象,一个连接模拟器的对象,用来模拟ECU发来数据。 - 创建
VehicleHalManager对象,实现HIDL接口,对接跨进程通信的入口。

订阅流程
订阅从CarService开始,调用到硬件抽象层,当然也支持直接在硬件抽象层进行订阅
CarService的订阅申申请subscribe由HIDL接口调用到VehicleHalManagerVehicleHalManager会调用EmulatedVehicleHal的subscribe完成订阅
而回调流程由VehicleHalClient开始触发,
VehileEmulator会调用VehicleHalClient的onPropertyValue函数,通知车辆属性发生变化VehicleHalClient会调用EmulatedVehicleHal的onPropertyValue函数EmulatedVehicleHal则调用VehicleHalManager的onHalEvent通知车辆属性变化VehicleHalManager通过onPropertyEvent函数将车辆属性变化通知给CarService

获取流程
获取一个车辆属性的流程
CarService会调用get方法请求从硬件抽象层的VehicleService获取车辆属性VehicleHalManager会调用EmulatedVehicleHal的get方法获取车辆属性EmulatedVehicleHal则会从VehiclePropertyStore的数据容器中取当前的车辆属性配置给到CarService
这里VehiclePropertyStore中会及时更新车辆属性的变化,所以取到的内容就是最新的

设置流程
设置一个车辆属性的流程
CarService会调用set方法请求硬件抽象层的VehicleService设置车辆属性VehicleHalManager会调用EmulatedVehicleHal的set方法设置车辆属性EmulatedVehicleHal则会从调用VehicleConnector的setProperty方法VehicleConnector的setProperty方法会调用到VehicleHalServer的onSetProperty方法来完成车辆属性的设置。
由于VehicleHalServer并没有真的完成和ECU的通信,所以到这里设置就算完成了。

一些变化
-
架构图
Android P - Android S

Android N - Android O

Android P开始,删除了VehicleNetwork模块, 系统框架层CarService和原生硬件抽象层HAL直接交互。
-
Car API:包含
CarHvacManager和CarSensorManager等 API。 -
CarService:位于
/platform/packages/services/Car/。 -
VEHICLE HAL:用于定义 OEM 可以实现的车辆属性的接口。包含属性元数据(例如,车辆属性是否为 int 以及允许使用哪些更改模式)。位于
hardware/libhardware/include/hardware/vehicle.h。(Android N - Android O) -
automotive - types.hal HIDL接口文件 位于
hardware/interfaces/automotive/vehicle/2.0/types.hal,Android O之后改为HIDL架构,代替了上面的VEHICLE HAL -
Android N 7.0
新增
Car架构,位于packages/services/Car
新增Vehicle hal架构,位于hardware/libhardware/modules/vehicle -
Android O 8.0
开始使用HIDL架构,新增types.hal定义,位于
hardware/interfaces/automotive/vehicle/2.0新增
Car的特性应用,位于packages/apps/Car -
Android P 9.0
删除了
hardware/libhardware/modules/vehicle库新增
CarLauncher重构了
CarService代码,注册Listener时会回调初始值重构
CarPropertyManager,CarPropertyEventListener->CarPropertyEventCallback
Car API接口和CarService子服务对应关系
| Sdk | AIDL | Service |
|---|---|---|
| Car | ||
| CarAudioManager | ICarAudio | CarAudioService |
| CarAppFocusManager | IAppFocus | AppFocusService |
| CarPackageManager | ICarPackageManager | CarPackageManagerService |
| CarDiagnosticManager | ICarDiagnostic | CarDiagnosticService |
| CarPowerManager | ICarPower | CarPowerManagementService |
| CarProjectionManager | ICarProjection | CarProjectionService |
| CarPropertyManager | ICarProperty | CarPropertyService |
| CarBluetoothManager | ICarBluetooth | CarBluetoothService |
| CarStorageMonitoringManager | ICarStorageMonitoring | CarStorageMonitoringService |
| CarDrivingStateManager | ICarDrivingState | CarDrivingStateService |
| CarUxRestrictionsManager | ICarUxRestrictionsManager | CarUxRestrictionsManagerService |
| CarConfigurationManager | ICarConfigurationManager | CarConfigurationService |
本文解析了Android Automotive系统框架层与硬件抽象层的工作原理,包括启动、订阅、获取及设置车辆属性的过程。同时,详细介绍了CarService与VehicleHalManager之间的交互流程。
854





