GPS之MTK平台代码小结以及gps协议注释

   

        分类:             通信硬件与通讯协议                   337人阅读     评论(0)     收藏     举报    

目录

android GPS框架

mtk平台的GPS软件分析

GPS协议含义

GPS协议中看问题(待更新)

 

 

android GPS框架

                                                                     From google

mtk平台的GPS软件分析

2.1 代码分布

代码分布自上而下:(android4.2+ 7289平台)

应用层:YGPS

trunk\mediatek\packages\apps\YGPS-----YGPS.apk

trunk\mediatek\packages\apps\YGPS\test---工模apk

 

 

JNI

\trunk\frameworks\base\services\jni\

com_android_server_location_GpsLocationProvider.cpp

JNI层只有一个文件,起到承上启下的作用。上层承接Framework,下层调用HAL层具体硬件抽象实现。

service

\trunk\frameworks\base\services\java\com\

android\server\LocationManagerService.java

是Location服务对内部实现的一种封装。

hal

\trunk\mediatek\hardware\gps\Gps_mtk.c

生成gps.default.so

HAL层相当于一个linux应用程序接口,通过open,close等操作,操作硬件设备。Android的源代码只实现了模拟器的gps接口,具体在文件gps_qemu.c中

作用:解析mnlp通过socket上传的协议包,变成应用程序识别的数据包。

Gps mnlp deamo

\trunk\mediatek\external\mnl生成libmnlp_mt6628,libmnlp_mt6620,  libmnlp_mt6572等应用

 

\trunk\mediatek\external\mnl\libmnlp\

mnl6572\lib\libagent_6572.a GPS agent

处理socket数据;

GPS芯片数据打包和分发;

处理GPSnvram数据等等;

当使用UARTGPIO通信的时候,初始化UART or GPIO

协议解析:

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPGSV,3,1,12,06,68,179,,16,63,330,,03,48,206,,23,42,301,*73

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPGSV,3,2,12,31,41,097,,19,23,199,,13,20,319,,21,15,083,*7D

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPGSV,3,3,12,193,12,156,,32,08,225,,20,04,250,,29,01,036,*42

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPRMC,052840.094,V,3112.4342,N,12135.0796,E,0.000,0.00,130613,,,N*4A

01-01 02:11:22.799  4419  4423 D NVRAM   : $GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32

 

meta用的库和应用

trunk\mediatek\platform\mt6572\external

\meta\gps生成

libmeta_gps.a和meta_gps_test可执行文件

连接mtk平台的meta工具时候用到.

内核层

\trunk\mediatek\kernel\drivers\

gps生成

gpsdrvsysclass接口)和mt3326-gps设备文件

提供IO controlplatform driver,注册字符设备驱动:

GPS注册成一个字符设备,mtk通过/dev/stpgps(目前不通过UART/dev/ttyMT1)通信,不走linux内核的net device设备流程(与bt wifi不同,bt wifi需要走net device流程)

mt66xx系列的stp模块驱动

\trunk\mediatek\kernel\drivers\combo\

common\linux\pub\stp_chrdev_gps.c

生成stp_chrdev_gps.ko

\trunk\mediatek\kernel\drivers\

combo\common\makefile

obj-$(CONFIG_MTK_COMBO_GPS) += mtk_stp_gps$(EXT_FLAG).o

mtk_stp_gps$(EXT_FLAG)-objs        := linux/pub/stp_chrdev_gps.o

 

stp模块,对实现最终对GPS芯片的数据读写。

modem通信模块驱动

\trunk\mediatek\external\BGW

\BGW_CCCI.c

生成BGW应用在

/system/xbin/BGW

modem通信模块驱动,GPS卫星信号调制处理部分;

 

GPS协议含义(引用自网络)

GPS数据格式(NMEA-0183协议)

 

GPS上电后,每隔一定的时间就会返回一定格式的数据,数据格式为:

$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x

每行开头的字符都是‘$’,接着是信息类型,后面是数据,以逗号分隔开。一行完整的数据如下:

$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A*60

 

信息类型为:

GPGSV:可见卫星信息

GPGLL:地理定位信息

GPRMC:推荐最小定位信息

GPVTG:地面速度信息

GPGGA:GPS定位信息

GPGSA:当前卫星信息

 

1、 GPS DOP and Active Satellites(GSA)当前卫星信息

 

$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><CR><LF>

 

<1>模式 :M =手动, A = 自动。

<2>定位型式 1 =未定位, 2 = 二维定位, 3 = 三维定位。

<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。

<4> PDOP位置精度因子(0.5~99.9

<5> HDOP水平精度因子(0.5~99.9

<6> VDOP垂直精度因子(0.5~99.9

<7> Checksum.(检查位).

 

2、 GPS Satellites in View(GSV)可见卫星信息

$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><CR><LF>

 

<1> GSV语句的总数

<2> 本句GSV的编号

<3> 可见卫星的总数,00 至 12。

<4> 卫星编号, 01 至 32。

<5>卫星仰角, 00至 90 度。

<6>卫星方位角, 000至 359 度。实际值。

<7>讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。

<8>Checksum.(检查位).

第<4>,<5>,<6>,<7>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。

 

 

3、Global Positioning System Fix Data(GGA)GPS定位信息

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>

 

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

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

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

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

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

<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算

<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)

<8> HDOP水平精度因子(0.5~99.9

<9> 海拔高度(-9999.9~99999.9

<10> 地球椭球面相对大地水准面的高度

<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)

<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)

 

 

4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息

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

 

<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=数据无效)

 

 

5、 Track Made Good and Ground Speed(VTG)地面速度信息

$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>

 

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

<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

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

<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

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

 

 

 

$GPRMC,034457.7,A,3640.304491,N,11707.680147,E,3.1,181.1,191209,,,A*67

 

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

 

<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=数据无效)

 

 

034457.7  

A               A=有效定位,V=无效定位

3640.304491     纬度 36.40304491

N               纬度半球N(北半球)或S(南半球)

11707.680147    经度 117.07680147

E               经度半球E(东经)或W(西经)

3.1             速率 3.1 km/h

181.1           地面航向  181.1度  以真北为参考基准

191209          19/12/2009 UTC日期 2009-12-19

\

\

A*67            A=自主定位,D=差分,E=估算,N=数据无效

 

 

 

===============================================

$GPRMC

 

格式为:

$GPRMC,010101.130, A, 3606.6834,  N,  12021.7778,   E,   0.0,   238.3,  010807,,,A*6C

$GPRMC,   <1>,    <2>,   <3>,    <4>,     <5>,     <6>,  <7>,    <8>,     <9>,

 

$ pos=0

 

<1> 当前位置的格林尼治时间,即世界时间,与北京时间差8个小时,格式为hhmmss.ms [pos+6]

 

<2> 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗。 [pos+17]

 

注意几点:

1、当GPS数据有效时第17位(一般情况下,程序里最好是找第二个逗号在取下一位判断)为“A”,无效时为“V”;

2GPS有效时,当速度为0时显示0.0(两位数),当速度不为0时小数点前面数据根据情况变化,最大为三位,此处速度单位为节(海里),需要做处理才能得到我们习惯的单位(公里/小时);

3GPS无效时,除了第17位显示V以外,不输入速度,角度数据;

4、当给GPS复位时第17位为V,不输出速度,角度,时间数据。

 

d.推荐定位信息(RMC)//项目需要

 

 

$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=数据无效)

 

 

 

GPS固定数据输出语句($GPGGA)

这是一帧GPS定位的主要数据,也是使用最广的数据。

$GPGGA 语句包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,水平精确度,海拔高度,高度单位,大地水准面高度,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记(用回车符<CR>和换行符<LF>),分别用14个逗号进行分隔。该数据帧的结构及各字段释义如下:

 

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>

 

$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据)

 

<1>  UTC时间,格式为hhmmss.sss

<2>  纬度,格式为ddmm.mmmm(第一位是零也将传送)

<3>  纬度半球,NS(北纬或南纬)

<4>  经度,格式为dddmm.mmmm(第一位零也将传送)

<5>  经度半球,EW(东经或西经)

<6>  定位质量指示,0=定位无效,1=定位有效;

<7>  使用卫星数量,从0012(第一个零也将传送)

<8>  水平精确度,0.599.9

<9>  天线离海平面的高度,-9999.99999.9

M    指单位米

<10> 大地水准面高度,-9999.99999.9

M    指单位米

<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量

 

<12>  差分参考基站标号,从00001023(首位0也将传送)

 

*    语句结束标志符

xx    $开始到*之间的所有ASCII码的异或校验和

<CR>   回车

<LF>   换行

 

b.可视卫星状态输出语句($GPGSV) 

2$GPGSV2108063324045103607447162107844173631342*78

标准格式:$GPGSV(1)(2)(3)(4)(5)(6)(7),…(4),(5)(6)(7)*hh(CR)(LF)

各部分含义为:

(1)总的GSV语句电文数;2;

(2)当前GSV语句号:1;

(3)可视卫星总数:08;

(4)卫星号:06;

(5)仰角(0090):33;

(6)方位角(000359):240;

(7)信噪比(0099dB):45dB(后面依次为第101617号卫星的信息);

*总和校验域;

hh 总和校验数:78;

(CR)(LF)回车,换行。

注:每条语句最多包括四颗卫星的信息,每颗卫星的信息有四个数据项,即:

(4)-卫星号,(5)-仰角,(6)-方位角,(7)-信噪比。

 

c.当前卫星信息($GSA)

$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>

 

<1>模式 M =手动, A = 自动。

<2>定位型式 1 = 未定位, 2 =二维定位, 3 = 三维定位。

<3>PRN 数字:01 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。

<4> PDOP位置精度因子(0.5~99.9)

<5> HDOP水平精度因子(0.5~99.9)

<6> VDOP垂直精度因子(0.5~99.9)

<7> Checksum.(检查位).

 

 

e.地面速度信息(VTG)

$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

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

<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

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

<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值