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)

android 定位动画 安卓定位模块_android



此处)折叠或打开

1. Java :
2. public void setMode(int mode) {
3. (mode);
4. }
5.  JNI:
6.  
7. (JNIEnv *env,jobject clazz,jint cmd){
8. ("leilei:mode:%d",cmd);
9. (cmd);
10. //return 0;
11.              
12. }    
13.  
14. []={
15. { "setModeNative","(I)V",(void*)UARTARecivceModeCmd},
16. };
17.  
18. int register_android_server_DGpsService(JNIEnv *env)
19. {
20. (env, "com/android/server/DGpsService",
21. , NELEM(method_table));
22. }
23.  HAL:
24. int UART_A_Recivce_Mode_Cmd(int cmd)
25. {
26.      。。。。。。。
27. (fd);
28. (cmd)
29. { 
30. case PPP_gps:
31.                            。。。。。
32. ;
33. case DGPS_gps:
34.                          
35.                          。。。。。
36. ;
37. case SBAS_gps:
38.                          。。。。
39. ;
40. :
41. ("default config!\n");
42. ;
43.               
44. }
45. (fd);
46. ;
47. }