Xilinx社区
首页 > 技术专栏 > 骁龙820A车载系统--VehicleHal主要service及其流程
骁龙820A车载系统--VehicleHal主要service及其流程
来源:技术专家 时间:2017-11-13

      Qualcomm在2016年6月的CES展会上,带来了骁龙 820A 车载芯片,这款芯片可以看作是骁龙 602A 的升级版。与 2014 年发布的 602A 相比,820A 更加强调安全性,计算能力更强大。小编在公司有幸参与利用骁龙820A开发板进行二次开发工作。

  前面小编讲解了车载hal的集大成者-VehicleHal.java,今天小编给大家带来VehicleHal的hal的组成部分。 VehicleHal.java中定义和实现了vehicle HAL的抽象。 该类实现了与native HAL 的接口并对接收到的数据进行基本的解析(类型检查),然后将对应时间发送给对应的基类HalServiceBase。由基类HalServiceBase实现数据转换到对应的Service的API.

  VehicleHal的主要组成图:

  使用方式

  通过VehicleHal构造函数创建了HandlerThread并启动线程。该线程的处理函数HandlerThread.getLooper()将会作为VehicleNetwork创建时的参数。

  vehicleHal是在构造函数中创建了(new SensorHalService)车载各种HalService的实例(mSensorHal),并初始化了HalServiceBase服务列表,最后VehicleNetWork.createVehicleNetWork()方法构造VehicleNetwork。

  这里我们就可以清晰看出vehicleHal和VehicleNetWork最终是如何关联起来的。

  public static VehicleNetwork createVehicleNetwork(VehicleNetworkListener listener,

  Looper looper) {

  ... ...

  return new VehicleNetwork(service, listener, looper);

  }

  private VehicleNetwork(IVehicleNetwork service, VehicleNetworkListener listener,

  Looper looper) {

  mService = service;

  mListener = listener;

  mEventHandler = new EventHandler(looper);

  mVehicleNetworkListener = new IVehicleNetworkListenerImpl(this);

  }

  VehicleNetWork事件的处理

  在VehicleHal的主要组成图中,可以看出VehicleHal中还包括其他成员:CarPropertyUtils和HalServicesBase,但是VehicleHal的构造函数中并没有对其显式的初始化。

  public void onVehicleNetworkEvents(VehiclePropValuesParcelable values) {

  VehicleNetwork vehicleNetwork = mVehicleNetwork.get();

  if (vehicleNetwork != null) {

  vehicleNetwork.mEventHandler.notifyEvents(values.values);

  }

  }

  在EventHandler类中调用handleVehicleNetworkEvents,最终调用mListener对应的onVehicleNetworkEvents方法。mListener就是VehicleNetwork初始化构造时赋值的(VehicleHal.java中)。

  private void handleVehicleNetworkEvents(VehiclePropValues values) {

  mListener.onVehicleNetworkEvents(values);

  }

  onVehicleNetworkEvents中实现了对具体HalService的分发处理。

  

  我们可以大致看出VehiclePropValues是里面的关键,这个在CarPropertyUtils的函数定义方式是

  CarPropertyUtils的结构

  由于其中构成的函数过多,小编会选取具有代表性的函数进行分析。

  getRawValueList

  这个函数的实现方式已经在上文贴过,有读者可能会觉得奇怪,VehicleHal中用到的不是getRawValueList,而是getValuesList,这个不用奇怪,因为别的类里面调用getRawValueList,然后该类中的getValueList的实现方法就是getRawValueList的内容。

  toVehiclePropValue

  toVehiclePropValue顾名思义,这个函数就是获取各个属性值。

  有没有觉得很熟悉,这个是不是和Dump函数差不多。跟踪代码,我们可以看出这个函数主要是把Hal的ID,areaID,halType放到VehiclePropValue的Builder对象里。

  getJavaClass

  从代码上看,这个是决定halType的数据类型的。类似于_BooLEAN结尾的,我们很容易得知这个返回的是Boolean.calss。但是_ZONE_BOOLEAN结尾的我们却不常见。其实zone是车载特有的属性,和区域有关,座位可以是一个区域,车窗也可以是一个区域,以此类推。有兴趣的话,可以翻阅小编的专门介绍属性的文章。

  总结

  本文对vehiclehal的消息解析和处理流程梳理了一下,首先介绍了其组成构造,并对每个service处理进行了分析,最后重点介绍了下CarPropertyUtils,希望对大家理解VehicleHal有帮助哦。

more汽车电子市场动态
more技术专栏
more专家答疑
问:配置高通pmd9607的mpp管脚, 设置为模拟输入一直量不到电压,请教。
答:需要注意,MPP管脚并不是所有MPP管脚都可以配置的,请参考spec说明,你需要配置的pin有没有限制。通常模拟输入的话,还要配置ANA_IN_CTL等寄存器,需要外接模拟量,然后读取该pin的值的寄存器中HKADC值。
问:专家请指导: sensor厂家给的sensor相关资料(chromatix + lib)是支持前置摄像头的,“支持”主要是我这边验证过前置已经点亮。 后置摄像也用同sensor, 但用这套相关资料就点不亮了。 kernel层确认已经PROBE, 同时在/dev下有media0 media1,请协助该如何完成后置的点亮. p.s: 1. 该板后置如果使用其他sensor,可以点亮前后置摄像头; 2. 将后置摄像头拆卸, 可点亮前置, 不拆卸后置,同样可以点亮前置; 3. 如果前置后置一样, 前后置都点不亮, 但kernel层确认都probe, dev下有camera0,camera1,camera2; 4. 拆卸前置,仅后置, 依然无法点亮, kernel已经probe,dev下有camera0,camera1 针对前后置同sensor, 在sensor_init.c增加2sensor, 分别命名为: sensor, sensor_rear,同时在sensor_Libs目录下增加sensor,sensor_rear目录,主要是针对lib部分, 同时对lib中camera_id和position做对应修改(前:CAMERA_1,1,后: CAMERA_0,0) 写的太多, 一句话说明下问题: 前后置同sensor如何同时点亮前后置sensor, 是否需要修改lib中的参数,如何修改?还是其他问题?
答:从现象描述看,可以从以下几点排查。 1,sensor的配置,通常后置sensor 4lanes,而前置sensor 2lanes。换不同型号的sensor可以点亮,说明这些配置可能没有修改 导致一些问题。 2,重点看下,“拆卸前置,仅后置, 依然无法点亮,dev下有camera0,camera1,”,对比下前后置不同型号 枚举dev也是这样,看看HAL层dumpimage检查图像是否正常。 3,camera id枚举冲突,无法区分两颗相同的sensor,tuning参数调用是否正确。
问:请教专家,UE 链路层怎么样才能主动和NODE B断开。 设备和基站没有OTA log,也不太清楚是什么原因导致的连接断开。
答:可以通过AT命令CREG可以离线和在线网络。不知道是否是您需要的情况。 http://blog.chinaunix.net/uid-149881-id-2780145.html
问:有没有懂高通平台root 和解网络锁的高手?
答:eng和userdebug版本上通过adb root。你是否需要如下的方法么, https://zhidao.baidu.com/question/557640730.html
Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052