技术天地

WinCE主板接入3G网络的方法    发布时间:2009-12-3    被阅览数:

        Windows CE操作系统的远程访问服务RAS(Remote Access Server)功能,允许用户从远程地点将自己的计算机设备连接到一个计算机网络,一旦建立了连接,就可以像与局域网中一样与其他计算机进行通讯。英创公司ARM系列工控主板,预装了正版WinCE5.0操作系统,支持采用RAS拨号方式,通过GPRS或3G信道,把设备直接接入到Internet。关于GPRS拨号建立的文章,请参考《基于WINCE平台eVC编程要点之二——WinCE下的GPRS 应用》,本文介绍如何自动建立一个3G拨号连接并实现自动拨号。

1、自动创建3G拨号连接
        创建3G拨号连接与创建GPRS拨号连接一样,需要添加一个RASEntry到RAS 的电话薄中,并将其保存在注册表中。RASEntry中需要设置作为调制解调器的设备属性(端口设置、拨号选项)以及指定电话号码和用户验证参数。在EM9000 嵌入式主板上,直接支持WinCE 桌面系统,用户可以通过界面中“控制面板”手动添加3G拨号连接。具体的设置方法请参见技术文档《EM9000 3G通讯网络设置》一文,这里不再赘述。而EM9160、EM9260 嵌入式主板没有支持WinCE 的界面,为了方便用户的使用,英创专门设计了自动创建3G拨号连接的程序3GEntry.exe,用户将相应的配置文件3GEntry.txt放在与3GEntry.exe同一目录中,可以通过Telnet登录到ARM工控主板,运行一次3GEntry.exe,即可自动创建3G 的拨号连接。需要注意的是3GEntry.exe只需运行一次即可。

        英创公司针对不同3G模块和不同的3G运营商提供了相对应的配置文件3GEntry.txt,在3GEntry.txt中保存了RASEntry所需要的配置信息,用户一般不需要修改配置文件,以免建立拨号连接失败。

2、自动运行3G拨号连接
        在建立拨号连接后,需要调用RasDial(…)函数来建立PPP连接,一但建立了PPP连接,就可以像在局域网上一样,调用标准WinSockets API进行网络应用层的处理与远端主机通信了。

        RasDial是操作系统提供的一个自动拨号函数,用于在RAS客户端与RAS服务器之间建立连接。RasDial函数可通过带入参数来设置为同步调用或异步调用,当RasDial函数作为同步调用时,函数将阻塞,直到连接建立或产生错误时,函数才返回,同步调用的优点是编程简单,缺点是不能获得连接过程的状态信息。

        当RasDial执行异步调用时,进行连接的同时,函数调用会立即返回,然后通过窗口消息来监视拨号连接的状态。在进行RAS连接时,异步调用RasDial是优选方法,因为可以对连接过程进行监视。下面是异步调用RasDial,通过Windows消息来监视拨号连接的程序片段。

      int nFlag = 0;  // 定义全局变量,用于判断连接是否建立

      // 异步调用RasDial,函数马上返回,需通过监视Windows消息判断连接状态
      RasDial (NULL, NULL, &RasDialParams, 0xFFFFFFFF, v_hWnd, &hRasConn);

      if(nFlag ==  1 )
      {
            // 连接建立,可进行网络应用层处理
      }

      // Windows消息处理函数
      LRESULT CALLBACK WndProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
      {
            RASCONNSTATE RasState = (RASCONNSTATE)wParam;
            switch (Msg) 
            {
                  case WM_RASDIALEVENT :   // 收到拨号连接消息
                        OutputMessage (TEXT('RasDial: ')); 
                        switch (RasState) 
                        {     
                              case RASCS_OpenPort:  // 正在打开端口
                                    OutputMessage (TEXT('On open port'));
                                    break;
                              case RASCS_PortOpened: // 端口已打开
                                    OutputMessage (TEXT('Port is opened'));
                                    break;
                              case RASCS_ConnectDevice: // 正在连接设备
                                    OutputMessage (TEXT('On Connect Device'));
                                    break;
                              case RASCS_Connected :  // 连接已建立
                                    OutputMessage (TEXT('Connected'));
                                    nFlag = 1;  // 置标志位
                                    break;
                              case RASCS_Disconnected : // 连接断开
                                    OutputMessage (TEXT('Disconnected'));
                                    nFlag = 0;  // 置标志位
                                    break;
                              default :
                                    break;
                        }
                        break;
                  default:
                        return DefWindowProc(hWnd, Msg, wParam, lParam);
            }
            return FALSE;
      }

        本文介绍的自动创建拨号连接和自动拨号的方法与英创主板是否拥有图形显示界面无关,可以应用于英创所有ARM9工控主板上。

Go Top