GPS机制分析(6)

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层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值