Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147277
  • 博文数量: 41
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-07 08:37
文章分类

全部博文(41)

文章存档

2015年(16)

2013年(9)

2012年(5)

2011年(11)

分类: Android平台

2015-10-22 10:24:39

 

主控: Samsung   Cortex  ARM A8  smdkc110  1G

Gps:    UNI-HRG001 GPS模块,单频12通道的,20hz定位数据更新率

         单机:<2.5m 2DRMS

         DGPS:<0.5m(2DRMS)

系统:  android 2.3

 犹豫了很久自己总结的这边文档要不要发出来,主要是因为高精度在电子产品很少有用的到,最后还是为了以后可以方便自己查阅。

首先需要熟悉的是DGPS和单机定位的区别,DGPS是在普通的GPS基础上多了一个串口B,即需要两个串口,串口A用来接收GPS模块吐出的标准的NMEA数据和发命令用,串口B专门用来接收差分信息。

关于单机定位和上一篇文章讲述的是一致的,所以这里只分析DGPS定位

关于DGPS个人暂时是这样理解的:

串口A肯定还是要接收NMEA数据,同时还要告诉GPS模块要工作在DGPS mode,以及告诉GPS模块要设置其他一些配置,例如串口B的波特率等。

串口B是用来专门接收差分信号,然后发送给GPS模块来辅助提高定位的精度

所以引出以下几个我们要思考解决的问题

1、  如何保证串口A正常接收NMEA数据,还可以下发命令给GPS模块

2、  串口B的数据从何而来,又如何发送给GPS模块

为了方便用户选择,我们在上层做了一个供客户选择定位模式,

普通定位,SBAS定位,DGPS定位,以及串口波特率的设置,所以关于问题一有一个好的方法就是在原有的基础上(gps_qumu.c)增加一个进程

\hardware\libhardware_legacy\hc12a_gps\uart_a_b.c用来下发命令或者发送数据给GPS模块,因为是要由串口A发送命令给GPS模块以及配置串口B,所以要先初始化串口A

(附:串口A对应主控UART3,串口B对应主控UART1)

点击(此处)折叠或打开

  1. Java :
  2. public void setMode(int mode) {
  3.         setModeNative(mode);
  4.     }
  5. JNI:

  6. static void UARTARecivceModeCmd(JNIEnv *env,jobject clazz,jint cmd){
  7.         LOGD("leilei:mode:%d",cmd);
  8.         UART_A_Recivce_Mode_Cmd(cmd);
  9.         //return 0;
  10.             
  11.     }    

  12.     static JNINativeMethod method_table[]={
  13.     { "setModeNative","(I)V",(void*)UARTARecivceModeCmd},
  14. };

  15. int register_android_server_DGpsService(JNIEnv *env)
  16. {
  17.     return jniRegisterNativeMethods(env, "com/android/server/DGpsService",
  18.             method_table, NELEM(method_table));
  19. }
  20. HAL:
  21. int UART_A_Recivce_Mode_Cmd(int cmd)
  22. {
  23.     。。。。。。。
  24.     UART_A_INIT(fd);
  25.     switch(cmd)
  26.         {
  27.             case PPP_gps:
  28.                           。。。。。
  29.                             break;
  30.             case DGPS_gps:
  31.                         
  32.                         。。。。。
  33.                         break;
  34.             case SBAS_gps:
  35.                         。。。。
  36.                         break;
  37.              default:
  38.                     LOGD("default config!\n");
  39.                     break;
  40.              
  41.         }
  42.     close(fd);
  43.     return 0;
  44. }


阅读(1339) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~