基于Android的GPS移植

2015-12-15 07:58刘晓东
电子设计工程 2015年7期
关键词:开发板中间层应用层

袁 思,刘晓东

(1武汉邮电科学研究院 湖北 武汉 430074;2.武汉虹旭信息技术有限责任公司 湖北 武汉 430074)

基于Android的GPS移植

袁 思1,2,刘晓东2

(1武汉邮电科学研究院 湖北 武汉 430074;2.武汉虹旭信息技术有限责任公司 湖北 武汉 430074)

基于Tiny4412开发板和SiRF StarIII GPS模块实现了GPS的移植工作,由于开发板和GPS模块的特性,其工作重点主要集中在GPS硬件抽象层的移植。并在搭建的测试环境下通过第三方GPS测试软件对该GPS移植模块进行了测试,证实了该GPS移植模块能够正常获取经纬度信息。这对于理解和解决Android GPS开发的相关问题有重要的参考价值。

Android;硬件抽象层;GPS;GPS移植

随着移动互联网技术的发展,手机作为最主要的移动终端发挥着越来越大的作用。当前主要的智能手机操作系统有windows mobile、symbian、android和 ios[1],其中 Android凭借其通用、开源、免费的特点在短时间内成为市场占有率第一的手机操作系统。随着物联网技术的发展,手机GPS已在个人导航定位方面发挥了巨大作用,除此以外,它在工程测量、设施搜索、定位监控、紧急援助等方面也有很大的发展空间[2]。随着Android系统在消费电子和工程领域的发展,GPS在Android中的应用也越来越广泛,因此Android下GPS的开发也受到了关注。

基于此,本文在研究了GPS模块中Framework层、HAL层和驱动层的工作过程和工作原理的基础上,实现了在Tiny4412开发板和 SiRF StarIII GPS模块下GPS的移植工作,由于Android系统对GPS模块中的Framework层和HAL层进行了封装,故基于Android的GPS移植主要的工作集中在GPS硬件抽象层的移植工作。其意义所在是,能够帮助开发者更好的理解和尽快的解决Android GPS相关问题,提升开发速度。而且Android下各个模块实现之中有相似之处,对GPS模块的了解可以在对其他模块的开发过程起参考作用。

1 Android GPS各层原理

Android作为移动设备的软件平台,与其他操作系统一样也使用分层的方式,其软件层次结构为操作系统、中间件和应用程序。与Android系统相同,GPS模块构架也是分层模式,从下往上划分为:驱动层、中间层和应用层。其中最底层为GPS设备驱动层,GPS中间层为GPS硬件抽象层,GPS应用层包括GPS应用程序层和GPS应用框架层。GPS应用层通过JNI调用GPS中间层[3]。

1.1 GPS驱动层

GPS驱动层位于硬件设备之上,本质上就是一组对硬件进行操作的API接口,是对硬件功能的抽象,通过提供API为操作系统服务。驱动层的主要功能包括:相关硬件的初始化、数据的输入输出操作、硬件设备的配置操作功能。GPS作为一个外部设备,GPS接收卫星信号进行分析,输出NMEA数据到CPU中进行处理,CPU驱动层主要完成的任务包括GPS硬件的初始化、GPS中数据的处理和CPU之间的通信。GPS驱动层主要实现GPS等的硬件驱动,大部分GPS通过串口或USB接口连接,因此一般无须特别的驱动。

1.2 GPS中间层

GPS中间层位于Linux内核层与GPS应用层中间,是Android操作系统的系统库部分。GPS中间层包括GPS硬件抽象层(HAL)和GPS定位JNI层。

GPS硬件抽象层实现GPS数据 (NEMA数据)到Android支持的GPS数据结构的转换。同时实现所有的控制命令到驱动层的封装。因此,该层也是移植的主要部分。接口主要定义在:

hardware/libhardware_legacy/include/hardware_legacy/gps.h

hardware/libhardware_legacy/include/hardware_legacy gps_ni.h

Android中提供了一个 GPS实现部分,在 hardware/ libhardware_legacy/gps目录中。

GPS定位JNI层主要完成对硬件抽象层的封装和调用,承上启下。GPS的JNI代码路径为:

Frameworks/base/core/jni/android_location_GpsLocationProvider. cpp

这里提供了 对 com.android.internal.location包中的GpsLocationProvider类的支持。

1.3 GPS应用层

GPS应用层位于中间层之上,它是用Java语言编写的。主要包括GPS应用程序和GPS应用框架层。其中,GPS应用程序是用Java语言编写的,主要提供用户与设备的交互接口。GPS应用程序调用GPS应用框架层提供的API。GPS应用框架层,即GPS Application Framework,主要为上层GPS应用层提供所需要的各种服务。

2 Android GPS实现

基于Android的GPS定位系统移植的主要内容在JNI层以下,硬件抽象层是移植部分的工作重点所在。

2.1 开发设备及环境介绍

本文中使用的Tiny4412开发板是高性能的Cortex-A9核心板,采用三星高性能的Exynos 4412四核处理器,配备1G单通道DDR3内存和4G高速eMMC闪存。Exynos 4412内部集成了CPU为Mali-400 MP的高性能图形引擎,可流畅运行Android等高级操作系统。

在GPS模块方面,本文中采用的是SiRF StarIII GPS模块,是美国塞浮公司开发的GPS第三代芯片,对比之前的产品,其灵敏度有较大的提升。

本文中开发使用到的软件环境,在Linux环境中,开发Android主机环境包括以下需求:git工具、repo工具,Java的JDK,主机编译工具。

2.2 GPS硬件抽象层实现

GPS硬件抽象层头文件路径如下所示:

hardware/libhardware_legacy/include/hardware_legacy/gps.h

本论文中,GPS部分采用Android硬件抽象层接口方式中得直接接口方式,使用的是非标准的接口,GPS部分是hardware_legacy的一部分。GPS硬件抽象层的主要入口如下表所示。

gps.h中定义了GPS的关键接口GpsInterface,它是标准的GPS接口,该接口定义了HAL层的所有操作,其内容如下所示:

表1 GPS硬件抽象层主要入口Tab.1 Function entrance of GPS HAL layer

GpsCallbacks定义GPS回调函数指针组,它是GPS的硬件抽象层调用者获取信息的手段,通常在读取到底层数据,并分析完成时调用,上报信息给上层。其定义如下所示:

GpsCallbacks由通过调用初始化函数 (GpsInterface中的init) 注册到硬件适配层, 供适配层在适当时回调。GpsCallbacks中的

GPS硬件抽象层将底层硬件的主要功能抽象出来,表现为几个函数的形式,主要包括对硬件的控制接口和对数据处理接口。此部分是移植GPS功能实现的关键,需要根据自己的硬件工作方式实现这些函数。GPS硬件抽象层所实现的对硬件的控制接口如表2所列,这些接口供GPS JNI层调用。

对于GPS,首先需要初始化,然后对于GPS数据,建立一套“获取——解析——上报”的机制。

GPS JNI层通过gps_get_gps_interface函数获取GPS硬件抽象层接口,其返回的是GpsInterface结构体类型的指针,由于NMEA数据的解析等是比较统一的,在编写特定GPS适配层时,可以以gps_menu.c中绝大部分的处理流程作为基础进行改写。gps_menu实现分成几个部分:接口实现、GPS相关控制,以及NMEA解析部分。其中接口实现封装GPS相关控制,调用对应的控制逻辑。而NMEA解析部分比较独立,提供解析功能接口,以及回调接口[4]。

表2 GPS硬件抽象层函数接口表Tab.2 Function and interface of GPS HAL layer

gps_menu.c实现了gps_get_qemu_interface接口,返回作为核心结构的GpsInterface,本文中对qemuGpsInterface结构体定义如下所示:

JNI层通过这个结构体获取GPS硬件抽象层接口。首先在GpsInterface.init的实现中,完成对GPS的初始化。Init会在GPS被打开的时候调用。该步骤需要完成GPS内核模块的加载工作,部分GPS还需要进行firmware下载工作。之后打开GPS端口,确认GPS应将已经正常工作。

当JNI试图启动GPS时会调用qemu_gps_init方法,其中完成的操作包括注册相应上层回调函数、打开socket并创建GPS数据获取及解析线程。这两个操作被组织到初始化函数gps_state_init中。

GPS初始化完成之后,一般都会新开一个polling线程,对GPS端口进行轮询,获取输出的NEMA数据。GpsInterface. start以及stop主要控制该线程的启停。

解析的工作是在获取数据后进行,这里的目的是将NEMA数据解析成Android框架可以识别的结构信息,存放到GpsLocation以及GpsSvInfo等,以便上报。对于NEMA数据的解析,已经有非常多的参考实现。Android在gps_qemu.c中也给出了大部分参考实现。可以照搬这部分的内容。

上报过程,在解析完成后进行,直接调用init时注册的callback函数,并填入获取到的数据结构即可[4-5]。

本论文中硬件抽象层的实现流程图如图1所示。

图1 硬件抽象层程序流程图Fig.1 Flow chart of the GPS HAL layer

其中初始化函数gps_state_init中代码片段如下所示:

其中gps_state_thread是核心数据处理线程。它完成的处理流程为:获取—解析—上报。获取部分,gps_state_thread通过epoll_wait从“gps”socket判断是否有数据到达。随后通过read函数直接读取。 并将读取到的数据送到nmea_reader_addc进行解析,其相关代码片段如下所示:

解析数据的流程中,本文中gps_qemu实现了一套基于TOKEN的简单解析方法,并完成GpsLocation等结构的填写。主函数是nmea_reader_parse,主函数通过nmea_tokenizer_get获取每个域的数据(NMEA有非常明确的域分隔符[6]),并根据格式定义转化成对应的格式,再通过nmea_reader_update系列函数更新对应的域,比如时间、经纬度等。

3 实验结果

3.1 实验测试环境介绍

本文中开发用到的Tiny4412开发板上电开机后,连接SiRF StarIII GPS模块,将SiRF StarIII GPS模块放在信号较好的地方,利用第三方GPS APK测试软件对GPS移植模块进行测试。

3.2 测试结果及分析

通过第三方GPS测试软件测试结果如图2所示。

图2 GPS第三方测试软件测试结果Fig.2 Test result of the third-party test software

该测试结果显示,该GPS移植模块能够正确的获取经纬度信息。

4 结束语

Android系统在消费电子和工程领域的发展,使得GPS在Android中的应用也越来越广泛,Android下GPS的开发备受关注。本文在特定开发板下的基于Android的GPS移植工作,对于开发者更好的理解Android GPS相关问题有重要的参考意义,当然,本文中移植的GPS模块仍然有许多可以改善和优化的地方。

[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开发[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模块设计与实现[D].郑州:郑州大学,2013.

[4]韩超,梁泉.Android系统级深入开发——移植与调试[M].北京:电子工业出版社,2011.

[5]曾薪夷.基于Android平台的GPS导航系统的设计与实现[J].计算机与现代化,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]刘大杰.全球定位系统(GPS)的原理与数据处理[M].上海:同济大学出版社,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—),女,湖北仙桃人,硕士研究生。研究方向:数据还原技术。

猜你喜欢
开发板中间层应用层
Zn-15Al-xLa中间层对镁/钢接触反应钎焊接头性能影响
一种十七股子午胎钢丝帘线
基于分级保护的OA系统应用层访问控制研究
浅析单片机开发板的设计与制作
新一代双向互动电力线通信技术的应用层协议研究
镍基高温合金TLP扩散焊中间层材料研究进展
B含量对IC10合金TLP焊接用中间层材料及接头组织的影响
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
物联网技术在信息机房制冷系统中的应用
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板