Xilinx社区
首页 > 技术专栏 > 骁龙820A车载framework解析--VehicleNetworkService.cpp
骁龙820A车载framework解析--VehicleNetworkService.cpp
来源:技术专家 时间:2017-11-06

  骁龙820A是一颗面向汽车推出系统芯片,在性能方面与820保持一致,但是820A更加主张安全这个概念。骁龙820A与骁龙602A处理器相比,计算性能更加强大,可以支持更多的汽车传感器。而消息的传递就是依靠车内网络,这个的实现就不得不提VehicleNetworkService.cpp这个文件了,这个文件包含车内网络逻辑处理的核心逻辑哦。

  由于方法过于繁多,所以小编只是选取很少的一部分进行分析。

  VehicleHalMessageHandler

  顾名思义,vehicleHalMessageHandler就是消息的处理者,他会根据收到的消息,进行相应的处理工作。下图的代码是它的的构造函数和析构函数。

  构造函数进行了looper和service的初始化工作,同时也初始化了索引和时间。析构函数是在程序销毁是调用,它的工作是消除一些锁和删除properties和事件。

  这个类的最重要的函数是handleMessage,代码如下所示

  它主要是接收两种消息,分别时HAL_EVENT,HAL_ERROR,接收到消息然后做相应的处理。

  篇幅有限,小编就拿HAL——EVENT举个例子。代码如下

  从上面的代码来看,我们只需要关注if(events != null)的部分,这里面主要是分发消息事件,随后就销毁事件。分发事件是如何实现的呢?其实分发事件是在VehicleNetworkService里面实现的。其中mService就是VehicleNetworkService

  VehicleNetworkService

  上文的疑问没有解答,究竟分发消息是如何实现的,小编将在VehicleNetworkService模块里面解答。下图代码是mService.dispatchHalEvents(*events)的具体实现方法

  代码并不复杂,大概只是进行了两步操作,第一步给HalClientSpVector

  实例化出来的activeClients赋值,第二步分发事件client->dispatchEvents().

  PropertyValueCache

  PropertyValueCache只有两个方法,而且都为VehicleNetworkService服务,小编在这里选取writeToCache进行分析。代码如下

  跟踪代码可知,先给vehicke_prop_value分配空间,然后再把需要改动的v赋值给value。

  然后这个方法在VehicleNetworkService的体现方法是

  总结

  总之,这三个类的关系可以总结为下图

  VehiclenetworkService与VehicleHalMessageHandler是相互服务的,而PropertyValueCache只是服务VehicleNetworkService。

  Qualcomm汽车技术讨论组 QQ群号:566131670

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