GVOS 8.2 SP1 (ADL)& CT ADE 结构
(三)
 

本文 [ 目录 ] [ 第一页 ] [ 第二页 ] [ 第三页 ]

7. CT ADE 体系结构(Topaz)介绍
  7.1.3. CTADE_A,路由
  7.1.4. CTADE_A,路由类型:全双工和半双工
  7.1.5. CTADE_A, 呼叫控制、挂机处理和挂断事件
  7.1.6. CTADE_Architecture技术
  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,路由

  许多电话操作需要两种资源共同工作。例如,向呼叫者播放一段语音要求使用媒体资源播放文件,使用中继资源建立与呼叫者的连接。中继资源必须侦听媒体资源的输出,这样呼叫者才能听到播放的文件,媒体资源应该侦听中继资源,这样才能处理呼叫者输入的数字。
  在大多情况下,用户不需明确地控制路由:缺省状态下,CTADE_A通过用户使用的函数将用户所需的资源路由到一起。例如,当播放一个文件时,CTADE_A确定当前媒体资源已经路由到了当前中继资源上。
  但用户可以替换Topaz的自动路由。
  看下面的一个例子:
  ·如果有一个媒体资源,MediaUse函数预留媒体资源并且将其路由到当前的中继资源上。
  ·缺省状态下,FaxUse函数预留一个与当前中继资源兼容的传真资源,并且将两者路由到一起。
  ·如果使用MediaPlayFile函数时还没有打开一个媒体资源,播放文件前,Topaz会保留一个媒体资源,并且把它路由到当前的中继资源,如果没有保留中继资源,Topaz在保留媒体资源前会先保留一个中继资源。
  ·向一个会议添加任何资源时,Topaz都会将两者路由到一起。
  然而,也可以调用下面的函数使自动路由失效:
  TopazDisableAutoRoute();
  可以调用下面的函数使自动路由重新有效:
  TopazEnableAutoRoute();

  7.1.4. CTADE_A,路由类型:全双工和半双工

  如果使用全双工连接,两种资源之间有双向的路由,如下图所示。每一种资源侦听其他资源的传输,典型的情况如媒体和中继设备之间的相互路由:

  然而,半双工中,只是一种资源侦听另一种资源:

  一个全双工连接函数TopazRoute(Res1, Index1, Res2, Index2)
  可以创建如第一个图所示的路由,资源2在侦听资源1,反过来,资源1也在侦听资源2。
  一个全双工路由相当于两个侦听命令。
  一个半双工连接如第二个图所示,资源2在侦听资源1,但反过来资源1没有侦听资源2(除非之前有路由命令使资源1侦听资源2)。

  7.1.5. CTADE_A, 呼叫控制、挂机处理和挂断事件


  挂断过程中有两个重要的问题:
  ·检测呼叫者何时挂断
  ·挂断时处理

  7.1.5.1.挂断检测

  挂断检测操作可以体现出Topaz API透明性的好处。因为当使用中继函数开发应用程序时,不需要考虑CTADE_A进行挂断检测的技术细节。
  当使用开发的应用程序时,可以使用相同的VOS代码,不用考虑系统,只需要改变一下Topaz的一下设置细节即可。

  7.1.5.2 挂断处理

  检测到呼叫者的挂断操作后,VOS在当前的p-code指令执行完后(可能正在语句和表达式执行中)停止运行,并将控制权交给onhangup函数。然后onhangup函数就会一种执行,直到遇见重启、返回或挂断结束(endhangup)的语句。如果遇见endhangup语句,效果与return语句相同,如果遇见return语句,程序返回到中断的语句继续执行,如果处理onhangup的过程中又有一个挂断事件发生,此事件将会被忽略。
  大多应用中,建议使用restart将控制权交回程序的开始,这样会使体系结构比较明确。
  如果挂断发生时正在执行象MediaPlayFile、MediaRecordFile或MediaWaitDigits等异步CTADE_A函数。VOS会中断函数,立即转到onhangup处理。
  如果挂断发生时只在执行其他的阻塞函数如sem_set或ser_rdbuf。VOS直到函数完成后再转到onhangup处理。
  TrunkDeferOnHangup函数和TrunkClearDeferOnHangup函数允许应用程序定义关键代码区,这些代码区不允许被onhangup处理函数中断。一个典型的例子就是一组数据库更新,一旦开始,必须完全接收。当有挂断事件时,TrunkDeferOnHangup函数后面的任何电话阻塞函数都将终止。控制权交给onhangup函数的操作被推迟,直到函数TrunkClearDeferOnHangup。
例:
    dec
    var res:5;
    enddec
    program
    res = arg(1);
    TrunkUse(res);
    TrunkWaitCall();
    …
    …
    TrunkDisconnect();
    restart;
    endprogram

    
onhangup
    TrunkDisconnect(),
    restart;
    endonhangup

  7.1.6. CTADE_Architecture技术

  CTADE_Architecture(Topaz)是为API的透明性设计的,即一套程序可以在所有的电话API和所支持的所有中继类型下运行。但某些特征只适用于某种技术,例如,GloblaCall系统发送记帐比率信息,但其他中继接口API不使用协议定义的记帐比率。所以,函数TrunkGetBilling不能提供R4GcTrunk技术到其他技术的接口,所以是不透明的。
  VOS提供了控制电话资源技术细节的函数,象TrunkGetInt一样,Get/Set函数可以操作特定的技术参数和API函数。
  Get/Set函数可以读取和设置CTADE_A中只应用于特殊技术的参数。
  Get函数,象MediaGetInt返回技术的布尔、字符串和整数参数,比如,要获取R4DxMedia资源当前的播放声音的大小,可以使用MediaGetInt函数和REGID_PlaySpeed RegID(702):
  Value = MediaGetInt(702);
  Set函数,象MediaSetInt可以设定技术参数,例如要设定R4DxMedia资源当前播放声音值为7,可以使用MediaSetInt函数和REGID_PlaySpeed(702):
  MediaSetInt(702, 7);

注意:
  必须注意,调用API级的函数设置一个CTADE_A参数可能不只改变电路板级的参数。例如,R4DxMedia中,使用函数MediaSetBool设置REGID_R4DxMediaDisableAllToneDetection(280)为0或1来清除Dialogic提示音ID。
  MediaSetBool(280, 0);
  此处函数MediaSetBool没有设置Board级的参数为0,此函数调用Dialogic的函数dx_deltones来删除以前在此通道上的用户定义提示音。
  要详细了解VOS中可用的函数和方法以及更多例子,参见Get/Set函数。
  可以从CTADE_A RegIDs中找到一系列可用的RegIDs。
  当前的CTADE_A技术如下:

  中继技术
  技术    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

  媒体技术
  技术    ID号码  描述
  SimMedia  2001   SimPhone Media
  R4DxMedia 2002   R4 dx_ API (aka VOX)
  S100Media 2003   S.100 CTplyr_/CTrcdr_ API
  WaveMedia 2004   Win32 Wave API

  传真技术
  技术   ID号码 描述
  R4FxFax 3001  R4 fx_ API
  R4GrtFax 3002  GammaLink fax
  S100Fax 3003  S.100 Fax

  会议技术
  技术   ID号码 描述
  R4MsConf 5001  R4 ms_ conference API
  R4DcbConf 5002   R4 dcb_ API
  S100Conf 5003  S.100 CTconf_ API

  例如,下面为R4DxMedia技术的一些(some3)RegId:
  R4DxMedia RegIDs

  7.1.7. CTADE_A 特征ID

  特征ID
  保存在Topaz 特征(Profile)中的一些描述系统细节的RegID称为特征ID。Profile的内容可以通过TopazProfile.exe -L命令来查看,Profile的内容产生一个包含文件,产生的文件中的每一项都代表一个特征(Profile)ID。
  可以通过适当的Get函数获得特征(profile)ID的值,例如,要查出是否支持ANI(呼叫者ID),可以使用函数TrunkGetBool 和REGID_ANISupported(301):
   Support = TrunkGetBool(301);
  Topaz Profile是类似于Windows注册表的一个数据库,是一个文件和目录树,包括以下信息:
  ·所有安装的硬件资源细节,由资源扫描器决定。
  ·用户提供的硬件配置信息,资源扫描器检查不到。
  ·用户可设的选项,象缺省的语言(英语、西班牙语… …)。
  运行的VOS应用程序把Profile当作只读来处理,这些程序开始运行前,Profile应该完全初始化。
  Topaz Profile中不包含任何动态改变的信息,象某一资源的状态等等。
  Profile中的各项,称为Profile ID,具有名字和值。某一项的名字与一个文件系统中的路径名相似。所有的名字从根段开始,以反斜线表示。比如,Topaz 代码内部使用的Profile ID如下:
   \Techs\TechCount
  TechCount的值是本PC机安装的不同的CTADE_A提示的数目(一个技术是指一个特定的硬件和相应的API函数,如DialogicR4 VOX)。
值分三种类型:整数,字符串和布尔值(True/False)。
常常可以看到如下的数值和名字:
    \Techs\TechCount=4
  一个Topaz 目录可以包含一些数值,象TechCount,也可以包含一个数值数组,名字相同,索引不同。(Topaz不允许在同一目录下既包含数组又包含非数组值)。如,\TechTypes
包含一个整数值的数组,\TechTypes[0],\TechTypes[1],…..最大的索引为TechCount-1。
  此例中数组可以包含连续的索引,或数组的索引可以不连续,比如,可以只有A[1]、A[16]和A[19]有值。如果数组的索引不连续,CTADE_A要求有一个索引连续的数组,其值为上个数组中有值的索引,如上例,可以有另一个数组B[0]=1,B[1]=16和B[2]=19.设计规则:CTADE_A
  不需要查询提供的第一个数组,但需要查找第二个数组的值以及指定数组大小的值。比如TechCount。这有助于提供系统的前向和后向的兼容性,并且提高资源扫描器改变时程序的健壮性。

  7.1.7.1. 更新Topaz Profile

  TopazProfile 数据库使用下面程序进行更新:
  C:\Program Files\Parity Software\Common\Topaz\Bin\TopazProfile.exe
  TopazProfile.exe是一个Win32平台的应用程序,有以下的选项:
  ·-S 扫描设备(删除Profile并且重新建立)
  ·-L 将Profile列入"TopazProfile.exe"
  ·-D 删除Profile
  ·-C<file> 从文件中向Profile拷贝关键字
  ·-I 与-C一样更新Profile,文件名取自"TOPAZ.INI"的[ProfileInclude Files]
部分。
  ·-F<file> 读取文件,标准输出
  ·-K 以整数值排列关键词(缺省以字母排列)
  创建和设置Topaz Profile文件
  与Windows注册表不同,用户的应用程序不能直接访问Profile,并且不能创建新的条目。Profile只能由Topaz在内部使用。
  完成下列设置后通过运行TopazProfile程序创建TopazProfile。
  缺省的情况下,TopazProfile安装在主机的系统盘:
  C:\Program Files\Parity Software\Common\Topaz\Profile
  为了Topaz能够运行,文件Topaz.ini的[Profile]部分必须指定Topaz Profile的路径。
  "通过在Topaz设置文件(Topaz.ini)和Profile包含文件中添加合适的条目,在Topaz Profile设置某种资源参数。"
  RegId和Get/Set函数
  Topaz通过在内部使用其他的RegID来操作技术级的信息。这些RegID不在Topaz Profile中,但可以通过Get/Set函数检索系统信息或执行一个技术级的命令。
  下列RegIDs用于Get/Set函数中。同时也列出了每种技术的特定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引擎时所要读取的各种设置参数。要改变Topaz.ini中的任何项时,必须确保这些变化生效时VOS和CallSuite的所有例程已全部关闭,因为这些例程使用Topaz。

  7.1.8.1 [Profile]部分

  Topaz.ini文件的Profile部分设定开始时控制Topaz Profile的参数
    [Profile]
    Path=e:\Program Files\Parity Software\Common\Topaz\Profile


  7.1.8.2. [ProfileIncludeFiles] 部分


  Topaz.ini文件的ProfileIncludeFiles部分列出了每次TopazProfile.exe运行时(使用Include选项)都要拷贝到Topaz Profile的文件。例:
    [ProfileIncludeFiles]
    C:\Topaz\LangRegs.tzp
    C:\Topaz\IPFRegs.tzp


  7.1.8.3. [ProfileExcludeTechnologies]部分

  Topaz.ini文件中的ProfileExcludeTechnologies部分列出了TopazProfile.exe自动扫描时排除的技术。 例:
    [ProfileExcludeTechnologies]
    S100Trunk
    S100Media


  7.1.8.4. [ProfileDependencies] 部分

  Topaz.ini文件的ProfileDependencies部分列出了TopazProfile.exe运行前必须启动的Windows NT/2000的服务程序。例:
    [ProfileDependencies]
    Alerter
    Dialogic

  7.1.8.5. [SimMediaScanner]部分

  Topaz.ini文件的SimMediaScanner部分指定了SimMedia使用的Wave IN和Wave Out 设备的ID。
    [SimMediaScanner]
    WaveIn=<Wave In ID>
    WaveOut=<Wave Out ID>

  缺省情况下,两个Wave ID都为0。例:
    [SimMediaScanner]
    WaveIn=1
    WaveOut=1

  7.1.8.6 [WaveScanner]部分

  Topaz.ini文件的WaveScanner部分指定了WaveMedia技术所使用的Wave IN和Wave Out 设备的ID。例:
    [WaveScanner]
    WaveDeviceID0=1,1


  7.1.8.7. [S100Groups] 部分


  Topaz.ini文件的S100Groups部分指定了应用程序所使用的S100组和相关的Topaz资源。
  S100Groops部分的缺省设置保存在[S100Defaults]部分中。例:
    [S100Groups]
    CCRGroups = 4
    withMedia
    ASI = CCRMEDIA_ASI


  7.1.8.8. [S100Defaults]部分


   Topaz.ini文件的S100Defaults部分指定S100Groups部分的缺省值,如果没有设定S100Defaults部分的关键词,Topaz使用标准的缺省设置。有效的关键词和相应的缺省值如下例所示: 例:
    [S100Defaults]
    Server = Default_Server
    AppProfile = Parity_TOPAZ_ProfileS100v2
    MakeCallGroupConfig =
    MakeCallGroupSet =
    SPRGroupConfig = SPRMEDIA_GROUPCONFIG
    SPRGroupSet = SPRMEDIA_GROUPSET
    SPROnlyGroupConfig = SPRONLY_GROUPCONFIG
    SPROnlyGroupSet = SPRONLY_GROUPSET


  MakeCallGroupSet、SPROnlyGroupSet和SPRGroupSet只用于CT Media版本V1。版本V2中被删除。
  此部分的详细描述参见S100Topaz.ini配置中此部分的描述和S100Groups部分。

  7.1.9CTADE_A. 提示音(Tones)

  此章中介绍如何产生和检测提示音。

  7.1.9.1 播放提示音


  Tones,也称为全程Tones或全局Tones,可以为以下4中类型:单音、双音、有步调的单音和有步调的双音。
  单音和双音
  单音只有一个幅度和频率,双音有两套幅度和频率。公众网中的大部分相似的声音,包括Touch-tones,都是双音。
  步调
  步调音有规则的步调,一段为音调,一段为静音。在美国,忙音采用步调音,步调如下所示:

  没有步调的音称为连续音,比如,摘机音是连续音。

  播放音调
  可以使用函数MediaPlaySingleContinuousTone播放一段连续音。
  MediaPlaySingleContinuousTone(Freq1, Amp1, Duration, StopTones);

  Freq1参数定义声音的频率,可在300到2000hz之间。Amp1定义声音的幅度,有效的范围为-40到2dB。Duration 参数指定声音的长度,以0.1秒为单位。StopTones参数是一个摘机音(touch tone)位的字符串,可以中断任何语音文件的播放和录制。
使用函数MediaPlayDualContinuousTone播放一段连续的双音:
  MediaPlayDualContinuousTone(Freq1, Amp1, Freq2, Amp2, Duration, StopTones);

  除了Freq2和Amp2这两个参数外,其他参数和函数MediaPlaySingleContinuousTone的参数相同,Freq2和Amp2指定双音第二部分的频率和幅度。
  播放步调音的函数与播放连续音的函数相同:
  MediaPlaySingleCadenceTone(Freq1, Amp1, OnTime, OffTime, Count, StopTones);
  MediaPlayDualCadenceTone(Freq1, Amp1, Freq2, Amp2, OnTime, OffTime, Count,
StopTones);

  除了参数Freq1、Amp1、Freq2和Amp2外,OnTime参数指定播放声音的时间长度,由0.1秒为单位表示,OffTime参数指定静音的时间长度,也由0.1秒为单位表示。Count参数指定了步调重复的次数。
  如果在Topaz Profile中指定了某一声音的参数,就可以在媒体资源中使用函数MediaPlayTone来播放:
  MediaPlayTone(ToneName, StopTones);
  参数ToneName必须与Topaz Profile中设置的声音名字一致,可选的StopTones参数指定停止音。

  7.1.9.2. Tone 包含文件

  tone包含文件以.TZP为扩展名,指定了CTADE_A直接支持的声音。
  注意:
  要从声音包含文件中向Topaz Profile中添加信息,必须使用TopazProfile.exe(使用Copy命令,-C)将Topwz Profile和包含的文件合并起来。为了保证每次CTADE_A启动时都合并最新的声音包含文件,可以使用函数TopazProfile.exe(使用Include选项,-I)向Topaz.ini文件的[ProfileIncludeFiles]部分添加一个索引。
  ToneCount
  ToneCount Profile ID指出需要定义的声音的数目,从0开始。

  ToneName
  VOS应用程序使用ToneName来确定播放哪一个声音。
  ToneType
  当前CTADE_A支持四种声音:
    SingleContinuous
    SingleCadence
    DualContinuous
    DualCadence
  这些种类声音的描述参见Playing Tones 部分。

  Freqencies(ToneFreq1,ToneFreq2)
  声音的频率在300Hz到2000Hz之间。

  Amplitudes(ToneAmp1,ToneAmp2)
  以分贝表示声音的幅度,有效幅度范围是:-40到2 dB。

  ToneOnTime
  ToneOnTime参数指定了播放步调声音时的声音时间长度,以0.1秒为单位。
  ToneOffTime
  ToneOffTime Profile ID定义了播放步调声音时静音的时间长度,以0.1秒为单位。

  ToneFreq1Var
  检测频率1时允许的误差,以Hz为单位。 ToneFreq2Var
  检测频率2时允许的误差,以Hz为单位。

  ToneOnTimeVar
  检测步调音时,"OnTime"所允许的误差,以0.1秒为单位。

  ToneOffTimeVar
  检测步调音时,"OffTime"所允许的误差,以0.1秒为单位。

  ToneRepetitions
  确定检测出步调音要求的步调音的重复次数。

  ToneChar
  ToneChar为声音分配一个字符(从E到Z)。自定义声音检测前,必须为声音分配一个字符。

  ToneIsBuffered
  ToneIsBuffered是一个布尔值,指出CTADE_A是否将声音字符放入数字缓冲,可以使用VOS函数MediaGetDigitBuffer来检索。

  例:
    \ToneCount=5
    \Tones[0]\ToneName=BUSY
    \Tones[0]\ToneType=DualCadence
    \Tones[0]\ToneFreq1=480
    \Tones[0]\ToneAmp1=-20
    \Tones[0]\ToneFreq2=620
    \Tones[0]\ToneAmp2=-20
    \Tones[0]\ToneOnTime=5
    \Tones[0]\ToneOffTime=5
    \Tones[1]\ToneName=DIAL
    \Tones[1]\ToneType=DualContinuous
    \Tones[1]\ToneFreq1=350
    \Tones[1]\ToneAmp1=-20
    \Tones[1]\ToneFreq2=440
    \Tones[1]\ToneAmp2=-20
    \Tones[2]\ToneName=TestTone
    \Tones[2]\ToneType=DualContinuous
    \Tones[2]\ToneFreq1=1209
    \Tones[2]\ToneFreq2=697
    \Tones[2]\ToneAmp1=-20
    \Tones[2]\ToneAmp2=-20
    \Tones[2]\ToneChar=T
    \Tones[2]\ToneIsBuffered=True
    \Tones[3]\ToneName=DISCONNECT
    \Tones[3]\ToneType=DualContinuous
    \Tones[3]\ToneFreq1=1477
    \Tones[3]\ToneFreq2=697
    \Tones[3]\ToneFreq1Var=50
    \Tones[3]\ToneFreq2Var=50
    \Tones[4]\ToneName=DISCONNECT2
    \Tones[4]\ToneType=DualCadence
    \Tones[4]\ToneFreq1=697
    \Tones[4]\ToneFreq2=1477
    \Tones[4]\ToneOnTime=10
    \Tones[4]\ToneOffTime=10
    \Tones[4]\ToneFreq1Var=50
    \Tones[4]\ToneFreq2Var=50
    \Tones[4]\ToneOnTimeVar=5
    \Tones[4]\ToneOffTimeVar=5
    \Tones[4]\ToneRepetitions=2

8. VOS 运行日志

  VOS运行时产生日志文件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


[ 全文英文版 ]

 

 

 

本文 [ 目录 ] [ 第一页 ] [ 第二页 ] [ 第三页 ]

融合通信专栏>>技术开发>>