基于WINCE平台eVC编程要点之二——WinCE下的GPRS应用

 2008-5-29    
        英创提供的系列ARM9嵌入式主板,包括有EM9000嵌入式主板、EM9260嵌入式主板、EM9160嵌入式主板都是预装了正版WinCE操作系统,ARM9嵌入式主板的所有通讯接口均配置有标准的WinCE驱动程序,本文侧重于介绍嵌入式主板中通讯串口的一种典型应用,即如何在这些嵌入式主板上进行GPRS的应用开发。

        GPRS的标准应用模式是作为客户端模式,通过拨号“*99***1#”到中国移动的GPRS节点服务器,从而实现拨号上网的功能。在WinCE操作系统中提供有RAS(Remote Access Service),即“远程访问服务”,它允许远程拨号连接,一旦建立了连接,就可以像局域网中的计算机一样进行通讯。在英创提供的系列ARM9嵌入式主板接有GPRS设备,就可以通过RAS拨号直接接入到Internet,进一步可通过TCP/IP数据通讯来实现应用数据的通讯,从而实现应用数据进行无线传输的功能。下面就分三个部分来介绍开发RAS功能实现GPRS自动拨号的过程。其中包括如何自动建立一个GPRS拨号连接、GPRS无线模块的电源管理、自动进行GPRS拨号。

一、自动创建GPRS拨号连接

        在进行GPRS拨号之前,需要首先创建一个拨号连接,也就是需要添加一个RASEntry到RAS的电话薄中,并将其保存在注册表中。RASEntry中需要设置作为调制解调器的设备属性(端口设置、拨号选项)以及指定电话号码和用户验证参数。在EM9000嵌入式主板上,直接支持WinCE桌面系统,用户可以通过界面中“控制面板”手动添加GPRS拨号连接。具体的设置方法请参见技术文档《EM9000 无线通讯网络设置》一文,这里就不再赘述。而EM9260、EM9160嵌入式主板没有支持WinCE的界面,所以英创公司为了方便用户的使用,英创专门设计了自动创建拨号连接的程序RASEntry.exe,并捆绑在内核中,用户可以直接运行windows>目录下的RASEntry.exe,即可自动创建GPRS的拨号连接。该程序对于英创的所有的ARM9嵌入式主板均适用。注意RASEntry.exe只需运行一次即可。

        对于EM9000标准板卡,GPRS拨号属性中的端口配置为 COM3,波特率为57600,8位数据位,无校验,1位停止位。EM9260、EM9160中GPRS拨号属性中的端口配置为 COM2,波特率为57600,8位数据位,无校验,1位停止位。

二、GPRS无线模块的上电过程

        在英创提供的所有ARM9嵌入式主板开发套件中均可直接接上MC39i模块进行GPRS应用开发,这里主要介绍西门子公司的MC39I的上电过程。

        MC39i的电源管理是通过1路数字输入(GPRS_PWR)、2路数字输出(GPRS_STB、GPRS_AUX)来实现。其中GPRS_PWR用于检测MC39i模块上电的状态,输入高表示无线模块已上电;GPRS_STB主要用于对MC39i进行上电操作,通过GPRS_STB输出一个脉冲,使能MC39i上电;GPRS_AUX主要用于对MC39i进行控制,输出一个高电平,将关闭MC39i 电源供电。

        在程序设计中,为了确保每次MC39i模块上电操作正常,我们所提供的程序所采用的策略是先将模块关电,然后再进行正常的上电操作。

       GPRS_PowerOff( ); // 操作GPRS_AUX关闭MC39i模块电源
       Sleep( 200 ); // 延时200ms
       GPRS_PowerOn( ); // 操作GPRS_STB 对MC39i模块进行上电操作

        目前华为公司的GTM900无线模块,与MC39i在外形尺寸以及管脚都是一致的,因此在英创提供的ARM9嵌入式主板开发套件中也可以直接接上GTM900进行GPRS应用开发。GTM900的电源管理也是利用的GPRS_STB、GPRS_AUX,它和MC39I唯一的区别就在上电、关电的操作过程,为此英创公司对阵GTM900提供相应的GPRS_PowerOff( )、GPRS_PowerOn( ) 函数,应用仍然按照相同调用顺序即可实现对GTM900的自动上电操作。

三、自动进行GPRS 拨号连接

        GPRS拨号连接建立成功后,就可以直接调用WinCE系统提供的标准函数RasDial(…)来自动建立PPP连接,关于该函数的定义和使用方法可在eVC的在线帮助中获得。这里主要是介绍如何在程序中实现自动进行GPRS拨号,即在英创公司所提供的自动拨号程序中所采取的策略。

        为了确保每次自动拨号成功,程序的执行流程如下:

        1、无论当前的GPRS无线模块处于何种状态,通过相关的函数GPRS_PowerOff( )、GPRS_PowerOn() 对GPRS模块进行关电复位、重新上电的操作。以确保GPRS模块处于初始上电的状态。

        2、调用WinCE系统提供的标准函数RasEnumConnections(…)列举当前已建立的活动连接,如果得到的活动连接数目不为0,再调用函数RasHangUp(…)进行挂断操作,挂断关闭当前活动的连接。这样操作的目的是确保只有一个活动的连接。

        3、最后再调用函数RasDial(…)进行GPRS的拨号连接。拨号成功后,系统将保持一个活动的拨号连接。