新的项目是一个移动服务平台,在手机的WM6.1下运行.其中有个需求是获取GPS经纬度数据.
获取GPS数据有两种方式,一种是直接获取GPS模块端口的数据,长期做潜入式开发的可能喜欢这种方式;第二种方式就是利用微软提供的API,既GPSID,抱着对微软的信任,我选择了这种方式。
但是在调试中遇到了问题,程序运行正常,可是总是获取不到GPS数据。首先怀疑机器是否有问题,所以下载了几个GPS小软件,在运行时,开始也无法获取到数据,后来发现有些小软件中可以选择端口号,因此找了个软件,专门扫描GPS所在的串口,终于有结果了,扫描到COM6的时候,出现了"发现GPS!"的信息,再在下载的软件中设置端口,结果测试正常,能获取到GPS数据。
有上面一步,第一可以断定我手的手机设备GPS模块正常,第二,问题可能出现在GPS串口上。在整个WM系统中查找系统设置,也只发现有一个“外部GPS”的设置功能,并且里面提供了两种端口设置:程序端口和硬件端口,在网上查找了一些资料,还是没完全明白两者的差别。首先把程序端口设置为COM6,测试自己的程序失败,接下来想修改硬件端口,结果发现每次设置完保存后,再打开,这个设置又被恢复到原设置了,所以这个设置没法修改,程序测试也就无法成功了。
接下了的关键就是看怎么可以设置这个硬件端口了。回想到前面说的两种获取GPS数据的方式,第一种是直接读串口,第二种是利用API,所以在API函数里面查找有关串口的信息,结果什么的没找到,既然API调用不用设置串口,系统中又存在两个GPS端口的设置功能,因此怀疑这个串口信息是写在注册表里面的。
立马查找注册表修改和GPSID相关的内容,终于在MS的MSDN上找到了一篇文章<<GPS Intermediate Driver Registry Setting>>,发现里面有修改GPS端口的信息,立即下载了一个修改WM注册表的工具,修改端口为COMM6。然后再进入到之前那个物理端口无法修改的界面,发现那个端口终于变成了COM6。
再次运行自己的程序,开启GPS功能,终于看到GPS开启成功和自己配制的GPS设备名称了,静静的等了1分多钟,终于看到了期待的经纬度数据和卫星数了,呵呵,搞定!
由于是第一做这种嵌入设备的开发,并且接触到一些手机信号,GPS等概念,外加项目时间严格,遇到这样的问题确实也紧张,不过解决了这个问题,心情还不错,赶紧回家吃饭了!
MSDN文章地址:http://msdn.microsoft.com/en-us/bb202104.aspx
修改的注册表:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/GPS Intermediate Driver
Drivers
"CurrentDriver" = "Acme GPS Hardware"
HKEY_LOCAL_MACHINE/System/CurrentControlSet/GPS Intermediate Driver
Drivers
Acme GPS Hardware
"InterfaceType" = "COMM"
"FriendlyName" = "ACME GPS Card, version 1.23"
"CommPort" = "COM4:"
下载的GPS小程序:BOBOKingGPS3,GPSSystem
GPS端口扫描程序:mGpsCmd
WM注册表编辑工具:PHMRegEdit
自创,转载请注明出处!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/allen_cn/archive/2010/01/14/5191000.aspx