? 基于WinCE的无线网卡配置方法--技术天地

基于WinCE的無線網卡配置方法

 2009/8/24    

        隨著網絡設備的增加,網絡的布線顯得十分復雜,為了解決這種矛盾,無線網卡應運而生。無線網卡以其無需布線、健康安全、長距離工作等優點得到廣泛應用,然而,在嵌入式領域,由于受操作系統的限制,無線網卡被嵌入式系統拒之門外。英創公司經過技術攻關,突破了這一限制,使無線網卡在嵌入式領域得到方便應用。但是,由于WinCE的硬件驅動不像在臺式機機上安裝硬件驅動那么方便,英創公司只提供支持特定型號——RT2870無線網卡的驅動。

        無線網卡RT2870是USB接口,如圖1所示,可以直接插在英創嵌入式主板的USB接口。RT2870也有板卡式產品,可以固定在底板上。RT2870插到嵌入式主板后,燈會一直閃爍,說明RT2870工作正常。英創公司已經把無線網卡的驅動做到了內核,用戶使用的時候,只需建立與AP節點的連接,就可以把嵌入式主板接入局域網。下面介紹基于英創嵌入式模塊通過無線網卡接入局域網的方法。

 

        EM9000配置網卡IP地址等信息已經在《基于WinCE的無線網卡應用方案》中介紹過,本文主要介紹沒有WINCE標準界面的ARM9嵌入式主板(EM9160、EM9260、EM9360等)無線網卡的配置方法。

        英創公司提供了登陸無線AP節點工具——WiFiConfig,其命令格式為:

        WiFiConfig  AP節點名 密碼

        下面以EM9260為例詳細說明:

        把WiFiConfig.exe拷貝到Nandflash下,用telnet工具登錄開發板。并運行WiFiConfig,注意,AP節點的名字要區分大小寫。連接成功后,運行IPCONFIG命令,可以看到無線網卡的信息。由于無線網卡的ip地址為自動獲得,所以,在局域網內,要有DHCP服務器。如果沒有DHCP服務器,無線網卡的ip地址為全0,接下來的文章將介紹通過軟件設置固定IP的方法,注意,無線網卡的名字為RT2870。

 

        如果需要設置靜態IP地址等信息,可以通過程序更改配置。為了方便用戶使用,我們提供了NetIP.lib庫,頭文件定義如下。

      ///////////////////////////////////////////////////////////////////////////////////////
      // 功能描述:將IP地址字符串形式轉化為DWORD值,在NETWORK_ADPT_INFO中
      // 需要代//入IP地址的DWORD值。
      // 輸入參數: IPAddressString:  IP地址的字符串,如: _T('192.168.201.182')
      // 輸出參數:IPAddressValue:  IP地址的DWORD值。
      // 返回值 = TRUE: 操作成功
      //        = FALSE: 操作失敗
      ///////////////////////////////////////////////////////////////////////////////////////
     
BOOL  StringToIPAddr(TCHAR *IPAddressString, DWORD *IPAddressValue);

      ///////////////////////////////////////////////////////////////////////////////////////
      // 功能描述:設置本地網絡適配器的相關參數,包括IP、子網掩碼、網關等。
      // 輸入參數:pAdptInfo:  需要設置的NETWORK_ADPT_INFO結構參數。
      // 返回值 = TRUE: 操作成功
      //        = FALSE: 操作失敗
      ///////////////////////////////////////////////////////////////////////////////////////
      BOOL SetNetWorkAdapterInfo(LPTSTR szAdapterName, PNETWORK_ADPT_INFO pAdptInfo );

 

        根據頭文件中的API函數,填充NETWORK_ADPT_INFO結構體后,調用設置函數SetNetWorkAdapterInfo就可以把無線網卡的IP地址設置為靜態IP。具體示例如下:

      NETWORK_ADPT_INFO AdptInfo;
      TCHAR        AdpName[30]; 
      _tcscpy( AdpName, _T( 'RT28701' ) );      // 無線網卡名字為RT28701
     
AdptInfo.fUseDHCP=false;          // 不使用DHCP
     
AdptInfo.szAdapterName=AdpName;      // 網卡名字
     
StringToIPAddr( _T('192.168.201.193'), &AdptInfo.IPAddr ); // 網卡IP地址
     
StringToIPAddr(_T('192.168.201.19'), &AdptInfo.Gateway ); // 網關
     
StringToIPAddr(_T('255.255.255.0'), &AdptInfo.SubnetMask );// 子網掩碼
     
SetNetWorkAdapterInfo( AdpName, &AdptInfo );   // 設置生效

        上面示例中,只給出了代碼的主要部分,更詳細的代碼請參考光盤源碼。