最近接了个小case,感觉蛮有意思的,需求也很简单,就是在一部手机上实现这么一个功能:别人(或者是设备)通过短信息把GPS定位信息按照某种格式发送到这部手机上,然后能根据这条定位短信生成标准的NMEA语句,然后写入虚拟串口。从而这部手机可以像安装了GPS一样,能从串口中读取NMEA数据,然后进行定位。
这个程序虽然简单,却涉及了好几个关键技术:
1、SMS段信息服务。
现在基于SMS的应用已经很多了,在这里的应用也比较简单,就是要写一个后台程序,对短信息进行监控,如果发现有GPS信息输入,则进行拦截,然后进行处理。
2、虚拟串口技术。
在本次应用中,由于本身机器不带GPS设备,所以就必须模拟出GPS的工作环境,类似于要虚拟一个GPS硬件设备,向串口发送数据。在PC机上,我们通常的做法就是使用电缆将两个实际上存在的串口串联起来,比如把COM3和COM4串起来,然后把其中一个作为输入口,另一端则作为输出口。这样,就可以实现设备往串口写数据,程序从串口读数据的模拟。但在手机上做这样的操作显然不太现实。所以只能使用虚拟串口技术,实现两个串口的串联。
下面我就简要介绍一下我做这个case的经历:有不妥的地方希望各位看官拍砖。
当手机收到GPS短信后,短信监控模块会过滤,把符合要求的短信转入NMEA编码工具进行处理,然后写入内存映射文件。注意的是,短信监控模块和GPS模拟器是两个进程,他们之间的通信我采用了内存映射的方法。GPS模拟器感觉到有新的NMEA信息过来后,就将新的NMEA信息写入串口。如果没有新的GPS短信进来,则GPS模拟器将一直以最近的一次GPS信息为准,每隔一秒就向串口写一次数据。