分类:             通信硬件与通讯协议              2014-10-20 09:55     337人阅读     评论(0)     收藏     举报    
GPS 代码框架

目录

一 android GPS框架

二 mtk平台的GPS软件分析

三 GPS协议含义

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

一 android GPS框架

From google

二 mtk平台的GPS软件分析

2.1 代码分布

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

应用层: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芯片数据打包和分发;

处理GPS的nvram数据等等;

当使用UART或GPIO通信的时候,初始化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生成

gpsdrv(sysclass接口)和mt3326-gps设备文件

提供IO control和platform 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”;

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

3、GPS无效时,除了第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>  纬度半球,N或S(北纬或南纬)

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

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

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

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

<8>  水平精确度,0.5到99.9

<9>  天线离海平面的高度,-9999.9到9999.9米

M    指单位米

<10> 大地水准面高度,-9999.9到9999.9米

M    指单位米

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

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

*    语句结束标志符

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

<CR>   回车

<LF>   换行

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

例2:$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*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)仰角(00~90度):33度;

(6)方位角(000~359度):240度;

(7)信噪比(00~99dB):45dB(后面依次为第10,16,17号卫星的信息);

*总和校验域;

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

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

  1. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc

    几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...

  2. MTK平台camera小结(一)

    *一.手机Camera的物理结构     [[文件:GD05 SWV 002 003 003 001.png]]       *二.Camera的成像原理     景物通过镜头(LENS)生成的光学图 ...

  3. Android O(29 )---MTK 平台代码同步

  4. MTK 驱动(100)---GPS调试宝典

    GPS 基本知识 Ø  1.1)GPS定位和网络定位有什么不同? GPS定位是需要卫星参与的,设备借助搜到的卫星讯号,来计算出来设备的位置. 网络定位是指利用基站.WIFI MAC,获取一个粗略的位置 ...

  5. html5获取gps坐标,html5获取手机GPS信息的示例代码

    html5获取手机GPS信息的示例代码function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCu ...

  6. gps定位器更换平台指令-GPS定位器接入平台指令

    GPS定位器的激活指令,接入平台指令,其实就是给GPS定位器设备配置 IP 端口的指令 购买GPS定位器北斗定位设备一定要注意的地方 GPS定位器设备是否支持独立配置IP 端口 这点尤为重要,如果不能 ...

  7. 看看gps信息发布平台

    gps,gps信息,gps新闻,gps人才网,gps网,信息发布,信息发布平台,发布信息 看看GPS信息网:www.oogps.com 看看GPS信息网www.oogps.com gps网址导航 ww ...

  8. 车辆gps监控系统中心服务器,卫星gps车辆监控平台简介

    原标题:卫星gps车辆监控平台简介 卫星GPS车辆监控综合管理系统是借助车辆上的GPS定位器传输数据的管理平台,大体上卫星GPS车辆监控管理系统模块包括总控中心.监控席.数据中心.系统主管理中心和短信 ...

  9. Java获取iphone手机gps信息_html5获取手机GPS信息的示例代码分享

    html5获取手机GPS信息的示例代码分享:function getLocation() { if (navigator.geolocation) { navigator.geolocation.ge ...

最新文章

  1. 马腾宇的AI学术历程:做科研要考虑长期的影响力
  2. RecyclerView遇到的问题
  3. STL源码剖析学习七:stack和queue
  4. 2014年考研计算机大纲解析:数据结构,2014年考研计算机大纲解析之数据结构
  5. linux 杀死t状态进程,Linux下如何查杀stopped进程
  6. JDK 9已完成功能!
  7. Python面试总结(四)ip正则与三次握手四次挥手
  8. python time sleep和wait_Python和硒:driver.implicitly_wait()和time.sleep()之间的区别...
  9. AVB2 avbtool.py脚本常用命令
  10. ADOCE打包到WinCE NK.bin镜像中
  11. java自动获取ip_java自动获取电脑ip和MAC地址
  12. Python+django网页设计入门(15):公用模板设计与使用
  13. matplotlib库
  14. Distance Dependent Infinite Latent Feature Model 阅读笔记1
  15. 四川理工学院计算机学院在哪里,四川理工计算机学院
  16. 年会抽奖程序,及时安排一波【开源项目】
  17. 【实战 01】心脏病二分类数据集
  18. 阿里云国际版短信验证码及服务教程
  19. 鸿蒙阴阳星辰塔,第1298章鸿蒙星辰塔的新能力
  20. PDF如何修改文件字体大小

热门文章

  1. CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)
  2. 危夷晨:来自“AI黄埔军校”的计算机视觉创业者
  3. 对Redis数据库的学习!
  4. 澎湃微PT32F003/F005
  5. 最近的错误整理(LMY)
  6. 每一题-101(患某种疾病的患者)
  7. 【DeepMind】新算法MuZero在Atari基准上取得了新SOTA效果,成果问鼎Nature
  8. icloud有linux客户端吗,icloud drive:Windows 版 iCloud 客户端在哪下载
  9. 怎样使用计算机操作,鼠标操作怎么用?电脑鼠标操作图文教程
  10. 数组的 find() 和 findIndex() 方法