袁 思,劉曉東
(1武漢郵電科學(xué)研究院 湖北 武漢 430074;2.武漢虹旭信息技術(shù)有限責(zé)任公司 湖北 武漢 430074)
基于Android的GPS移植
袁 思1,2,劉曉東2
(1武漢郵電科學(xué)研究院 湖北 武漢 430074;2.武漢虹旭信息技術(shù)有限責(zé)任公司 湖北 武漢 430074)
基于Tiny4412開發(fā)板和SiRF StarIII GPS模塊實現(xiàn)了GPS的移植工作,由于開發(fā)板和GPS模塊的特性,其工作重點主要集中在GPS硬件抽象層的移植。并在搭建的測試環(huán)境下通過第三方GPS測試軟件對該GPS移植模塊進行了測試,證實了該GPS移植模塊能夠正常獲取經(jīng)緯度信息。這對于理解和解決Android GPS開發(fā)的相關(guān)問題有重要的參考價值。
Android;硬件抽象層;GPS;GPS移植
隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,手機作為最主要的移動終端發(fā)揮著越來越大的作用。當(dāng)前主要的智能手機操作系統(tǒng)有windows mobile、symbian、android和 ios[1],其中 Android憑借其通用、開源、免費的特點在短時間內(nèi)成為市場占有率第一的手機操作系統(tǒng)。隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,手機GPS已在個人導(dǎo)航定位方面發(fā)揮了巨大作用,除此以外,它在工程測量、設(shè)施搜索、定位監(jiān)控、緊急援助等方面也有很大的發(fā)展空間[2]。隨著Android系統(tǒng)在消費電子和工程領(lǐng)域的發(fā)展,GPS在Android中的應(yīng)用也越來越廣泛,因此Android下GPS的開發(fā)也受到了關(guān)注。
基于此,本文在研究了GPS模塊中Framework層、HAL層和驅(qū)動層的工作過程和工作原理的基礎(chǔ)上,實現(xiàn)了在Tiny4412開發(fā)板和 SiRF StarIII GPS模塊下GPS的移植工作,由于Android系統(tǒng)對GPS模塊中的Framework層和HAL層進行了封裝,故基于Android的GPS移植主要的工作集中在GPS硬件抽象層的移植工作。其意義所在是,能夠幫助開發(fā)者更好的理解和盡快的解決Android GPS相關(guān)問題,提升開發(fā)速度。而且Android下各個模塊實現(xiàn)之中有相似之處,對GPS模塊的了解可以在對其他模塊的開發(fā)過程起參考作用。
Android作為移動設(shè)備的軟件平臺,與其他操作系統(tǒng)一樣也使用分層的方式,其軟件層次結(jié)構(gòu)為操作系統(tǒng)、中間件和應(yīng)用程序。與Android系統(tǒng)相同,GPS模塊構(gòu)架也是分層模式,從下往上劃分為:驅(qū)動層、中間層和應(yīng)用層。其中最底層為GPS設(shè)備驅(qū)動層,GPS中間層為GPS硬件抽象層,GPS應(yīng)用層包括GPS應(yīng)用程序?qū)雍虶PS應(yīng)用框架層。GPS應(yīng)用層通過JNI調(diào)用GPS中間層[3]。
1.1 GPS驅(qū)動層
GPS驅(qū)動層位于硬件設(shè)備之上,本質(zhì)上就是一組對硬件進行操作的API接口,是對硬件功能的抽象,通過提供API為操作系統(tǒng)服務(wù)。驅(qū)動層的主要功能包括:相關(guān)硬件的初始化、數(shù)據(jù)的輸入輸出操作、硬件設(shè)備的配置操作功能。GPS作為一個外部設(shè)備,GPS接收衛(wèi)星信號進行分析,輸出NMEA數(shù)據(jù)到CPU中進行處理,CPU驅(qū)動層主要完成的任務(wù)包括GPS硬件的初始化、GPS中數(shù)據(jù)的處理和CPU之間的通信。GPS驅(qū)動層主要實現(xiàn)GPS等的硬件驅(qū)動,大部分GPS通過串口或USB接口連接,因此一般無須特別的驅(qū)動。
1.2 GPS中間層
GPS中間層位于Linux內(nèi)核層與GPS應(yīng)用層中間,是Android操作系統(tǒng)的系統(tǒng)庫部分。GPS中間層包括GPS硬件抽象層(HAL)和GPS定位JNI層。
GPS硬件抽象層實現(xiàn)GPS數(shù)據(jù) (NEMA數(shù)據(jù))到Android支持的GPS數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換。同時實現(xiàn)所有的控制命令到驅(qū)動層的封裝。因此,該層也是移植的主要部分。接口主要定義在:
hardware/libhardware_legacy/include/hardware_legacy/gps.h
hardware/libhardware_legacy/include/hardware_legacy gps_ni.h
Android中提供了一個 GPS實現(xiàn)部分,在 hardware/ libhardware_legacy/gps目錄中。
GPS定位JNI層主要完成對硬件抽象層的封裝和調(diào)用,承上啟下。GPS的JNI代碼路徑為:
Frameworks/base/core/jni/android_location_GpsLocationProvider. cpp
這里提供了 對 com.android.internal.location包中的GpsLocationProvider類的支持。
1.3 GPS應(yīng)用層
GPS應(yīng)用層位于中間層之上,它是用Java語言編寫的。主要包括GPS應(yīng)用程序和GPS應(yīng)用框架層。其中,GPS應(yīng)用程序是用Java語言編寫的,主要提供用戶與設(shè)備的交互接口。GPS應(yīng)用程序調(diào)用GPS應(yīng)用框架層提供的API。GPS應(yīng)用框架層,即GPS Application Framework,主要為上層GPS應(yīng)用層提供所需要的各種服務(wù)。
基于Android的GPS定位系統(tǒng)移植的主要內(nèi)容在JNI層以下,硬件抽象層是移植部分的工作重點所在。
2.1 開發(fā)設(shè)備及環(huán)境介紹
本文中使用的Tiny4412開發(fā)板是高性能的Cortex-A9核心板,采用三星高性能的Exynos 4412四核處理器,配備1G單通道DDR3內(nèi)存和4G高速eMMC閃存。Exynos 4412內(nèi)部集成了CPU為Mali-400 MP的高性能圖形引擎,可流暢運行Android等高級操作系統(tǒng)。
在GPS模塊方面,本文中采用的是SiRF StarIII GPS模塊,是美國塞浮公司開發(fā)的GPS第三代芯片,對比之前的產(chǎn)品,其靈敏度有較大的提升。
本文中開發(fā)使用到的軟件環(huán)境,在Linux環(huán)境中,開發(fā)Android主機環(huán)境包括以下需求:git工具、repo工具,Java的JDK,主機編譯工具。
2.2 GPS硬件抽象層實現(xiàn)
GPS硬件抽象層頭文件路徑如下所示:
hardware/libhardware_legacy/include/hardware_legacy/gps.h
本論文中,GPS部分采用Android硬件抽象層接口方式中得直接接口方式,使用的是非標(biāo)準(zhǔn)的接口,GPS部分是hardware_legacy的一部分。GPS硬件抽象層的主要入口如下表所示。
gps.h中定義了GPS的關(guān)鍵接口GpsInterface,它是標(biāo)準(zhǔn)的GPS接口,該接口定義了HAL層的所有操作,其內(nèi)容如下所示:
表1 GPS硬件抽象層主要入口Tab.1 Function entrance of GPS HAL layer
GpsCallbacks定義GPS回調(diào)函數(shù)指針組,它是GPS的硬件抽象層調(diào)用者獲取信息的手段,通常在讀取到底層數(shù)據(jù),并分析完成時調(diào)用,上報信息給上層。其定義如下所示:
GpsCallbacks由通過調(diào)用初始化函數(shù) (GpsInterface中的init) 注冊到硬件適配層, 供適配層在適當(dāng)時回調(diào)。GpsCallbacks中的
GPS硬件抽象層將底層硬件的主要功能抽象出來,表現(xiàn)為幾個函數(shù)的形式,主要包括對硬件的控制接口和對數(shù)據(jù)處理接口。此部分是移植GPS功能實現(xiàn)的關(guān)鍵,需要根據(jù)自己的硬件工作方式實現(xiàn)這些函數(shù)。GPS硬件抽象層所實現(xiàn)的對硬件的控制接口如表2所列,這些接口供GPS JNI層調(diào)用。
對于GPS,首先需要初始化,然后對于GPS數(shù)據(jù),建立一套“獲取——解析——上報”的機制。
GPS JNI層通過gps_get_gps_interface函數(shù)獲取GPS硬件抽象層接口,其返回的是GpsInterface結(jié)構(gòu)體類型的指針,由于NMEA數(shù)據(jù)的解析等是比較統(tǒng)一的,在編寫特定GPS適配層時,可以以gps_menu.c中絕大部分的處理流程作為基礎(chǔ)進行改寫。gps_menu實現(xiàn)分成幾個部分:接口實現(xiàn)、GPS相關(guān)控制,以及NMEA解析部分。其中接口實現(xiàn)封裝GPS相關(guān)控制,調(diào)用對應(yīng)的控制邏輯。而NMEA解析部分比較獨立,提供解析功能接口,以及回調(diào)接口[4]。
表2 GPS硬件抽象層函數(shù)接口表Tab.2 Function and interface of GPS HAL layer
gps_menu.c實現(xiàn)了gps_get_qemu_interface接口,返回作為核心結(jié)構(gòu)的GpsInterface,本文中對qemuGpsInterface結(jié)構(gòu)體定義如下所示:
JNI層通過這個結(jié)構(gòu)體獲取GPS硬件抽象層接口。首先在GpsInterface.init的實現(xiàn)中,完成對GPS的初始化。Init會在GPS被打開的時候調(diào)用。該步驟需要完成GPS內(nèi)核模塊的加載工作,部分GPS還需要進行firmware下載工作。之后打開GPS端口,確認(rèn)GPS應(yīng)將已經(jīng)正常工作。
當(dāng)JNI試圖啟動GPS時會調(diào)用qemu_gps_init方法,其中完成的操作包括注冊相應(yīng)上層回調(diào)函數(shù)、打開socket并創(chuàng)建GPS數(shù)據(jù)獲取及解析線程。這兩個操作被組織到初始化函數(shù)gps_state_init中。
GPS初始化完成之后,一般都會新開一個polling線程,對GPS端口進行輪詢,獲取輸出的NEMA數(shù)據(jù)。GpsInterface. start以及stop主要控制該線程的啟停。
解析的工作是在獲取數(shù)據(jù)后進行,這里的目的是將NEMA數(shù)據(jù)解析成Android框架可以識別的結(jié)構(gòu)信息,存放到GpsLocation以及GpsSvInfo等,以便上報。對于NEMA數(shù)據(jù)的解析,已經(jīng)有非常多的參考實現(xiàn)。Android在gps_qemu.c中也給出了大部分參考實現(xiàn)??梢哉瞻徇@部分的內(nèi)容。
上報過程,在解析完成后進行,直接調(diào)用init時注冊的callback函數(shù),并填入獲取到的數(shù)據(jù)結(jié)構(gòu)即可[4-5]。
本論文中硬件抽象層的實現(xiàn)流程圖如圖1所示。
圖1 硬件抽象層程序流程圖Fig.1 Flow chart of the GPS HAL layer
其中初始化函數(shù)gps_state_init中代碼片段如下所示:
其中g(shù)ps_state_thread是核心數(shù)據(jù)處理線程。它完成的處理流程為:獲取—解析—上報。獲取部分,gps_state_thread通過epoll_wait從“gps”socket判斷是否有數(shù)據(jù)到達。隨后通過read函數(shù)直接讀取。 并將讀取到的數(shù)據(jù)送到nmea_reader_addc進行解析,其相關(guān)代碼片段如下所示:
解析數(shù)據(jù)的流程中,本文中g(shù)ps_qemu實現(xiàn)了一套基于TOKEN的簡單解析方法,并完成GpsLocation等結(jié)構(gòu)的填寫。主函數(shù)是nmea_reader_parse,主函數(shù)通過nmea_tokenizer_get獲取每個域的數(shù)據(jù)(NMEA有非常明確的域分隔符[6]),并根據(jù)格式定義轉(zhuǎn)化成對應(yīng)的格式,再通過nmea_reader_update系列函數(shù)更新對應(yīng)的域,比如時間、經(jīng)緯度等。
3.1 實驗測試環(huán)境介紹
本文中開發(fā)用到的Tiny4412開發(fā)板上電開機后,連接SiRF StarIII GPS模塊,將SiRF StarIII GPS模塊放在信號較好的地方,利用第三方GPS APK測試軟件對GPS移植模塊進行測試。
3.2 測試結(jié)果及分析
通過第三方GPS測試軟件測試結(jié)果如圖2所示。
圖2 GPS第三方測試軟件測試結(jié)果Fig.2 Test result of the third-party test software
該測試結(jié)果顯示,該GPS移植模塊能夠正確的獲取經(jīng)緯度信息。
Android系統(tǒng)在消費電子和工程領(lǐng)域的發(fā)展,使得GPS在Android中的應(yīng)用也越來越廣泛,Android下GPS的開發(fā)備受關(guān)注。本文在特定開發(fā)板下的基于Android的GPS移植工作,對于開發(fā)者更好的理解Android GPS相關(guān)問題有重要的參考意義,當(dāng)然,本文中移植的GPS模塊仍然有許多可以改善和優(yōu)化的地方。
[1]John Whipple,William Arensman,Marian Starr Boler,et al. A Public Safety Application of GPS-Enabled Smartphones and the Android Operating System[C]//2009 IEEE International Conference on Systems,Man and Cybernetics(SMC 2009).2009:2059-2061.
[2]周峰.基于Android智能手機平臺的GPS開發(fā)[J].大眾科技,2012(9):31-32. ZHOU Feng.GPS development based on android smart phone Platform[J].The magazine of popular science,2012(9): 31-32.
[3]李鑫澤.基于Android的GPS模塊設(shè)計與實現(xiàn)[D].鄭州:鄭州大學(xué),2013.
[4]韓超,梁泉.Android系統(tǒng)級深入開發(fā)——移植與調(diào)試[M].北京:電子工業(yè)出版社,2011.
[5]曾薪夷.基于Android平臺的GPS導(dǎo)航系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與現(xiàn)代化,2012(9):225-228. ZENG Xin-yi.Design and implementation of GPS navigation system based on android platform[J].Computer and Modernization,2012(9):225-228.
[6]劉大杰.全球定位系統(tǒng)(GPS)的原理與數(shù)據(jù)處理[M].上海:同濟大學(xué)出版社,2001.
The transplantation of GPS module based on Android
YUAN Si1,2,LIU Xiao-dong2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China;2.Wuhan Hongxu Information Technology Co.,Ltd.,Wuhan 430074,China)
This paper developed and ported an Android GPS module based on the Tiny4412 board and SiRF StarIII GPS module.The main task is on the GPS HAL layer.This paper also used the GPS application to test GPS function.The result turns out the right of the Android GPS module.This is of great significance to understand and solve Android GPS related issues.
Android;HAL layer;GPS;transplantation of GPS
TN96
A
1674-6236(2015)07-0086-04
2014-07-27 稿件編號:201407212
袁 思(1991—),女,湖北仙桃人,碩士研究生。研究方向:數(shù)據(jù)還原技術(shù)。