www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]研究了TAPI的工作流程, 及TAPI功能模塊的實現(xiàn), 并對其函數(shù)進行了封裝設(shè)計處理。介紹了使用TAPI編寫電話控制程序的完整步驟, 對TAPI在軟電話應(yīng)用系統(tǒng)中的二次開發(fā)奠定了基礎(chǔ)。

 1 引 言

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

  計算機技術(shù)使得電話有軟件化趨向, 其優(yōu)勢是使電話可以變得靈活, 方便地按具體要求實現(xiàn)電話的基本功能以及附加功能。軟電話需要和通信硬件設(shè)備交互, 目前主要有兩種實現(xiàn)方法: 一是利用電腦板卡和設(shè)備公司提供的DLL來實現(xiàn), 但功能有一定的局限性; 二是利用協(xié)議公開的標(biāo)準(zhǔn)編程接口, 但難度大, 參數(shù)復(fù)雜不易實現(xiàn)。本設(shè)計利用標(biāo)準(zhǔn)編程接口TAPI, 為了便于系統(tǒng)的集成和開發(fā), 重點介紹以統(tǒng)一短消息的形式實現(xiàn)應(yīng)用系統(tǒng)和通信設(shè)備之間交互的TAPI模塊化設(shè)計方法。該模塊化組件與系統(tǒng)集成度高, 可以方便的實現(xiàn)各種電話與控制功能。

  2 TAPI作用及結(jié)構(gòu)分析

  2. 1 TAPI在軟電話系統(tǒng)中的作用

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

圖1 軟交換系統(tǒng)

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

  2. 2 TAPI的結(jié)構(gòu)分析

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

圖2 TAPI總體結(jié)構(gòu)示意圖

  3 TAPI的模塊化設(shè)計

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

圖3 TAPI調(diào)用結(jié)構(gòu)

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

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

  3. 1 TAPI應(yīng)用控制類設(shè)計

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

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

  class T apiApplicat ion

  {

  pub lic:

  Tap iApp lication( CTap isamp leD lg&D 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&m_D 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初始化工作和有效線路的打開這些復(fù)雜的功能, 通過函數(shù)內(nèi)置或全局變量傳遞, 整合成一個不要參數(shù)并且返回值為布爾類型的API函數(shù)。應(yīng)用程序只要調(diào)用這兩個函數(shù)就可以實現(xiàn)對TAPI設(shè)備的監(jiān)控和操作。

  3. 2 TAPI線路控制類設(shè)計

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

  class T apiL ine {

  private:

  TapiA pplicat ion&m_m ainA pp; / / paren t object

  DWORD m _LineID; / / My index

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

  CL ist< Tap iChanne*l , Tap iChanne*l >

  ExtensionLis;t m_extensionLis;t

  / / the list of call channe l

  public:

  TapiL ine( TapiApp licat ion&mainApp);

  ~ 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通過復(fù)雜的參數(shù)傳遞機制, 封裝了大量的內(nèi)部變量, 通過API接口以統(tǒng)一短消息的形式接收用戶指令同時返回線路的具體狀態(tài)。最終應(yīng)用程序通過調(diào)用Tap iL ine的具體函數(shù)對整個線路進行操作、控制。

  3. 3 TAPI通話控制類設(shè)計

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

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

圖4 TAPI狀態(tài)機。

  3. 4 TAPI的消息處理

  line ln itia lizeEx函數(shù)中第3個參數(shù)傳入的參數(shù)是方法的地址, 這個方法將處理通訊設(shè)備發(fā)出來的所有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, 可以自己定義, 只要將此函數(shù)名作為參數(shù)傳入linelnitializeEx, 該方法就可以工作, 方法參數(shù)將由通訊設(shè)備的TSP 來填寫,并傳給上層應(yīng)用。關(guān)鍵是要了解在某時刻觸發(fā)此方法后, 各參數(shù)值的意義以及此時收到此消息所表示的意義。要注意的是: 即使完成一個最簡單的通話,都會得到許多TAPI消息, 這些消息以時間順序產(chǎn)生, 每產(chǎn)生一個消息, 就會進入Tap iL ineCallback方法中, 所以要抓住并處理關(guān)鍵消息。

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

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

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

  4 結(jié)束語

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

  研究了TAPI的工作流程, 及TAPI功能模塊的實現(xiàn), 并對其函數(shù)進行了封裝設(shè)計處理。介紹了使用TAPI編寫電話控制程序的完整步驟, 對TAPI在軟電話應(yīng)用系統(tǒng)中的二次開發(fā)奠定了基礎(chǔ)。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉