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