基于WINCE平臺eVC編程要點之二——WinCE下的GPRS應用
英創提供的系列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的撥號連接。撥號成功后,系統將保持一個活動的撥號連接。