無線IPPBX系統的設計與實現
1.5 總線端口適配單元設計
本文引用地址:http://www.104case.com/article/84015.htm總線端口適配單元的功能是從硬件上屏蔽I/O總線操作的復雜性,使主控CPU以一種簡單的I/O讀寫方式即可實現系統兩大總線的操控(I2C總線和HPI總線)。該單元的設計采用一片CPLD和一塊帶I2C接口的MCU來實現總線適配功能。CPLD的功能是實現不同I/O口間邏輯關系的轉換,具體來說就是將主控CPU的I/O讀寫邏輯轉換為AC48304C_C的HPI口的讀寫邏輯或MCU I/O口的讀寫邏輯。MCU的作用是進一步將CPLD的接口邏輯轉化為I2C總線上的通信協議。CPLD的I/O邏輯功能的設計通過為其編寫VHDL語言來實現,它的等效內部邏輯和外圍接口如圖4所示。
2 系統軟件設計
2.1 分層架構
無線IPPBX軟件系統以嵌入式 Linux為操作系統平臺,采用軟件分層的設計思想。整個系統的軟件架構分為三層:設備驅動層、通信協議層和通信事件處理層,如圖5所示。每一層都為上層提供API,圖中虛線表示分層,箭頭表示層與層之間API的調用關系。
2.2 設備驅動層設計
設備驅動層屬于系統軟件的最底層,它根據所處理的硬件對象的不同又可分為網絡設備驅動和通信設備驅動。網絡設備驅動負責處理以太網控制器的操控,它控制以太網芯片從以太網發送和接收數據包。通信設備驅動負責控制系統各工作單元信息處理的物理實現,包括AC48304C_C初始化、各語音處理通道的配置、語音壓縮包的存取和DTMF信號處理,以及各控制單元(AM79Q02,GSM模塊)信令發送、狀態讀取。通信設備驅動通過Linux虛擬文件系統接口向上層提供標準的API,上層可以不管設備的復雜性,只要調用這些API就可以。
在上述設備驅動功能的設計中與GSM工作單元信息交互的實現方法需要特別注意,這也是實現設備無線通信功能的核心所在。與GSM工作單元的信息交互是通過向控制GSM模塊的MCU發送控制指令實現的。這些控制指令通過I2C總線傳送。本系統I2C總線是一個多主機通信系統,當主控CPU(MPC860T)在該總線傳送信息時,先要偵聽信道是否空閑(該功能由總線適配單元實現),如果空閑則將待發送的指令序列分解成一定長度的數據包,然后一個包一個包地發送出去(與以太網相似)。
鑒于I2C總線的這個特性,在驅動層要制定一個簡單的協議才可實現主控CPU與GSM控制單元(MCU)間信令的傳遞。系統采用HDLC幀的方式,即在傳遞信令前先將要發往GSM控制單元的控制信令打成 HDLC幀的格式,然后再將此幀分解成固定長度的數據包發往I2C總線,控制GSM模塊的MCU接收這些數據包并將其還原成HDLC幀,再根據幀中各字節的定義將該幀解析成具體的AT指令發送給GSM模塊。系統HDLC幀結構如表1所示。
控制GSM模塊的MCU接收到HDLC幀后先讀取類型字段,根據該字段判斷載荷內容,然后再執行相應的操作。例如收到HDLC幀的類型為0x01時表示撥號操作,后面的載荷就是電話號碼,此時就執行撥號的AT指令。又如收到HDLC幀的類型為0x04則表示發送短信操作,載荷則為電話號碼和短信內容的PDU碼,那么就執行發送短信AT指令。
2.3 通信協議層設計
通信協議層主要為上層應用程序提供各通信協議棧。本系統通信協議層實際還可細分為兩層:TCP/IP協議層和應用層協議(SIP協議和RTP協議)。設計通信協議時,TCP/IP協議是Linux操作系統自帶的運行在內核當中,SIP協議和RTP協議需要從外部移植,運行時以函數庫的形式存在于用戶空間。不論TCP/IP協議層還是應用層協議都為其上層提供了標準的API,對于上層程序來說只要調用這些API就可實現協議功能。
2.4 通信事件處理層設計
通信事件處理層是運行在應用層為一些具體的通信事件(如用戶的摘掛機、電話的呼入呼出、呼叫轉移等)服務的程序。具體的設計方法是在系統的應用層開啟一個守護進程,并在該進程下開辟多個監控線程。每個監控線程負責監控一類通信事件,如果有通信事件發生,則監控它的線程就調用相應的狀態機服務程序,而狀態機服務程序會調用具體的協議棧并驅動實現具體的通信過程。
評論