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. (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. }