1. 程式人生 > >android gps機制分析--之五

android gps機制分析--之五

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上層的。