7. CT ADE 體系結構(Topaz)介紹
7.1.3. CTADE_A,路由
7.1.4. CTADE_A,路由類(lèi)型:全雙工和半雙工
7.1.5. CTADE_A, 呼叫控制、掛機處理和掛斷事件
7.1.6. CTADE_Architecture技術(shù)
7.1.7. CTADE_A 特征ID
7.1.8. CTADE_A. 設置,TOPAZ.INI
7.1.9CTADE_A. 提示音(Tones)
8. VOS 運行日志
7. CT ADE 體系結構(Topaz)介紹 7.1.3. CTADE_A,路由
許多電話(huà)操作需要兩種資源共同工作。例如,向呼叫者播放一段語(yǔ)音要求使用媒體資源播放文件,使用中繼資源建立與呼叫者的連接。中繼資源必須偵聽(tīng)媒體資源的輸出,這樣呼叫者才能聽(tīng)到播放的文件,媒體資源應該偵聽(tīng)中繼資源,這樣才能處理呼叫者輸入的數字。
在大多情況下,用戶(hù)不需明確地控制路由:缺省狀態(tài)下,CTADE_A通過(guò)用戶(hù)使用的函數將用戶(hù)所需的資源路由到一起。例如,當播放一個(gè)文件時(shí),CTADE_A確定當前媒體資源已經(jīng)路由到了當前中繼資源上。
但用戶(hù)可以替換Topaz的自動(dòng)路由。
看下面的一個(gè)例子:
·如果有一個(gè)媒體資源,MediaUse函數預留媒體資源并且將其路由到當前的中繼資源上。
·缺省狀態(tài)下,FaxUse函數預留一個(gè)與當前中繼資源兼容的傳真資源,并且將兩者路由到一起。
·如果使用MediaPlayFile函數時(shí)還沒(méi)有打開(kāi)一個(gè)媒體資源,播放文件前,Topaz會(huì )保留一個(gè)媒體資源,并且把它路由到當前的中繼資源,如果沒(méi)有保留中繼資源,Topaz在保留媒體資源前會(huì )先保留一個(gè)中繼資源。
·向一個(gè)會(huì )議添加任何資源時(shí),Topaz都會(huì )將兩者路由到一起。
然而,也可以調用下面的函數使自動(dòng)路由失效:
TopazDisableAutoRoute();
可以調用下面的函數使自動(dòng)路由重新有效:
TopazEnableAutoRoute();
7.1.4. CTADE_A,路由類(lèi)型:全雙工和半雙工
如果使用全雙工連接,兩種資源之間有雙向的路由,如下圖所示。每一種資源偵聽(tīng)其他資源的傳輸,典型的情況如媒體和中繼設備之間的相互路由:

然而,半雙工中,只是一種資源偵聽(tīng)另一種資源:

一個(gè)全雙工連接函數TopazRoute(Res1, Index1,
Res2, Index2)
可以創(chuàng )建如第一個(gè)圖所示的路由,資源2在偵聽(tīng)資源1,反過(guò)來(lái),資源1也在偵聽(tīng)資源2。
一個(gè)全雙工路由相當于兩個(gè)偵聽(tīng)命令。
一個(gè)半雙工連接如第二個(gè)圖所示,資源2在偵聽(tīng)資源1,但反過(guò)來(lái)資源1沒(méi)有偵聽(tīng)資源2(除非之前有路由命令使資源1偵聽(tīng)資源2)。
7.1.5. CTADE_A, 呼叫控制、掛機處理和掛斷事件
掛斷過(guò)程中有兩個(gè)重要的問(wèn)題:
·檢測呼叫者何時(shí)掛斷
·掛斷時(shí)處理
7.1.5.1.掛斷檢測
掛斷檢測操作可以體現出Topaz API透明性的好處。因為當使用中繼函數開(kāi)發(fā)應用程序時(shí),不需要考慮CTADE_A進(jìn)行掛斷檢測的技術(shù)細節。
當使用開(kāi)發(fā)的應用程序時(shí),可以使用相同的VOS代碼,不用考慮系統,只需要改變一下Topaz的一下設置細節即可。
7.1.5.2 掛斷處理
檢測到呼叫者的掛斷操作后,VOS在當前的p-code指令執行完后(可能正在語(yǔ)句和表達式執行中)停止運行,并將控制權交給onhangup函數。然后onhangup函數就會(huì )一種執行,直到遇見(jiàn)重啟、返回或掛斷結束(endhangup)的語(yǔ)句。如果遇見(jiàn)endhangup語(yǔ)句,效果與return語(yǔ)句相同,如果遇見(jiàn)return語(yǔ)句,程序返回到中斷的語(yǔ)句繼續執行,如果處理onhangup的過(guò)程中又有一個(gè)掛斷事件發(fā)生,此事件將會(huì )被忽略。
大多應用中,建議使用restart將控制權交回程序的開(kāi)始,這樣會(huì )使體系結構比較明確。
如果掛斷發(fā)生時(shí)正在執行象MediaPlayFile、MediaRecordFile或MediaWaitDigits等異步CTADE_A函數。VOS會(huì )中斷函數,立即轉到onhangup處理。
如果掛斷發(fā)生時(shí)只在執行其他的阻塞函數如sem_set或ser_rdbuf。VOS直到函數完成后再轉到onhangup處理。
TrunkDeferOnHangup函數和TrunkClearDeferOnHangup函數允許應用程序定義關(guān)鍵代碼區,這些代碼區不允許被onhangup處理函數中斷。一個(gè)典型的例子就是一組數據庫更新,一旦開(kāi)始,必須完全接收。當有掛斷事件時(shí),TrunkDeferOnHangup函數后面的任何電話(huà)阻塞函數都將終止。控制權交給onhangup函數的操作被推遲,直到函數TrunkClearDeferOnHangup。
例:
7.1.6. CTADE_Architecture技術(shù)
CTADE_Architecture(Topaz)是為API的透明性設計的,即一套程序可以在所有的電話(huà)API和所支持的所有中繼類(lèi)型下運行。但某些特征只適用于某種技術(shù),例如,GloblaCall系統發(fā)送記帳比率信息,但其他中繼接口A(yíng)PI不使用協(xié)議定義的記帳比率。所以,函數TrunkGetBilling不能提供R4GcTrunk技術(shù)到其他技術(shù)的接口,所以是不透明的。
VOS提供了控制電話(huà)資源技術(shù)細節的函數,象TrunkGetInt一樣,Get/Set函數可以操作特定的技術(shù)參數和API函數。
Get/Set函數可以讀取和設置CTADE_A中只應用于特殊技術(shù)的參數。
Get函數,象MediaGetInt返回技術(shù)的布爾、字符串和整數參數,比如,要獲取R4DxMedia資源當前的播放聲音的大小,可以使用MediaGetInt函數和REGID_PlaySpeed
RegID(702):
Value = MediaGetInt(702);
Set函數,象MediaSetInt可以設定技術(shù)參數,例如要設定R4DxMedia資源當前播放聲音值為7,可以使用MediaSetInt函數和REGID_PlaySpeed(702):
MediaSetInt(702, 7);
注意:
必須注意,調用API級的函數設置一個(gè)CTADE_A參數可能不只改變電路板級的參數。例如,R4DxMedia中,使用函數MediaSetBool設置REGID_R4DxMediaDisableAllToneDetection(280)為0或1來(lái)清除Dialogic提示音ID。
MediaSetBool(280, 0);
此處函數MediaSetBool沒(méi)有設置Board級的參數為0,此函數調用Dialogic的函數dx_deltones來(lái)刪除以前在此通道上的用戶(hù)定義提示音。
要詳細了解VOS中可用的函數和方法以及更多例子,參見(jiàn)Get/Set函數。
可以從CTADE_A RegIDs中找到一系列可用的RegIDs。
當前的CTADE_A技術(shù)如下:
中繼技術(shù)
技術(shù) ID號碼 描述
SimTrunk 1001 SimPhone Trunk
R4AgTrunk 1002 R4 ag_ / dx_ API (aka LSI)
R4GcTrunk 1003 R4 gc_ API
S100Trunk 1005 S.100 CTscr_ API
R4MsTrunk 1006 R4 ms_ station API
媒體技術(shù)
技術(shù) ID號碼 描述
SimMedia 2001 SimPhone Media
R4DxMedia 2002 R4 dx_ API (aka VOX)
S100Media 2003 S.100 CTplyr_/CTrcdr_ API
WaveMedia 2004 Win32 Wave API
傳真技術(shù)
技術(shù) ID號碼 描述
R4FxFax 3001 R4 fx_ API
R4GrtFax 3002 GammaLink fax
S100Fax 3003 S.100 Fax
會(huì )議技術(shù)
技術(shù) ID號碼 描述
R4MsConf 5001 R4 ms_ conference API
R4DcbConf 5002 R4 dcb_ API
S100Conf 5003 S.100 CTconf_ API
例如,下面為R4DxMedia技術(shù)的一些(some3)RegId:
R4DxMedia RegIDs

7.1.7. CTADE_A 特征ID
特征ID
保存在Topaz 特征(Profile)中的一些描述系統細節的RegID稱(chēng)為特征ID。Profile的內容可以通過(guò)TopazProfile.exe
-L命令來(lái)查看,Profile的內容產(chǎn)生一個(gè)包含文件,產(chǎn)生的文件中的每一項都代表一個(gè)特征(Profile)ID。
可以通過(guò)適當的Get函數獲得特征(profile)ID的值,例如,要查出是否支持ANI(呼叫者ID),可以使用函數TrunkGetBool
和REGID_ANISupported(301):
Support = TrunkGetBool(301);
Topaz Profile是類(lèi)似于Windows注冊表的一個(gè)數據庫,是一個(gè)文件和目錄樹(shù),包括以下信息:
·所有安裝的硬件資源細節,由資源掃描器決定。
·用戶(hù)提供的硬件配置信息,資源掃描器檢查不到。
·用戶(hù)可設的選項,象缺省的語(yǔ)言(英語(yǔ)、西班牙語(yǔ)… …)。
運行的VOS應用程序把Profile當作只讀來(lái)處理,這些程序開(kāi)始運行前,Profile應該完全初始化。
Topaz Profile中不包含任何動(dòng)態(tài)改變的信息,象某一資源的狀態(tài)等等。
Profile中的各項,稱(chēng)為Profile ID,具有名字和值。某一項的名字與一個(gè)文件系統中的路徑名相似。所有的名字從根段開(kāi)始,以反斜線(xiàn)表示。比如,Topaz
代碼內部使用的Profile ID如下:
\Techs\TechCount
TechCount的值是本PC機安裝的不同的CTADE_A提示的數目(一個(gè)技術(shù)是指一個(gè)特定的硬件和相應的API函數,如DialogicR4
VOX)。
值分三種類(lèi)型:整數,字符串和布爾值(True/False)。
常常可以看到如下的數值和名字:
\Techs\TechCount=4
一個(gè)Topaz 目錄可以包含一些數值,象TechCount,也可以包含一個(gè)數值數組,名字相同,索引不同。(Topaz不允許在同一目錄下既包含數組又包含非數組值)。如,\TechTypes
包含一個(gè)整數值的數組,\TechTypes[0],\TechTypes[1],…..最大的索引為T(mén)echCount-1。
此例中數組可以包含連續的索引,或數組的索引可以不連續,比如,可以只有A[1]、A[16]和A[19]有值。如果數組的索引不連續,CTADE_A要求有一個(gè)索引連續的數組,其值為上個(gè)數組中有值的索引,如上例,可以有另一個(gè)數組B[0]=1,B[1]=16和B[2]=19.設計規則:CTADE_A
不需要查詢(xún)提供的第一個(gè)數組,但需要查找第二個(gè)數組的值以及指定數組大小的值。比如TechCount。這有助于提供系統的前向和后向的兼容性,并且提高資源掃描器改變時(shí)程序的健壯性。
7.1.7.1. 更新Topaz Profile
TopazProfile 數據庫使用下面程序進(jìn)行更新:
C:\Program Files\Parity Software\Common\Topaz\Bin\TopazProfile.exe
TopazProfile.exe是一個(gè)Win32平臺的應用程序,有以下的選項:
·-S 掃描設備(刪除Profile并且重新建立)
·-L 將Profile列入"TopazProfile.exe"
·-D 刪除Profile
·-C<file> 從文件中向Profile拷貝關(guān)鍵字
·-I 與-C一樣更新Profile,文件名取自"TOPAZ.INI"的[ProfileInclude
Files]
部分。
·-F<file> 讀取文件,標準輸出
·-K 以整數值排列關(guān)鍵詞(缺省以字母排列)
創(chuàng )建和設置Topaz Profile文件
與Windows注冊表不同,用戶(hù)的應用程序不能直接訪(fǎng)問(wèn)Profile,并且不能創(chuàng )建新的條目。Profile只能由Topaz在內部使用。
完成下列設置后通過(guò)運行TopazProfile程序創(chuàng )建TopazProfile。
缺省的情況下,TopazProfile安裝在主機的系統盤(pán):
C:\Program Files\Parity Software\Common\Topaz\Profile
為了Topaz能夠運行,文件Topaz.ini的[Profile]部分必須指定Topaz
Profile的路徑。
"通過(guò)在Topaz設置文件(Topaz.ini)和Profile包含文件中添加合適的條目,在Topaz
Profile設置某種資源參數。"
RegId和Get/Set函數
Topaz通過(guò)在內部使用其他的RegID來(lái)操作技術(shù)級的信息。這些RegID不在Topaz
Profile中,但可以通過(guò)Get/Set函數檢索系統信息或執行一個(gè)技術(shù)級的命令。
下列RegIDs用于Get/Set函數中。同時(shí)也列出了每種技術(shù)的特定RegID。
看下列RegsID:
7.1.7.2Topaz RegID:R4AgTrunk

7.1.7.3
7.1.7.4 Topaz RegID:R4DxMedia


7.1.7.5 Topaz RegID:R4GcTrunk


7.1.7.6 Topaz RegID:R4MsTrunk

7.1.7.7. Topaz RegIDs: S100Conf

7.1.7.8. Topaz RegIDs:S100Fax

7.1.7.9. Topaz RegID:S100Media

7.1.8. CTADE_A. 設置,TOPAZ.INI
Topaz.ini文件設定系統首次Topaz引擎時(shí)所要讀取的各種設置參數。要改變Topaz.ini中的任何項時(shí),必須確保這些變化生效時(shí)VOS和CallSuite的所有例程已全部關(guān)閉,因為這些例程使用Topaz。
7.1.8.1 [Profile]部分
Topaz.ini文件的Profile部分設定開(kāi)始時(shí)控制Topaz Profile的參數
7.1.8.2. [ProfileIncludeFiles] 部分
Topaz.ini文件的ProfileIncludeFiles部分列出了每次TopazProfile.exe運行時(shí)(使用Include選項)都要拷貝到Topaz
Profile的文件。例:
7.1.8.3. [ProfileExcludeTechnologies]部分
Topaz.ini文件中的ProfileExcludeTechnologies部分列出了TopazProfile.exe自動(dòng)掃描時(shí)排除的技術(shù)。
例:
7.1.8.4. [ProfileDependencies] 部分
Topaz.ini文件的ProfileDependencies部分列出了TopazProfile.exe運行前必須啟動(dòng)的Windows
NT/2000的服務(wù)程序。例:
7.1.8.5. [SimMediaScanner]部分
Topaz.ini文件的SimMediaScanner部分指定了SimMedia使用的Wave
IN和Wave Out 設備的ID。
缺省情況下,兩個(gè)Wave ID都為0。例:
7.1.8.6 [WaveScanner]部分
Topaz.ini文件的WaveScanner部分指定了WaveMedia技術(shù)所使用的Wave
IN和Wave Out 設備的ID。例:
7.1.8.7. [S100Groups] 部分
Topaz.ini文件的S100Groups部分指定了應用程序所使用的S100組和相關(guān)的Topaz資源。
S100Groops部分的缺省設置保存在[S100Defaults]部分中。例:
7.1.8.8. [S100Defaults]部分
Topaz.ini文件的S100Defaults部分指定S100Groups部分的缺省值,如果沒(méi)有設定S100Defaults部分的關(guān)鍵詞,Topaz使用標準的缺省設置。有效的關(guān)鍵詞和相應的缺省值如下例所示:
例:
MakeCallGroupSet、SPROnlyGroupSet和SPRGroupSet只用于CT
Media版本V1。版本V2中被刪除。
此部分的詳細描述參見(jiàn)S100Topaz.ini配置中此部分的描述和S100Groups部分。
7.1.9CTADE_A. 提示音(Tones)
此章中介紹如何產(chǎn)生和檢測提示音。
7.1.9.1 播放提示音
Tones,也稱(chēng)為全程Tones或全局Tones,可以為以下4中類(lèi)型:?jiǎn)我簟㈦p音、有步調的單音和有步調的雙音。
單音和雙音
單音只有一個(gè)幅度和頻率,雙音有兩套幅度和頻率。公眾網(wǎng)中的大部分相似的聲音,包括Touch-tones,都是雙音。
步調
步調音有規則的步調,一段為音調,一段為靜音。在美國,忙音采用步調音,步調如下所示:

沒(méi)有步調的音稱(chēng)為連續音,比如,摘機音是連續音。
播放音調
可以使用函數MediaPlaySingleContinuousTone播放一段連續音。
MediaPlaySingleContinuousTone(Freq1,
Amp1, Duration, StopTones);
Freq1參數定義聲音的頻率,可在300到2000hz之間。Amp1定義聲音的幅度,有效的范圍為-40到2dB。Duration
參數指定聲音的長(cháng)度,以0.1秒為單位。StopTones參數是一個(gè)摘機音(touch tone)位的字符串,可以中斷任何語(yǔ)音文件的播放和錄制。
使用函數MediaPlayDualContinuousTone播放一段連續的雙音:
MediaPlayDualContinuousTone(Freq1, Amp1,
Freq2, Amp2, Duration, StopTones);
除了Freq2和Amp2這兩個(gè)參數外,其他參數和函數MediaPlaySingleContinuousTone的參數相同,Freq2和Amp2指定雙音第二部分的頻率和幅度。
播放步調音的函數與播放連續音的函數相同:
MediaPlaySingleCadenceTone(Freq1, Amp1,
OnTime, OffTime, Count, StopTones);
MediaPlayDualCadenceTone(Freq1, Amp1,
Freq2, Amp2, OnTime, OffTime, Count,
StopTones);
除了參數Freq1、Amp1、Freq2和Amp2外,OnTime參數指定播放聲音的時(shí)間長(cháng)度,由0.1秒為單位表示,OffTime參數指定靜音的時(shí)間長(cháng)度,也由0.1秒為單位表示。Count參數指定了步調重復的次數。
如果在Topaz Profile中指定了某一聲音的參數,就可以在媒體資源中使用函數MediaPlayTone來(lái)播放:
MediaPlayTone(ToneName, StopTones);
參數ToneName必須與Topaz Profile中設置的聲音名字一致,可選的StopTones參數指定停止音。
7.1.9.2. Tone 包含文件
tone包含文件以.TZP為擴展名,指定了CTADE_A直接支持的聲音。
注意:
要從聲音包含文件中向Topaz Profile中添加信息,必須使用TopazProfile.exe(使用Copy命令,-C)將Topwz
Profile和包含的文件合并起來(lái)。為了保證每次CTADE_A啟動(dòng)時(shí)都合并最新的聲音包含文件,可以使用函數TopazProfile.exe(使用Include選項,-I)向Topaz.ini文件的[ProfileIncludeFiles]部分添加一個(gè)索引。
ToneCount
ToneCount Profile ID指出需要定義的聲音的數目,從0開(kāi)始。
ToneName
VOS應用程序使用ToneName來(lái)確定播放哪一個(gè)聲音。
ToneType
當前CTADE_A支持四種聲音:
SingleContinuous
SingleCadence
DualContinuous
DualCadence
這些種類(lèi)聲音的描述參見(jiàn)Playing Tones 部分。
Freqencies(ToneFreq1,ToneFreq2)
聲音的頻率在300Hz到2000Hz之間。
Amplitudes(ToneAmp1,ToneAmp2)
以分貝表示聲音的幅度,有效幅度范圍是:-40到2 dB。
ToneOnTime
ToneOnTime參數指定了播放步調聲音時(shí)的聲音時(shí)間長(cháng)度,以0.1秒為單位。
ToneOffTime
ToneOffTime Profile ID定義了播放步調聲音時(shí)靜音的時(shí)間長(cháng)度,以0.1秒為單位。
ToneFreq1Var
檢測頻率1時(shí)允許的誤差,以Hz為單位。 ToneFreq2Var
檢測頻率2時(shí)允許的誤差,以Hz為單位。
ToneOnTimeVar
檢測步調音時(shí),"OnTime"所允許的誤差,以0.1秒為單位。
ToneOffTimeVar
檢測步調音時(shí),"OffTime"所允許的誤差,以0.1秒為單位。
ToneRepetitions
確定檢測出步調音要求的步調音的重復次數。
ToneChar
ToneChar為聲音分配一個(gè)字符(從E到Z)。自定義聲音檢測前,必須為聲音分配一個(gè)字符。
ToneIsBuffered
ToneIsBuffered是一個(gè)布爾值,指出CTADE_A是否將聲音字符放入數字緩沖,可以使用VOS函數MediaGetDigitBuffer來(lái)檢索。
例:
8. VOS 運行日志
VOS運行時(shí)產(chǎn)生日志文件VOS1.log和VOS2.log。最新的日志總在VOS1.log文件中。這些文件的內容如下:
Start of run
010518 172034.35 VOS loaded from C:\Program Files\Parity
Software\Graphical
VOS\Bin\Vos7d.dll
010518 172034.35 VOS 7 (Debug) Built Apr 4 2001
13:43:51
End of run
010518 172038.05 CASEST~1:062b[0] VOS 7 (Debug)
Built Apr 4 2001 13:43:51
010518 172038.05 CASEST~1:062b[0] Stopping: exit(21)
Warnings, Failures, and Errors
010518 172036.14 @W 713 RLL Adorll missing, wrong
version or loaded in wrong order
010518 172036.17 CASEST~1:149b[0] @F fil_open(LOGO,r):
088 error 2
010518 172037.91 CASEST~1:0606[0] @E CADOConn
'Open' : Films : COM Error
0x80004005(Unspecified error ) : _Connection::Open()
010518 172037.91 CASEST~1:0606[0] Source = Microsoft
OLE DB Provider for ODBC
Drivers
010518 172037.91 CASEST~1:0606[0] Description
= [Microsoft][ODBC Microsft
Access Driver] Could not find file '(unknown)'.
Builtin function calls
010518 172036.15 CASEST~1:004b[0] @B getpid()
= 0
Driver / API
010727 164728.19 @D ATDX_TERMMSK(1[dxxxB1C1])=0x0
010727 164728.19 @D Dev 1 dxxxB1C1 Evt 0x86 Data
0x15b9350 CST Data 0x0 Rings received
010727 164728.19 @D ATDX_TERMMSK(1[dxxxB1C1])=0x0
Topaz Events / States
010727 164728.19 CASEST~2:0017[1] @Y Trunk:0 Event
dxxxB1C1[1] 134 CST Data 0x0 Rings
received
010727 164728.19 CASEST~2:0017[1] @Z Trunk:0 Idle->InboundRinging
(1)
010727 164728.19 ResumeTask(1, 1)
010727 164728.27 CASEST~2:001f[1] @D dx_sethook(1[dxxxB1C1],
1, EV_ASYNC)=0
010727 164728.27 CASEST~2:001f[1] @B TrunkAnswerCall()
= 1
[ 全文英文版 ]
|