高通MSM8255 GPS 調試分析

 http://blog.csdn.net/dwyane_zhang/article/details/6775738

 

 

 

1.硬件抽象層:

高通MSM的硬件層代碼在:hardware/qcom/gps/loc_api下,高通的GPS集成在baseband側,與Modem部分一樣,同樣是基於share Memory上高通自有的RPC協議實現。所以高通的硬件層分爲兩部分,一部分實現的是:硬件抽象層的接口實現,另一部分實現的是基於RPC協議封裝的具體控制和數據操作,該部分主要是利用高通的RPC代碼生成器生成。兩個部分是通過一個glue層粘合在一起的。高通MSM的硬件抽象層在其子目錄 libloc_api中,主要在loc_eng.cpp中。loc_eng_ioctl.cpp用於承載到glue層的具體控制和回調。而剩餘其它幾個文件主要是輔助GPS定位的XTRA和Net Initiated的實現。

GpsInterface接口實現如下:

 高通的GPS硬件抽象層包含GPS數據的“獲取”和“解析”,它們都通過RPC上報。然後再調用loc_eng_init註冊的回調,向上層上報。

上報部分的實現是基於loc_eng_process_deferred_action函數的線程中,該線程實現一個等待循環,當GPS有數據解析上報時,RPC部分會回調loc_eng_init初始化時的loc_event_cb,該回調函數會激活線程中的等待循環。線程通過loc_eng_process_loc_event函數處理獲取數據,並調用loc_eng_report_xxx(xxx代表position、衛星狀態sv等),將數據通過上層註冊的回調函數進行上報。這部分代碼如下:

高通GPS還實現了XTRA與AGPS,其中AGPS的接口在sLocEngAGpsInterface中實現,內容如下:

loc_eng_agps_set_server函數完成對server的配置。硬件抽象層根據loc_eng_set_position_mode中傳入的配置,決定是否啓用AGPS。其中啓動函數爲set_agps_server,該函數最終通過RPC寫入GPS。

下面是GPS從上層調用到下層,再把數據上報給上層的流程圖:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章