GPS机制分析(6)

news/2024/7/3 1:07:49

7. gps数据从HAL传输到Java

​ 上面UlpLocation类型的mLocation作为参数传入,这里传递的还是UlpLocation类型的数据,不是hal层使用的GpsLocation类型,因此我们看一下UlpLocation类型的数据转换成GpsLocation类型的数据的过程:

hardware/qcom/gps/loc_api/libloc_api_50001/loc.cpp

img

img

​ GpsCallbacks的location_cb跟gps_loc_cb绑定到一起,其实就是绑定的是local_loc_cb,看一下local_loc_cb函数,local_loc_cb调用了gps_loc_cb,实际也就是调用的location_cb:

img

​ Gps_loc_cb函数的参数是&location->gpsLocation,也就是GpsLocation*类型的数据,在这里完成了从UlpLocation到GpsLocation类型的转换。GpsCallbacks的location_cb又对应了jni的location_callback,也就是说loc eng层的proc()最终调用到了jni的location_callback方法:

frameworks/base/services/core/jni/com_android_server_location_GpsLocationProvider.cpp

img

img

​ 在往下就是reportLocation的流程了,最终将location信息传递给了上层,具体请看:frameworks/base/services/core/Java/com/android/server/location/GpsLocationProvider.java

img

Java上层调用流程图如下,

img

其他方法在java的传递方法和onLocationChanged方法几乎完全一样。

小结:

Position信息在loc_api层是qmiLocEventPositionReportIndMsgT_v02类型的数据,

在LocApiV02 :: reportPosition函数里面转换成UlpLocation类型的数据,然后经过一系列步骤发送到message queue中,

MsgTask:run函数从message queue中取出相应的数据,

然后调用proc()函数,在proc()函数里loc eng层的callback把数据转换成GpsLocation类型的数据,再传递到android framework层。


http://www.niftyadmin.cn/n/2828930.html

相关文章

IPC—Android Binder (1)

IPC是Inter-Process Communication的缩写,含义就是跨进程通信。 多进程场景 WebView加载图片推送 原因 内存不够->内存就够了 App运行独立的虚拟机——每个进程分配运行内存是有限的——32M、64M、48M 加载一个大图片——直接OOM 如果一旦奔溃,…

AndroidGPS定位应用流程

AndroidGPS定位应用流程 这里先了解下应用层流程。 根据这个框架,GPS在应用层实现的最基本流程示例: public class MainActivity extends Activity {private LocationManager mLocationManager;Overrideprotected void onDestroy() {super.onDestroy…

怎么把照片做成消消乐_开心消消乐特效制作如何快速的消除过关

开心消消乐特效制作如何快速的消除过关。在闯关的时候,我们想要制作三星过关,特效的制作是我们必须的过程。如果没有特效帮助我们大量的消除,想要得到3星的分数是比较困难的。但是在释放特效的时候,我们是需要一定的技巧的。单独的…

debian卸载php_在 Ubuntu/Debian 下安装 PHP7.3 教程

介绍最近的 PHP 7.3.0 已经在 2018 年12月6日 发布 GA,大家已经可以开始第一时间体验新版本了,这里先放出 PHP7.3 安装的教程以便大家升级。适用系统: Ubuntu 18.04 LTS / Ubuntu 16.04 LTS / Ubuntu 14.04 LTS / Debian 9 stretc…

图解C/C++中函数参数的值传递、指针传递与引用传递

因为一直对这几种函数参数的传递方式理解的不是很透彻,花了一段时间仔细捋清了他们之间的区别。这个问题也是编程初级阶段会经常遇到的问题,也是有可能在面试中遇到的基本问题,在此进行了简单的总结一下,一是加深自己的理解&#…

Scenario 6 –HP C7000 Virtual Connect FlexFabric SUS with A/A Uplinks, 8

概述:HP c7000 VC FlexFabric SUS配置为Active/Active、LACP、FCoE、vSphere首先,创建两个SUS,名称分别是VLAN-Trunk-1和VLAN-Trunk-2。VLAN-Trunk-1共有2个uplink Port( Bay1-VC的x5、x6),VLAN-Trunk-2共有…

android github 评分控件_GitHub - wolongalick/PercentRatingBar: 百分比评分控件

PercentRatingBar百分比评分控件依赖方式buildscript {repositories {google()jcenter()}}dependencies {implementation com.wolongalick.widget:PercentRatingBar:1.0.1}快速使用android:layout_width"wrap_content"android:layout_height"wrap_content"…