無線VoIP系統(tǒng)設(shè)計應(yīng)用
其中A0~A20:地址輸入;DQ0~DQ14:數(shù)據(jù)輸入/輸出;DQ15/A-1:DQ15(按字模式進(jìn)行數(shù)據(jù)的輸入/輸出),A-1(按字節(jié)模式進(jìn)行最低有效位地址輸入);CE:切片啟動輸入;WE:寫啟動輸入;OE:輸出啟動輸入;RESET:硬件重啟引腳,低電平有效;RY/BY:讀/忙輸出,連接到主處理器ADM5120的RDY引腳以提高速度。
W986432DH的引腳分布如圖4所示。其中A0~A10:地址引腳;BS0和BS1:存儲體選擇;DQ0~DQ31:數(shù)據(jù)輸入/輸出的復(fù)用引腳;RAS:行地址選通;CAS:列地址選通;WE:允許寫入,命令輸入,當(dāng)在RAS時鐘上升沿取樣時,CAS和WE確定操作將被執(zhí)行;DQM0~DQM3:輸入/輸出掩碼,當(dāng)DQM在讀周期高電平采樣時輸出緩沖區(qū)置于高阻抗(2個時延),而在寫周期采樣將零時延地阻止寫操作;CLK:在時鐘上升沿抽樣輸入;CKE:時鐘啟動,當(dāng)CKE為低時,進(jìn)入掉電模式、暫停模式或自我充電模式。
2 系統(tǒng)軟件的設(shè)計與實現(xiàn)
系統(tǒng)軟件設(shè)計的整體架構(gòu)如圖5所示,其在無線局域網(wǎng)內(nèi)實現(xiàn)了基于ADM5120的UDP方式點對點通訊和廣播通訊。UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)主要用來支持那些需要在計算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用例如網(wǎng)絡(luò)視頻會議系統(tǒng)等都需要使用UDP協(xié)議。UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層,屬于網(wǎng)絡(luò)協(xié)議中的傳輸層協(xié)議。由于UDP協(xié)議不需建立連接,具有效率高、速度快和占用資源少等優(yōu)點,應(yīng)用于消息通信和實時系統(tǒng)中可以提高系統(tǒng)傳輸數(shù)據(jù)的效率。UDP具有組播和廣播功能,是分發(fā)信息的一個理想?yún)f(xié)議。本系統(tǒng)還移植了一種基于ADM5120的嵌入式Web服務(wù)器boa,實現(xiàn)了對VoIP系統(tǒng)進(jìn)行基于B/S方式的Web配置。
2.1 點對點通訊的實現(xiàn)
在本系統(tǒng)中,在一個網(wǎng)段內(nèi)的任意兩個應(yīng)用程序之間可以進(jìn)行全雙工通信,每個應(yīng)用程序既可做為服務(wù)器又可做為客戶端。其UDP編程步驟如圖6所示,以下是兩個應(yīng)用程序A和B之間進(jìn)行點對點通訊的具體實現(xiàn)過程:
(1)雙方分別建立socket,調(diào)用socket函數(shù):
s=socket(PF_INET,SOCK_DGRAM,0)
SOCK_DGRAM表示套接字類型為數(shù)據(jù)報套接字,即采用UDP協(xié)議進(jìn)行通信。
(2)綁定已設(shè)置好的自己的地址和端口信息,調(diào)用bind函數(shù):
bind(s,(struct sockaddr*)my_addr,sizeof(structsockaddr))
(3)將select函數(shù)置于阻塞狀態(tài),直到監(jiān)視文件描述符集合rfds中某個文件描述符發(fā)生變化為止:
select(pCtrl->rwd+1,&rfds,IFX_NULL,IFX_NULL,NULL)
(4)數(shù)據(jù)傳輸:sendto()和recvfrom()用于在無連接的數(shù)據(jù)報socket方式下進(jìn)行數(shù)據(jù)傳輸。由于本地socket并沒有與遠(yuǎn)端機(jī)器建立連接,所以在發(fā)送數(shù)據(jù)時應(yīng)指明目的地址。如圖6所示,A作為發(fā)送方,通過其套接字用函數(shù)sendto()將其服務(wù)請求數(shù)據(jù)發(fā)送到接收方B的指定端口,B通過其套接字用函數(shù)recvfrom()接收數(shù)據(jù),處理好服務(wù)請求后又將服務(wù)應(yīng)答發(fā)回A,此時A便成了接收方,A接收應(yīng)答后還可繼續(xù)發(fā)送數(shù)據(jù)給B。
2.2 廣播通訊的實現(xiàn)
廣播和多播都用于實現(xiàn)向多個接收者發(fā)送UDP數(shù)據(jù)報,但是廣播不像多播那樣在接收端有復(fù)雜的控制過程,因而實現(xiàn)比多播簡單的多。以下廣播通訊的實現(xiàn)均在點對點通訊的基礎(chǔ)上實現(xiàn)的。
在發(fā)送方,只需要設(shè)置套接字socket的選項為允許發(fā)送廣播,然后在發(fā)送時指定目的IP為廣播地址即可。具體地,允許socket廣播通過setsockopt函數(shù)設(shè)置廣播選項來實現(xiàn),當(dāng)setsockopt參數(shù)optname為SO_BROADCAST時,表示打開或禁止從該socket廣播,當(dāng)參數(shù)optval為1時允許廣播,為0時禁止廣播。
系統(tǒng)編程實現(xiàn)廣播的部分源碼為:
int bBroadcast=1:
setsockopt(pCtrl-->nAdminSocket,SOL_SOCKET,SO_BROADCAST,bBroadcast,sizeof(bBroadcast));
setsockopt(pConn-->nUsedSocket,SOL_SOCKET,SO_BROADCAST,bBroadcast,sizeof(bBroadcast));
tO_addr.sin_addr.s_addr=inet_addr(WIRLESS_IP_BROADCAST);
/*WIRLESS_IP_BROADCAST為廣播地址,其值是將網(wǎng)絡(luò)接口(本系統(tǒng)為ath0)IP地址的主機(jī)ID部分設(shè)置為全1,網(wǎng)絡(luò)ID部分不變而得到*/
tO_addr.sin_family=AF_INET;
據(jù)文獻(xiàn)[7]所講,在接收方,一般不需做任何改動即可收到廣播。但在本系統(tǒng)實現(xiàn)的實驗過程中,當(dāng)將socket綁定到非INADDR_ANY的IP地址時,接收方無法收到廣播,并且沒有任何錯誤指示,即需要綁定本地端口地址到通配地址INADDR_ANY才可接收廣播:
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
另外,本系統(tǒng)還實現(xiàn)了廣播強(qiáng)插功能,即不管用戶當(dāng)前處于摘機(jī)、撥號狀態(tài),還是處于通話狀態(tài),當(dāng)有廣播來電時,都斷開原來的連接而與廣播主叫建立新的連接(用戶不用掛機(jī))。為了防止通話混亂,本系統(tǒng)設(shè)定同一時刻只有擁有廣播控制權(quán)的用戶有發(fā)言權(quán),而其他用戶能聽不能說,當(dāng)其他用戶想發(fā)言時,只要按下“*”鍵就搶到了廣播控制權(quán),最后只有當(dāng)擁有廣播控制權(quán)的用戶掛機(jī)時,廣播才停止,而任一其他用戶掛機(jī),不影響廣播通訊繼續(xù)進(jìn)行。
系統(tǒng)編程實現(xiàn)廣播強(qiáng)插的部分源碼見表1和表2。
3 結(jié) 語
該系統(tǒng)設(shè)計完成后,成功地應(yīng)用于常德市某一電廠,進(jìn)行生產(chǎn)調(diào)度,系統(tǒng)能實現(xiàn)點對點通訊和廣播通訊,并且通話質(zhì)量良好,基本無雜音和抖動。
本系統(tǒng)因自帶無線網(wǎng)卡可以自組織網(wǎng)絡(luò),它可以作為一種無線指令調(diào)度機(jī)被應(yīng)用到通信蔽塞的工廠,另外還可外接喇叭自動接聽電話,機(jī)器操作員不用停下手中的工作就可照指令進(jìn)行相應(yīng)的操作。另外,本系統(tǒng)應(yīng)用可拓展性好,如:系統(tǒng)可通過PCM通道進(jìn)行FXO連接從而實現(xiàn)與傳統(tǒng)PSTN互通(見圖1);在本系統(tǒng)上移植SIP協(xié)議棧便可實現(xiàn)與WIFI手機(jī)互通;將本系統(tǒng)整合到Ad Hoc網(wǎng)絡(luò)中,基于Ad Ioc網(wǎng)絡(luò)的各類移動終端設(shè)備便可應(yīng)運(yùn)而生,因此本系統(tǒng)具有廣闊的市場前景。
評論