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