亚洲电影av-亚洲第一综合网站-亚洲第一在线-亚洲第一影院-成年人视频在线免费-成年人视频在线观看免费

電子方案開發供應鏈平臺
一鍵發布任務
獲取驗證碼
返回

發布成功


贊賞作者

贊賞金額:

  • ¥2
  • ¥5
  • ¥10
  • ¥50
  • ¥100
  • ¥200

支付金額:5

支付方式:

微信支付

贊賞成功!
你的贊賞是對作者最大的肯定~?

當前位置 : 首頁 > 方案訊 > 方案訊詳情
詳解TAPI軟電話通信系統的模塊化設計
發布時間:2015-09-02 閱讀量:710 來源:我愛方案網 作者:
【導讀】計算機技術使得電話有軟件化趨向,其優勢是使電話可以變得靈活,方便地按具體要求實現電話的基本功能以及附加功能,我愛方案網小編為大家詳解TAPI軟電話通信系統的模塊化設計 。

首先分析了TAPI協議的結構、通信編程原理和編程應用環境,重點介紹了TAPI協議的層次化模型結構及其模塊化設計方法,該方法可以對進一步研究和開發TAPI軟電話應用產品提供借鑒。

1引言


TAPI:“電話應用程序接口”的簡稱( Te lephonyApplication Programm ing Interface )。它是微軟與INTEL共同開發的用于直接控制電話通信系統的函數集,是微軟計算機電話集成( CTI)計劃的核心,是微軟的w indow s開放式服務體系(WOSA )的一部分。它將電話、電話網和計算機的功能進一步集成起來,現在的計算機技術不僅可以處理語音通信等低級應用,還能處理視頻等高級應用。

軟電話需要和通信硬件設備交互,目前主要有兩種實現方法:一是利用電腦板卡和設備公司提供的DLL來實現,但功能有一定的局限性;二是利用協議公開的標準編程接口,但難度大,參數復雜不易實現。本設計利用標準編程接口TAPI,為了便于系統的集成和開發,重點介紹以統一短消息的形式實現應用系統和通信設備之間交互的TAPI模塊化設計方法。該模塊化組件與系統集成度高,可以方便的實現各種電話與控制功能。

2 TAPI作用及結構分析

2. 1 TAPI在軟電話系統中的作用


由于TAPI應用是電訊應用,需要連接PC電腦和通訊硬件設備,TAPI運行在PC機上并監控通訊硬件設備,所以首要任務是建立硬件環境。對于VOIP應用通信系統來說,軟交換服務器是IP電話網的控制核心,同時落地接入PSTN (公共電話網),PC機與軟交換服務器處于同一網段,TAPI與硬件交互也將通過網絡使用TCP/ IP協議連接。本設計的開發平臺是基于如下軟交換系統,系統如圖1所示。

詳解TAPI軟電話通信系統的模塊化設計

圖1軟交換系統

與新硬件被安裝到PC機上相似,需要在PC機上安裝驅動程序,但這個驅動并不是軟交換服務器的驅動,而是這個軟交換服務器上TAPI的驅動,這個驅動通常被稱為“TAPI客戶端”,目的是使PC機上的TAPIDLL能“找到”該軟交換機的TAPI,并能與之通訊。

2. 2 TAPI的結構分析

TAPI實際上是由TAPI、TSPI( Telephony Serv iceProv ider In terface)電話服務提供者接口和MSPI(M edia Serv ice Prov ider Interface)媒體服務提供接口三個部分組成的。TAPI是一個為程序員提供的工具包,它和MSPI一起使微軟視窗環境下的用戶能夠開發電話應用程序。TSPI也是一個為程序員提供的工具包,使他們能夠進行后端服務的開發,以操縱來自符合TAPI規范的應用請求,也就是說,它提供了一種連接到某一特定設備的方法。服務守護程序( TAPI Server)就是基于TSPI接口設計的,它直接驅動通信設備并通過與TAPI動態連接庫進行交互為應用程序提供電話服務,其總體結構示意圖如圖2所示。

詳解TAPI軟電話通信系統的模塊化設計

圖2 TAPI總體結構示意圖

3 TAPI的模塊化設計

本設計主要以C++類的設計思想,在MFC (微軟基礎類)的框架下實現對TAPI的封裝。由于TAPI的函數調用非常復雜,參數個數和形式多種多樣,為了便于系統集成和應用程序的開發,設計了3個控制類: TAPI應用控制類Tap iApp lication、TAPI線路控制類Tap iLine、TAPI通話控制類Tap iChannel.Tap iApplication是對整個TAPI的監控,是應用程序和通信設備的交互站; TapiL ine是對TAPI線路的管理,它根據應用指令操作線路通話; Tap iChannel是對具體一路通話的管理,它根據線路指令操作對應的通信設備并實時報告設備狀態,這3個類的調用關系如圖3所示。

詳解TAPI軟電話通信系統的模塊化設計

圖3 TAPI調用結構

首先需要TAPI的定義文件。由于TAPI與W indow s集成,定義文件在安裝好W indow s操作系統后就可以被找到。以C語言方式提供的TAPI. H和TAPI32. dll文件,包含了所有TAPI結構和功能的定義。如果使用C、VC或VB開發應用,只要在相關的開發環境中設置,將文件引入所要開發的應用項目即可;如果使用De lph i開發,需要將TAPI. H轉化為Delphi中的頭文件,再將這個pas文件引入即可;如果使用Java開發,需要TAPI的c lass文件。

該設計以VC的MFC為例對TAPI的功能進行模塊化實現,開發過程不需要通訊硬件的支持,調試和運行需要與通訊硬件交互,且該組件能很好的向上向下兼容。

 

3. 1 TAPI應用控制類設計

TapiA pplicat ion是對TAPI的管理,它處于調用結構的頂層,通過下層的服務為上層應用程序提供透明、規格化的信息服務。在通過TAPI進行遠程通信程序設計時,必不可少的是要調用lineIn itia lizeEx( )函數以初始化TAPI,以及調用lineOpen( )函數以打開線路,然后才能使用TAPI進行監控和代理呼叫等功能。除此之外,為了編寫可靠的遠程通信程序,還應調用有關檢測線路設備能力的函數lineGetDevC aps( ),檢測TAPI版本兼容性函數lineN egotiateAPIV ersion( ),檢測線路當前使用狀態的函數lineSetStatusM essages( )等以適應各種情況。最后調用lineC lose( )函數來關閉線路,調用lineShutdow n( )函數將應用程序與TAPI斷開。

為了使TAPI便于操縱,適應不同的應用開發環境,本文設計了In itia liseTAPI( )這個不要參數的初始化函數,把初始化和協商TAPI版本所需要的參數通過內聯機制進行整合,避免了過多的參數傳遞。初始化成功后表明應用程序已經獲得TAPI的數據結構和應用句柄。為了便于對通信設備的控制,需要和通信設備取得聯系并打開通信線路。本文設計了OpenValidL ines( )這個不加參數的函數,只要成功返回后就可以對通信線路、通信設備進行控制了,其函數聲明如下:

class T apiApplicat ion

{

pub lic:

Tap iApp lication( CTap isamp leD lg lg) ;

~ T apiApplicat ion( );

/ / TAPI helper funct ions

BOOL InitialiseTAPI( ) ; / / Initialize TAPI

void ShutdownTAPI( ); / /C lose TAPI

void OpenV alidL ines ( ) ; / /Open the lines o fTAPI

/ / Variab les

CTapisamp leD lg lg;

HLINEAPP m_hLineApp; / / App lication handle

DWORD m_NumDevs; / / Number of dev ices

DWORD * m _ ApiV ersions; / / API versions

PTAPILINE* m_pL ines; / / Device variables

LONG m _Curren tL ine; / / currently se lected

ADDRARRAY m_AddressA rray;

};

TAPI初始化工作和有效線路的打開這些復雜的功能,通過函數內置或全局變量傳遞,整合成一個不要參數并且返回值為布爾類型的API函數。應用程序只要調用這兩個函數就可以實現對TAPI設備的監控和操作。

3. 2 TAPI線路控制類設計


Tap iLine是對TAPI線路的管理,為了使程序的結構更為清晰和易于升級以及為了使TAPI能夠更方便的移植到別的應用程序中,把TAPI函數中用于實現功能的一部分函數和數據結構封裝成一個類來使用。下面就是通過V ISUALC + +編程實現對TAPI線路控制函數封裝類的頭文件。

class T apiL ine {

private:

TapiA pplicat ion ainA pp; / / paren t object

DWORD m _LineID; / / My index

HLINE m _ hL ine; / / M y line hand le typedef

CL ist

ExtensionLis;t m_extensionLis;t

/ / the list of call channe l

public:

TapiL ine( TapiApp licat ion

~ Tap iLine( ) ;

vo id OnEvent ( DWORD Device, DWORD Msg,

DWORD Param1, DWORD Param2, DWORD Param3);

HRESULT Open ( DWORD L ineID, DWORD

Ca llPr iv ilege, DWORD Med iaModes);

TapiChanne*l getChannel( DW dwAddressID);

TapiChanne*l getChanne lCall(HCALL hcall) ;

/ / Functions to support te lephony commands

BOOL M akeCa ll ( DWORD dwAddressID, LPCT??

STR pszA ddress) ;

vo id D ropCall( DWORD dwA ddressID) ;

vo idHo ldCall( DWORD dwA ddressID) ;

vo id UnholdC all( DWORD dwAddressID) ;

vo id B lindT ransferCa ll ( DWORD dwAddressID,

LPCTSTR pszAddress) ;

vo id R edirect ( DWORD dwAddressID, LPCTSTR

pszAddress) ;

vo id Ca llStatus( DWORD dwAddressID );

vo id Ca llInfo( DWORD dwA ddressID) ;

vo id Addressstatus( ) ;

};

TapiL ine通過復雜的參數傳遞機制,封裝了大量的內部變量,通過API接口以統一短消息的形式接收用戶指令同時返回線路的具體狀態。最終應用程序通過調用Tap iL ine的具體函數對整個線路進行操作、控制。

3. 3 TAPI通話控制類設計


TapiChanne l是對具體通話進行控制,呼叫是TAPI開發最常用的一個功能。調用Tap iL ine的M akeC all ( DWORD dwAddressID,LPCTSTR pszAddress),傳遞當前號碼和目標地址就可以進行撥打電話,把撥打電話的其他細節進行內部傳遞。當以上函數調用成功后,TSP就會控制通訊設備外呼指定的電話,該函數調用后會立刻返回到應用程序,但該電話是否成功撥通,則是依靠消息來判斷,包括TAPI的其他功能也是這樣的處理方式。其他常用的電話功能如接聽、掛斷、轉移、三方等都有對應的函數實現。

TAPI初始化成功后,應用程序就和TSP設備建立了聯系。應用程序就可以通過TAPI函數控制電話線路、監控線路狀態。函數lineOpen調用成功后進入消息循環,新生成的呼叫處于IDLE狀態,隨后根據狀態指令執行不同的操作。當調用lineM akeC all( )后,線路狀態進入D IAL ING、PROCEDING,當收到異步響應或者應答后進入呼叫狀態循環并依次進入CONNECTED和DISCONNECTED,最后回到初始化狀態。當有一路電話呼入時,線路狀態進入OFFER ING、自動調用lineAnsw er( )后進入ACCEPTED、PROCED ING,當收到異步響應或者應答后進入呼叫狀態循環并依次進入CONNECTED和D ISCONNECTED,最后回到初始化狀態,整個TAPI狀態圖如圖4所示。

詳解TAPI軟電話通信系統的模塊化設計

圖4 TAPI狀態機。

3. 4 TAPI的消息處理


line ln itia lizeEx函數中第3個參數傳入的參數是方法的地址,這個方法將處理通訊設備發出來的所有TAPI消息,這個方法必須按固定的格式定義:

vo id CALLBACK Tap iLineCa llback(

DWORD dwDev ice,

DWORD nM sg,

DWORD dw Instance,

DWORD dwParam1,

DWORD dwParam2,

DWORD dwParam3)

方法名TapiL ineC allback,可以自己定義,只要將此函數名作為參數傳入linelnitializeEx,該方法就可以工作,方法參數將由通訊設備的TSP來填寫,并傳給上層應用。關鍵是要了解在某時刻觸發此方法后,各參數值的意義以及此時收到此消息所表示的意義。要注意的是:即使完成一個最簡單的通話,都會得到許多TAPI消息,這些消息以時間順序產生,每產生一個消息,就會進入Tap iL ineCallback方法中,所以要抓住并處理關鍵消息。

以收到來電為例,主要處理2個消息。

( 1)參數dwMsg = LINE _ CALLSTATE并且dwParam:l LINECALLST _OFFER ING.此時可以把表示該來電的hDev ice保存到應用中,以便隨后的處理。

( 2)參數dwMsg= LINE _CALLINFO.此時通過TAPI函數lineG etCa lllnfo可以得到來電信息,例如來電主叫號碼、被叫號碼等。當收到來電消息后,就可以在界面上切換應用狀態以通知用戶,或記錄數據庫等,按需要進行處理。與來電消息類似,當有其他電話事件發生后,就會發生相應的消息。

雖然TAPI產品化的應用不多,但其提供的功能卻是強大的。TAPI主要用來控制通訊設備,在這個基礎上再實現更多的功能。曾經也有人用來實現控制家用普通Mode;l如果用于控制交換機,可以實現對來電排隊等高級功能;也可以建立企業呼叫中心。

研究了TAPI的工作流程,及TAPI功能模塊的實現,并對其函數進行了封裝設計處理。介紹了使用TAPI編寫電話控制程序的完整步驟,對TAPI在軟電話應用系統中的二次開發奠定了基礎。

相關文章

詳解用ARM和FPGA搭建神經網絡處理器通信方案

東芝兩種新工藝技術適用于微控制器和無線通信集成電路

一款OMRON PLC網絡與通信
文章評論

您需要登錄才可以對文章進行評論。

沒有賬號?立即注冊

相關資訊
更多
推薦元器件
更多
最新活動
意見反饋
取消