技术开发 频道

巧用GPSID驱动 快速实现WinCE GPS开发

  (3)GPS信号的接收和读取

  虽然接收机与卫星的位置、伪时延构成的多元多次方程看起来有点复杂。但庆幸的是,程序员不需要做与此相关的工作,它们都被GPS接收机自己处理了。GPS接收模块可以自己接收并处理卫星信号,并完成定位的计算,同时把定位计算结果通过接口以某种电文格式递交给计算机。因此,嵌入式系统只需要简单的打开与GPS模块的连接口,就能不断的收到GPS接收机传送过来的数据了。

  通常,GPS接收机都会被设计成为标准串口设备,不管是CF接口还是蓝牙接口,都被映射成为串口设备。因此,在程序员的眼中传送的GPS数据都是按一定的数据格式传输的,而和硬件设备的接口类型没有关系,只需如同一般的串口设备来对待即可。GPS接收机的定位数据格式一般会在接收机的使用说明书上明确的标注,通常所见的都是采用NMEA(美国国家航海电子协会)标准。

  NMEA 0183是一种航海、海运方面有关于数字信号传递的标准,此标准定义了电子信号所需要的传输协议、传输数据时间。这个协议是文本格式的。因此,开发GPS导航设备的要点在于要理解相关的GPS数据格式和协议,以及主机系统和GPS接收机的信息传输接口。

  2. 方便快捷的GPSID中间驱动层

  (1)WinCE和GPS接收器的通信方式

  一般来说,在提供GPS功能的嵌入式设备中都有一个GPS接收器(Receiver)。它是用来接收GPS信号的,同时GPS接收器也是把接收到的卫星信号转换成NMEA Data的设备。因此,GPS接收器一旦启动后,会自动连接卫星接收信号,并通过内含的算法计算出位置等信息,然后以NMEA Data的格式输出。再余下的工作就是WinCE系统如何获取信息的通信过程和应用软件如何实现具体的导航功能了。

  因此,在WinCE上实现GPS信息传输有3种选择:①是直接使用串口连接GPS接收器来获取信息;②是通过GPS Intermediate Driver中间驱动层来实现信息传输;③是使用第三方类库来实现通信传输。

  (2)什么是GPS中间驱动程序(GPSID)?

  GPS传统的编程其实很麻烦,既要同串口进行通信,又要去解析NMEA的语法,同时访问GPS的程序会一直都在运行,这就需要保证这些访问程序是在单独的线程中运行。因此,传统的通过串口传输GPS数据的开发方式是很痛苦的事情。但现在随着WinCE系统新版本的升级,WinCE系统内置了GPS Intermediate Driver。

  通过它我们能够很方便的取得GPS数据,而且开发基于 GPS定位系统的 WinCE应用程序也变得简单多了。目前,GPS中间驱动程序(GPSID)正成为导航设备开发者手中的利器。

  GPS Intermediate Drive(中间驱动程序,GPSID)是一个位于应用程序和GPS设备中间层的设备驱动。GPSID是对串口操作进行了封装,因此对于系统层来说它是一个普通的驱动,是一个插在GPS设备与应用程序之间的系统中间件。这样的好处是使开发人员不需要通过串口直接访问 GPS 设备,而是访问 GPSID 提供的 API 函数,然后再由GPSID 去访问 GPS 设备。这样一来,编写出来的 GPS 应用程序就具有设备无关性了,也使到只要应用GPSID就可以用相同的代码去访问几乎所有类型的GPS接收器了。

  GPSID的API函数主要有两类:一类是gpsapi.dll函数:GPSOpenDevice、GPSCloseDevice、GPSGetPosition、GPSGetDeviceState。另一类是:coredll.dll函数:CreateEvent、CloseHandle、WaitForSingleObject、WaitForMultipleObjects、EventModify。

1
相关文章