当前位置:   article > 正文

Android Automotive(九)总结_carpropertymanager.carpropertyeventcallback

carpropertymanager.carpropertyeventcallback

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 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子服务对应关系

SdkAIDLService
Car
CarAudioManagerICarAudioCarAudioService
CarAppFocusManagerIAppFocusAppFocusService
CarPackageManagerICarPackageManagerCarPackageManagerService
CarDiagnosticManagerICarDiagnosticCarDiagnosticService
CarPowerManagerICarPowerCarPowerManagementService
CarProjectionManagerICarProjectionCarProjectionService
CarPropertyManagerICarPropertyCarPropertyService
CarBluetoothManagerICarBluetoothCarBluetoothService
CarStorageMonitoringManagerICarStorageMonitoringCarStorageMonitoringService
CarDrivingStateManagerICarDrivingStateCarDrivingStateService
CarUxRestrictionsManagerICarUxRestrictionsManagerCarUxRestrictionsManagerService
CarConfigurationManagerICarConfigurationManagerCarConfigurationService
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/265059
推荐阅读
相关标签
  

闽ICP备14008679号