骁龙820A是高通为智能汽车推出的处理器,就是没基带版的820处理器,支持600Mbps的移动上网速率,支持车载嵌入式软件平台QNX,苹果和谷歌连接智能手机和汽车平台的桥接工具CarPlay和“安卓汽车”。
在上一个系列中,小编讲解了车载hal中的具体实现部分,今天小编给大家带来hal在车载系统中是如何使用的,以CarHvacService.java为例。
CarHvacService使用流程
在了解VehicleHal主要功能函数和基本流程后,小编将进一步带你熟悉CarHvacService的主要流程。先上一个继承关系图。
在之前小编VehicleHal基本流程文章中提到过,HalService包括CarHavcService在VehicleHal中初始化。构建了HvacHalService的实例mHavcHal。即VehicleHal通过构造函数的初始化的操作new了一个HvacHalService的对象。
HalServiceBase抽象类
HvacHalService继承了HalServiceBase,HalServiceBase是一个abstract抽象类。abstract类没有具体的实现过程,具体的实现方法需要子类实现。所以这个VehicleHal的具体实现还是要看HavcHalService 。
HavcHalService 的实现
HavcHalService的主要方法如下图所示。该类实实现了abstract父类的init,release,takeSupportedProperties函数。
我们可以解析一下takeSupportedProperties。该函数在VehicleHal初始化init的时候被调用。
private void init() { //VehicleHal.java
VehiclePropConfigs properties = mVehicleNetwork.listProperties();
// needs copy as getConfigsList gives unmodifiable one.
List propertiesList =
new LinkedList(properties.getConfigsList());
for (HalServiceBase service: mAllServices) {
List taken = service.takeSupportedProperties(propertiesList);
takeSupportedProperties主要功能是ID的映射转换halToHvacPropId
这个函数就是把所有可以支持的属性列出来,以hvacPropId为key值传送到有需要的地方。
CarHvacService
经过这么长的铺垫,终于迎来了具体的使用方式,这个java类可以让我们把前面所有的流程连接起来。
这个是与vehiclehal得到了havcHalService的Instence.
在VehicleHal中的实现方法是:
然后CarHavcService有关的部分体现在:
总结
上次小编写了这篇vehiclehal的解析,只是大概介绍了其组成构造,很多读者不能把这些联想到高大上的Qualcomm的车载骁龙820A上,这次小编介绍了CarPropertyUtils,希望对大家理解VehicleHal有帮助哦。