Android Automotive(九)总结

Android Automotive(九)总结

前面介绍了Android Automtive在各层的功能实现,这里总结一下。

系统框架层

启动流程

系统框架层从SystemServer启动开始,

  1. SystemServer会通过bindService的形式启动CarService
  2. CarService创建ICarImpl,然后执行其init方法
  3. ICarImpl中会创建VehicleHalCarPropertyService对象,并将VehicleHal中创建的PropertyHalService作为参数传给CarPropertyService
  4. VehicleHal中创建PropertyHalServiceHalClient对象
  5. 然后ICarImpl中会调用init方法初始化VehicleHal
  6. VehicleHal会执行PropertyHalServicetakeProperties进行初始化
  7. ICarImpl中调用init方法初始化CarPropertyService

在这里插入图片描述

订阅流程

订阅一个车辆属性值从Car API开始,需要应用主动调用。

  1. Application调用registerCallbackCarPropertyManager订阅车辆属性的监听
  2. CarPropertyManager调用registerListenerCarPropertyService订阅车辆属性,传入ICarPropertyEventListener
  3. CarPropertyService会调用subscribePropertyPropertyHalService订阅事件
  4. PropertyHalService会调用subscribeProperty将事件交给VehicleHal处理
  5. VehicleHal调用HalClientsubscribe方法将订阅事件发给硬件抽象层的VehicleService

而回调过程是由硬件抽象层的VehicleService发起的,最初会由VehicleHal接受到,然后进行分发。

  1. VehicleHal调用PropertyHalServiceonHalEvents方法
  2. PropertyHalService调用CarPropertyServiceonPropertyChange方法。
  3. CarPropertyService中会调用ICarPropertyEventListeneronEvent方法,将事件回调给CarPropertyManager
  4. CarPropertyManager通过onPropertyChanged方法,将事件回调给Application

在这里插入图片描述

获取流程

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

在这里插入图片描述

设置流程

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

在这里插入图片描述

硬件抽象层

硬件抽象层的进程是由initrc启动的,启动的时间比系统框架层的CarService早。

启动流程

  1. initrc启动VehicleService,执行VehicleServicemain函数。
  2. 创建VehiclePropertyStore对象,用于存储硬件抽象层的车辆属性配置
  3. 创建PassthroughConnector对象,用于处理车辆属性的获取、设置和订阅处理
  4. 创建EmulatedVehicleHal对象,负责对车辆属性的业务逻辑处理
  5. 创建VehicleEmulator对象,一个连接模拟器的对象,用来模拟ECU发来数据。
  6. 创建VehicleHalManager对象,实现HIDL接口,对接跨进程通信的入口。

在这里插入图片描述

订阅流程

订阅从CarService开始,调用到硬件抽象层,当然也支持直接在硬件抽象层进行订阅

  1. CarService的订阅申申请subscribe由HIDL接口调用到VehicleHalManager
  2. VehicleHalManager会调用EmulatedVehicleHalsubscribe完成订阅

而回调流程由VehicleHalClient开始触发,

  1. VehileEmulator会调用VehicleHalClientonPropertyValue函数,通知车辆属性发生变化
  2. VehicleHalClient会调用EmulatedVehicleHalonPropertyValue函数
  3. EmulatedVehicleHal则调用VehicleHalManageronHalEvent通知车辆属性变化
  4. VehicleHalManager通过onPropertyEvent函数将车辆属性变化通知给CarService

在这里插入图片描述

获取流程

获取一个车辆属性的流程

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

在这里插入图片描述

设置流程

设置一个车辆属性的流程

  1. CarService会调用set方法请求硬件抽象层的VehicleService设置车辆属性
  2. VehicleHalManager会调用EmulatedVehicleHalset方法设置车辆属性
  3. EmulatedVehicleHal则会从调用VehicleConnectorsetProperty方法
  4. VehicleConnectorsetProperty方法会调用到VehicleHalServeronSetProperty方法来完成车辆属性的设置。
    由于VehicleHalServer并没有真的完成和ECU的通信,所以到这里设置就算完成了。

在这里插入图片描述

一些变化

  • 架构图

    Android P - Android S

在这里插入图片描述

Android N - Android O

在这里插入图片描述

Android P开始,删除了VehicleNetwork模块, 系统框架层CarService和原生硬件抽象层HAL直接交互。

  • Car API:包含 CarHvacManagerCarSensorManager 等 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

猜你喜欢

转载自blog.csdn.net/Jun_P/article/details/127116746