android gps機制分析--定位資料HAL處理
6 gps資料在HAL中處理
reportPosition的實現,前面提到的包含了position資訊的qmiLocEventPositionReportIndMsgT_v02資料型別作為引數傳入:
解析出qmiLocEventPositionReportIndMsgT_v02裡的相應的資料,填充到UlpLocation結構中,
以下是經緯度,填充到UlpLocation location.gpsLocation中,當然也包含了Altitude、Heading、accuracy等值的填充;
最後UlpLocation填充完成,當然UlpLocation的成員變數GpsLocation也相應的填充完成了,呼叫:
LocApiBase::reportPosition的實現:
hardware/qcom/gps/core/LocApiBase.cpp
LocApiBase::reportPosition裡有一個TO_ALL_LOCADAPTERS的巨集定義:
看下TO_ALL_ADAPTERS的定義,大致意思應該是針對每個LocAdapterBase*型別的adapter依次呼叫他們的reportPosition方法:
hardware/qcom/gps/core/LocApiBase.h
具體來看下LocAdapterBase的reportPosition方法的具體實現:
hardware/qcom/gps/core/LocAdapterBase.cpp
mLocAdapterProxyBase包含在LocAdapterBase類中:
reportPosition的定義,這是一個虛擬函式,也就是說具體實現需要看子類,關於reportPosition的具體實現,
我們可以在LocalAdapterBase的子類LocInternalAdapter裡面看下,具體定義如下:
new出來的LocEngReportPosition物件的第二個引數是傳入的UlpLocation型別的資料,
sendMsg函式通過msg_q_snd會把msg傳送到訊息佇列mQ中:
hardware/qcom/gps/core/MsgTask.cpp
然後run函式通過msg_q_rcv接受訊息佇列mQ的訊息,讀取msg,依次執行msg的log()和proc():
msg是LocMsg型別的資料,其中proc是一個虛擬函式,需要在其子類中實現:
LocEngReportPosition恰好是LocMsg的子類:
看一下LocEngReportPosition:proc的實現:
hardware/qcom/gps/loc_api/libloc_api_50001/loc_eng.cpp
把location的資訊通過location_cb傳遞給android framework層:
小結:Position資訊在loc_api層是qmiLocEventPositionReportIndMsgT_v02型別的資料,
在LocApiV02 :: reportPosition函式裡面轉換成UlpLocation型別的資料,然後經過一系列步驟傳送到message queue中,
MsgTask:run函式從message queue中取出相應的資料,然後呼叫proc()函式,在proc()函式裡loc eng層的callback
把資料轉換成GpsLocation型別的資料,再傳遞到android framework層。
相關文章
- android gps機制分析--之二Android
- 原始碼分析:Android訊息處理機制原始碼Android
- android的視窗機制分析------事件處理Android事件
- Android的GPS定位Android
- Android應用程式訊息處理機制(Looper、Handler)分析AndroidOOP
- Android-Universal-Image-Loader快取處理機制分析Android快取
- Android 觸控事件處理機制Android事件
- Android應用AsyncTask處理機制詳解及原始碼分析Android原始碼
- Android非同步訊息處理機制詳解及原始碼分析Android非同步原始碼
- 資料分析--資料預處理
- GPS定位
- Android應用程式訊息處理機制Android
- Android 訊息處理機制:Handler|MessageAndroid
- Android的Touch事件處理機制介紹Android事件
- 從LinkedIn的資料處理機制學習資料架構架構
- C語言程式設計練習 GPS資料處理C語言程式設計
- Android中的非同步訊息處理機制Android非同步
- android開發之GPS定位詳解Android
- android典型程式碼系列(十六)------GPS定位Android
- Android Hal層簡要分析Android
- 第十一篇:Map/Reduce 工作機制分析 - 錯誤處理機制
- 資料處理 聚類分析聚類
- 異常處理機制
- 劫持GPS定位&劫持WIFI定位WiFi
- 深入理解Android非同步訊息處理機制Android非同步
- Android IPC 機制分析Android
- 【Android】GPS定位基本原理淺析Android
- 資料庫hang住,分析處理資料庫
- Redis中的事務處理機制分析與總結Redis
- Java異常處理機制Java
- redis的事件處理機制Redis事件
- Java——事件處理機制概要Java事件
- Laravel Sessionid 處理機制LaravelSession
- C#事件處理機制C#事件
- CSS定位機制CSS
- Android包管理機制(三)PMS處理APK的安裝AndroidAPK
- Python文字資料分析與處理Python
- 08.異常處理機制