1. 概述
上面的几篇文章论述了gps的打开启动初始化等动作,万事俱备只欠东风了。
这一系列文章主要讲的是Position信息如何从modem层传递到loc eng层最后一直到Java上层的。
由于loc eng层到modem层是属于消息触发的,也就是说正常的流程是:modem层传上来一个消息,经过一系列处理传递到loc eng层,loc eng层传递给gps库,
android framework层,然后上层应用就可以获取到数据。
高通平台的GPS核心部分都在modem里面,这里面实现了GPS相关的协议,可以把这个部分看做是GPS service,另外一部分在ap侧,
我们把这部分看做是GPS client。Client主要是通过QMI的通信方式接收service发过来的信息,client也可以通过QMI发送信息给service,
QMI之上有一个loc_api层,具体作用是通过qmi读取service发送过来的信息,当然也可以通过qmi发送信息给service。
2. AP数据结构
这里我们主要涉及三个重要的数据结构,分别是qmiLocEventPositionReportIndMsgT_v02、UlpLocation、GpsLocation:
qmiLocEventPositionReportIndMsgT_v02是一个很重要的数据结构,它是AP侧和Modem侧之间传递的Position数据结构,
是一个连接两者的桥梁,由于结构比较庞大,截取一部分如下,完整结构具体请看:
vendor/qcom/opensource/location/loc_api/loc_api_v02/location_service_v02.h
UlpLocation*是loc eng层使用的格式, UlpLocation里包含了GpsLocation:
hardware/qcom/gps/core/gps_extended_c.h
GpsLocation*是hal层能够识别的格式:
hardware/libhardware/include/hardware/gps.h;
三个数据结构的大致关系是:解析qmiLocEventPositionReportIndMsgT_v02类型的event,
提取其中需要的数据,填充到UlpLocation结构中,由于包含了GpsLocation,因此GpsLocation也同时被填充;
小结:数据库都准备好了,下面就开始分析数据是如何从modem到AP侧,最后到Java上层的。