android关于GPS hal层的分析

本文主要介绍了Android系统中GPS硬件抽象层(HAL)的工作原理,包括硬件连接、数据解析和接口调用。通过分析GPS模块的硬件连接,如电源控制、晶振和串口,然后详细讲解了HAL层、框架层和JNI层的相关代码。文章还探讨了如何从NMEA数据中提取关键信息,如时间、位置、速度和方向,并展示了如何将这些信息通过回调函数传递给上层应用。此外,还涉及到了GPS模块的初始化、状态管理和线程控制流程。
摘要由CSDN通过智能技术生成
 

主控: Samsung   Cortex  ARM A8  smdkc110  1G

Gps:    Ublox-G6010

系统:  android 2.3

以下篇幅都是本人的一些建议以及做法

android里关于普通GPS模块(俗称硬GPS)相对来说是比较简单的,因为android都帮你封装好了,我们要做的稍后做详解。

1、  首先拿到一个GPS模块我们先判断是硬GPS、还是半软半硬的GPS,只要不用于某个行业或者对于定位精度很高的话一般来说都会用硬GPS,关于半软半硬的GPS详解到时请参考博客高精度GPS

2、  分析硬件原理图,不过可能我个人在硬件原理图知识很欠缺,所以对于GPS我只关注三个方面电源控制、晶振和串口,这里我司产用的是外部26M晶振和主控的UART3

3、  以上准备工作都好了话、下面就切入主题了,在Android系统中,关于GPS的实现位于:

Hardware/gps/    这里只分析hal

    Framework: 

framework\base\services\java\com\android\server\systemServer.java

framework\services\java\com\android\server\LocationManagerService.java

frameworks\base\services\java\com\android\server\location\GpsLocationProvider.java

JNI:   /framework/base/services/jni/com_android_server_location_GpsLocationProvider.cpp

4、 

5、  这样下来就可以吐出NMEA数据了,对于数据的NMEA格式这里只做稍微的讲解

$信息类型,xxx,xxx,xxx,xxx,xxx,xxx,xxx,

每行开头的字符都是$,接着是信息类型,后面是数据,用逗号隔开

信息类型为:

GPGSV:可见卫星信息

GPGLL:地理定位信息

GPRMC:推荐最小定位信息

GPVTG:地面速度信息

GPGGA:GPS定位信息

GPGSA:当前卫星信息

 

这里我们只解析GPRMCGPGGA的信息

GPRMC数据详解:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC时间,hhmmss(时分秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E()W(西)

<12> 模式指示(NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

 

解析内容:

$GPRMC,030254.00,A,2232.79596,N,11355.90127,E,0.028,,120313,,

1. 时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成北京时间(BTC),BTC和UTC差了8个小时,要在这个时间基础上加8个小时。

2. 定位状态,在接收到有效数据前,这个位是‘V’,后面的数据都为空,接到有效数据后,这个位是‘A,后面才开始有数据。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值