0 引言 隨著嵌入式設備和通信網絡的飛速發展,消費者對移動通訊的需求不斷增加。電話系統成為消費類嵌入式設備中一個非常重要的組成部分。在很多嵌入式系統中,應用程序通過直接lhJGPRS模塊發送AT命令實現電話通訊功能。這種方法具有很大的硬件相關性,隨著應用復雜度的增加會造成系統難以維護,并且不具備可移植性。 無線接口層(RIL)最初是針對Windows Mobile操作系統引入的組件,用于屏蔽Modem硬件設備細節。RIL將上層應用請求轉化為與具體硬件設備相關的AT命令發送給Modem設備,使上層軟件可以通過RIL無縫地與GSM/GPRS通信。上層軟件將RIL作為邏輯設備,發送與硬件設備無關的命令,實現和底層設備交互的功能。 由于RIL具有屏蔽底層硬件設備細節的特點,因此本文在其基礎上進行電話系統設計,使電話系統具有較強的硬件無關性。本設計利用電話應用程序接口(TAPI)實現電話基本功能,并且引入電話管理層,對電話系統進行管理和優化,使上層應用和底層硬件設備完全剝離,使電話系統具有較強的可移植性。 1 基本原理 1.1 CPU和GPRS模塊通信原理 嵌入式系統的模塊化和可裁剪性決定了大多數嵌入式移動設備都采用雙核架構一核心的應用處理器和基帶處理器GPRS模塊,兩者通過串口連接,采用握手方式發送AT命令進行通信。通常上層應用程序可以直接發送AT命令實現電話功能,但會使系統缺乏可移植性,并且系統狀態難以維護。 本設計所基于的RIL可以解決這個問題。RIL處于應用程序之下,GPRS模塊之上,如圖l所示。RIL屏蔽了硬件上的細節,負責傳輸數據;發送AT命令;接收來自GSM/GPRS模塊的響應。上層應用只需將與設備無關的請求發送到RIL,由RIL實現與底層通訊硬件設備的交互。 ![]() 1.2 RIL原理 RIL分為RIL Driver和RIL Proxy兩部分。RIL Driver以流驅動的方式實現,負責AT命令的發送和響應的接收,整個系統只有唯一的一個RIL Driver。每個應用程序有獨立的RIL Proxy,和RIL DriverJ注行交互。應用程序使用RIL的流程如圖2所示。 ![]() 首先應用程序注冊到RIL Driver,獲得一個RIL Proxy。此后應用程序通過RIL Proxy發送與硬件無關的請求。融L Proxy將請求發送給Device Manager,Device Manager根據控制碼將請求發送給RIL Driver。最后RIL Driver將上層應用傳來的與設備無關的請求轉化為與具體硬件設備相關的AT命令寫到串口,發送給GPRS模塊,實現一次命令的發送。 同樣地,對于GPRS模塊返回的響應,RIL Driver從串口將命令讀出,將與硬件相關的響應轉換為硬件無關的通知放入通知隊列,發送給相應的RIL Proxy。 2 系統硬件架構 本系統中作為核心的嵌入式開發板采用的應用處理器為Monahans310,通過串口與SIMCOM公司生產的型號為SIM300D的GPRS模塊相連。應用處理器通過串口向GPRS模塊發送AT命令實現電話、短信、上網等功能。系統硬件如圖3所示。SIM300D支持MUX功能,支持數據和語音的同步傳送,并與音頻模塊9713相連,實現語音輸入輸出功能。 ![]() 3 軟件設計與實現 本文所設計的電話系統以RIL為基礎,利用電話應用程序接口(TAPI)實現電話功能。本設計中電話系統的主體是電話管理層,在電話管理層中實現電話功能、電話管理和電話系統優化。電話管理層的引入降低了應用程序和設備硬件的相關性,增強了系統的可移植性。 3.1電話管理層架構 電話管理層的作用有以下三點:利用TAPI實現電話呼入、撥出、切換等功能;對電話進行管理,實現多路電話切換,增強電話系統的健壯性;封裝TSP(電話服務提供接口)消息,使上層用戶程序不依賴于具體TSP消息,增強了電話系統的可移植性。 電話管理層由TAPI線路功能模塊CTapiLine、電話管理模塊CCallManager和輔助模塊三部分組成,如圖4所示。 ![]() TAPI線路功能模塊負責利用TAPI創建電話線路,實現電話功能。該模塊采用Singleton設計模式,對于一個用戶應用程序只有唯一的TAPI線路功能模塊對象,這使所有電話都只有在唯一線路上操作。 電話管理模塊CCallManager實現電話的管理,和TsP消息的封裝。上層用戶應用程序只和電話管理類交互。TAPL線路功能模塊和電話管理模塊之間采用消息隊列進行通信,降低了模塊間的依賴性。通話記錄模塊CRecordManager和通訊錄模塊CContactManager是輔助模塊,進行數據庫的讀寫。 3.2電話功能實現 電話管理層在TAPI線路功能模塊中利用TAPI實現電話呼入、撥出、切換等功能。TAPI采用客戶端服務端模式,由TAPI和TSP兩個部分所組成。TAPI處于客戶端,為上層應用提供API。TSP處于服務端,由通信設備制造商提供,操作來A符合TAPI規范的應用的請求。 由于電話系統基于RIL,在利用TAPI函數linelnitialize初始化線路時,向RIL Driver進行注冊,并獲得屬于電話進程的RIL Proxy。初始化線路的同時指定接收兩P返回消息的回調函數lineCallbackFunc。因此對TAPI的調用最終通過RIL Proxy發往RIL Driver,RIL Driver收到的相應消息經過TSP返回給回調函數。 由于在TAPI中以句柄HCALL為唯一標識對電話的操作,因此在TAPI線路功能模塊中將電話的句柄和號碼進行一一映射,句柄用于功能實現,號碼用于和電話管理模塊的交互。 3.3多個電話的管理 電話管理模塊對當前所有電話進行管理。電話管理模塊維護一個響鈴狀態電話m_pRingingCall和一個用于存放所有處于連接(接通、保持)狀態電話的容器m_vCalls。每個電話以號碼作為唯一ID,電話的狀態包括:響鈴(包括來電響鈴和呼出撥號響鈴)、活動、保持、斷開。狀態的轉換如圖5所示。電話管理模塊管理各電話狀態間的切換,例如通話中接聽新來電,電話管理模塊將原電話狀態由活動轉為保持,將新電話狀態由響鈴轉為活動并放入m_vCalls。電話管理模塊使得任意時刻用戶可以方便地獲得電話系統的狀態和當前電話的信息。 ![]() 3.4電話系統優化 磷腿早已成為標準接口,但是由于髓瑚∈用異步消息處理機制,同時這些消息又與通訊設備模塊密切相關,造成了電話應用程序開發上的困難,同時使應用程序的可設移計植在性刪較路差功,能不模利塊于中消費只類對電標子準產刪品息的做開出發響。因應此,本而將具體電話狀態細節交由電話管理模塊分析。 以電話掛斷為例(如圖6所示)。在線路功能模塊會收到堿斷消息LINECALLSTATE_DISCONNECTED,任何通訊設備模塊都會支持這個消息。這個消息根據不同掛斷情況又細分了不同的子消息,如表示對方電話正忙的LINEDISCONNECTMODE_BUSY 消息,表示對方普通掛斷的LINEDISCONNECT_NORMAL消息等。這些消息和具體的通訊設備模塊相關,SIM300D沒有這些子消息,因此不能讓用戶應用程序直接與TAPI交互,需要引入電話管理模塊。在TAPI線路功能模塊中在接收到LINECALLSTATE_DISCONNECTED消息后向電話管理模塊發送斷開消息,由電話管理模塊根據電話的狀態(例如是否是接通電話,是否主動掛斷)分析掛斷的原因通知上層用戶應用程序。這樣就增強了電話系統的可移植性。 ![]() 4 結語 本文介紹了基于Momhans310處理器和Windows CE 6.0操作系統的電話系統的設計和實現。目前已經在平臺上穩定運行,性能穩定、健壯、可移植性高。 參考文獻 1. Microsoft.Microsoft ![]() 2. Micosoft.Microsoft WindowsCE60 HLEP[DB/CD].March2003 3. Microsoft Microsoft Radio Interface Layer Whitepaper[DB/CD].http://www.informationweek.com/whitepaper/Wireless /wp901606?articlelD=901606,2004 4. 鮑棟等.基于TAPI的計算機電話集成的設計與實現[J].電子科技,2006,(6):52-55 5. 黃求根,等.TAPl3.0體系結構與應用[J].計算機應用研究,2000,(1):33-34 6. 王慶剛,楊佃福.GPRS技術在嵌入式系統中的應用[J].微計算機信息,2005,21(5):69-70 作者:東南大學 桂潔 張哲 來源:電子技術 2009 36(11) |