Created by 董舒, last modified by Dario.hu on 2021 五月 21
请确认一下几点:
1) 你已经安装了所有必备的包和内核源码.
2) 内核源码的版本和内核的版本完全一样.
请参考一下网站:
http://www.asteriskguru.com/tutorials/
3) 你没有缺少asterisk和zaptel的任何包和文件.
4) 你的系统能访问www.asterisk.org这个网站.
请从以下几点核查:
1) 用命令lspci -vvvvv, 确定系统能检测到我们的卡. Tiger jet chip 能被找到. 如果没有Tiger jet chip, 请清扫PCI插槽,再重新试一次命令lspci -vvvvv.
2) 如果用lspci能找到卡, 请确定pci id是在我们的驱动的PCI表里面. 修复pci id,
3) 如果步骤一和步骤二都正常,请检查配置文件zaptel.conf 和 system.conf 确定相关的设置是正确的.
4) 如果步骤3正常, 请确定系统里没有mISDN tiger jet 模块, 如果系统里有这个模块,请把它去掉.
5) 如果你还是不能让它启动, 你必须重新编译zaptel 或者 dahdi.
不能打电话,有一些原因:
1) 在asterisk里面检查 extensions , 确定sip电话注册好了,SIP电话里的context要和 extensions.conf里的context一致。
2) 你的wctdm 或者 opvxa1200没有启动(灯没亮).
3) leds are up and card driver has boot up properly, but the zapata.conf is, so asterisk does not boot up properly,
请通过命令: zap show channels检查
如果结果是空的或者没有这个命令, 你应该检查zapata.conf配置文件。
4) 你可能要重新编译 zaptel和 asterisk.
你可以编辑zapata.conf 这个配置文件,设置 rxgain=5 txgain=6 或者其它值. 你可以用ztmonitor进行测试,参考下面的网站 :
http://linux.die.net/man/8/ztmonitor
请从以下几点查看:
1) 根据你所在的国家设置timezone和defaulzone,在文件/etc/asterisk/indication.conf里设置country=your country并加上如下命令: modprobe wctdm/opvxa1200 opermode=YOUR country
2) 设置busydetect=yes以及busycount=4
3) 要求你的服务提供商打开"disconnect supervision"服务 查看更详细的做法,请登入以下网站:
http://www.asteriskguru.com/tutorials/resolving_hangup_detection_problems_fxo_tdm_voicemail.html
模拟卡的callerid检测问题 如果zaptel dtmf检测问题里的方法都试过还是没有效果的话,可以尝试修改一处asterisk源码,具体步骤如下:
1. vi asterisk/main/dsp.c
2. 找到#ifdef RADIO_RELAX ,在这句上面添加一句: #define RADIO_RELAX //by MiaoLin
3. 重新编译asterisk
4. 手动加载驱动时添加参数
modprobe opvxa1200(或wctdm) cidbeforering=1 opermode=CHINA
请参考digium的TDM电话中断解决方法:
如果你在使用TDM400P卡或者X100P卡时,发生电话中断,可能有以下原因.
1)BusyDetect
2)CallProgress
BusyDetect和CallProgress可能会导致Asterisk错误的检测电话挂断. 把BusyCount设置为一个更大的值,或者关掉CallProgress,可能能解决这个问题. 过量的IRQ缺失也有可能会导致这些问题的出现.
参考这个网站:http://kb.digium.com/entry/71/
3) 设置
/etc/modprobe.conf试试看,安装wctdm:
install wctdm /sbin/modprobe --ignore-install wctdm battdebounce=128 && /sbin/ztcfg
为了根据你所在的国家标准,设置模拟语音卡,你必须做到以下几点:
1) 在zaptel.conf 文件里或者dahdi的system.conf 文件里设置你所在国家的timezone和defaultzone
2) 在indication.conf文件里设置country=your country
3) 加载wctdm 或者opvxa1200 opermode=YOUR country(用大写字母).
4) 读opermode确认参量已经被加载了
[root@bogon misc]# cat /sys/module/wctdm/parameters/opermode
CHINA
[root@bogon misc]#
如果用opvxa1200, 请按下面的命令执行:
cat /sys/module/opvxa1200/parameters/opermode
5) 加载了驱动之后,运行dmesg命令去检查这个mode.
1) 你可以在/etc/asterisk下编辑配置文件logger.conf
去掉debug 或error的注释,这些消息会被保存在/var/log/asterisk
2) 或者你可以以下面的方式启动asterisk:
asterisk -vvvvvvvvgc -d
请运行下面的命令:
cat /proc/interrupts
你应该能看到IRQs, 确定语音卡有自己的IRQ, 不要和其它设备共用.
更多,更详细的方法,请参考下面的网站:
http://www.voip-info.org/wiki/view/Asterisk+PCI+bus+Troubleshooting
在download下面, 你可以看到三个子目录:
第一个是驱动, 你能看到单独的opvxa1200驱动.
第二个是zaptel的 with opvxa1200驱动,你可以选择你需要的版本.
第三个是dahdi的驱动, 如果你想用dahdi,你可以下载整个包.
参考这个网站: http://downloads.openvox.cn/pub/drivers/
请参考下面这个网站:
http://www.asteriskguru.com/tutorials/pci_irq_apic_tdm_ticks_te410p_te405p_noise.html
请参考下面的网站:
http://downloads.openvox.cn/pub/
http://www.voip-info.org/wiki/view/DAHDI
http://www.russellbryant.net/blog/category/dahdi/
http://docs.tzafrir.org.il/dahdi-tools/?C=S%3BO=A
请参考下面的网站:
http://kb.digium.com/entry/1/
http://www.voip-info.org/wiki/view/Asterisk+echo+cancellation
请参考下面的网站:
http://kb.digium.com/entry/6/
对于TDM400P和TE110P卡,内核模块加载完后,LED灯才会亮.当端口配置好了,内核模块加载完了的时候,TDM400P LED灯会亮. 当电话或者中继拔进拔出,灯不会受影响. TE110P卡LED红灯将亮起来,当span配置好了,内核模块加载完了. 如果配置正确,并且环路或者通道连接好了,LED灯应该会变成绿色.
对于TE2XXP/TE4XXP卡LED灯应该是红色并会scroll,即使没有加载内核模块并且没有任何东西插进来. 当你配置好了并加载完了内核模块,但没有连接环路和通道单元,灯应该是红色并闪动. 如果模块加载好了并连接了环路或通道单元,灯会一直成绿色. 参考下面网站:
http://kb.digium.com/entry/13/
FXS (Foreign eXchange Station)是驱动电话的接口. 电话接到FXS接口上, 传递电压,提供振铃. FXS接口用的是FXO信令协议.
FXO (Foreign eXchange Office)是连接到电话线的接口.为PBX提供接入到PSTN. FXO 接口用的是FXS信令协议. FXS 接口能让你的电话接到PBX.
Loopstart信令用于模拟的电话线路. 它允许电话指示摘机和挂机转换到指示振铃或者不振铃.
Kewlstart是基于loopstart上, 它扩展了loopstart的功能,它允许切换到发现电话线上的电压指示电话,另一端的电话已经掉线了。大多数的真实的电话交换机,并且几乎没有PBX支持这个功能.对于获得挂断电话通知一般都要求有这个功能.
Groundstart信令有时候用于PBX. 如果你不知它是什么,不用担心,你不会用到它.
每一个硬件每秒发生1000次中断. 当一些原因导致了发生的中断次数少于1000次,就会发生IRQ缺失. 你可以通过用'zttool',查看卡是否发生了中断缺失.
IRQ缺失会导致Asterisk不同的问题发生. 虽然IRQ缺失不会导致报警,但是发生IRQ缺失会出现一些症状,出现很差的声音质量或者PRI错误. 有时候DTMF检查不能正常工作,也是IRQ缺失导致的.
导致IRQ缺失的一些常见的原因如下: -运行 X window system -共用了IRQs -没有硬盘驱动器的DMA -硬盘驱动器的DMA太高(达到udma3) -运行串行终端或帧缓冲器
可以用下面的命令,检查是否发生IRQs共用:
cat /proc/interrupts
CPU0
0 10756672 XT-PIC timer 2 0 XT-PIC cascade 5 10812879 XT-PIC uhci_hcd, uhci_hcd, wctdm 10 226219 XT-PIC t1xxp, CS46XX 11 1550046 XT-PIC eth0, nvidia 12 387234 XT-PIC i8042 14 32641 XT-PIC ide0 15 18 XT-PIC ide1 NMI 0 LOC 10757616 ERR 40481 MIS 0
可以看到T100P卡和声卡共用了IRQ,TDM400P卡和USB controller共用了.这样很有可能会出问题. 如果你不用USB设备倒是没什么,但是最好是disable USB或者让有自己单独的IRQ.
有以下几种方法让卡有自己的IRQ.
-Turn on APIC
-Tweak BIOS settings
-Try a different PCI slot
-Use setpci
参考下面的网站: http://kb.digium.com/entry/63/
编译内核的时候,不加帧缓冲.
参考这个网站:http://kb.digium.com/entry/61/
Zaptel DTMF检测问题
DTMF检测问题可能是由于很多不同的因素造成的. 最常见的问题是运行X Windows系统. 另一个导致DTMF检测失败的因素是在Zapata.conf里的relaxdtmf选项. 它可能需要打开或关闭. 如果你想强行让所有的DTMF检测由软件做, 你可以在wctdm24xxp.c或者wct4xxp.c里设置vpmdtmfsupport为0,并且重新编译, 或者你可以再运行的时候指定它为内核模块的一个选项.
SIP DTMF检测问题
如果你在使用SIP电话的时候,发送DTMF数字遇到问题, 确认SIP电话里设置的dtmfmode和Asterisk里面设置的dtmfmode一致. 同时,确认你没有同时发送inband和out-of-band(rfc2833)音.
这个问题很少见. 当你的电脑的PCI子系统和OpenVox的卡初始化出现了严重的问题, Linux将显示"PCI Master Abort" 消息上下滑动. 你应该做的是进入系统的BIOS里面,关掉你的主板的PNP (plug and play).如果这样都解决不了问题,你应该和OpenVox的技术支持联系.
如果你用Zaptel线,在最后一个DTMF数字之前出现了延时或者暂停,这是因为在zapata.conf文件里,你已经去掉了echotraining注释.echotraining只是在最后一个数字之前做,这就是导致停顿的原因.为了解决这个问题,你可以把echotraining设置成一个更低的值或者把它关掉.
当你通过FXO拨打电话,出现了咔嗒的噪声,或者当你听到从FXS发来的dialtone,这都是由echotraining引起的.把echotraining关掉。echotraining必然会引起咔嚓声.
http://www.debianhelp.co.uk/asterisk.htm
http://www.voip-info.org/tiki-index.php?page=Asterisk+Linux+Debian
http://www.voip-info.org/wiki/view/Running+Asterisk+on+Debian
http://www.voip-info.org/wiki/view/Asterisk+Linux+Ubuntu
http://ubuntuforums.org/showthread.php?t=136785
http://www.voip-info.org/wiki/view/Asterisk+Linux+Fedora
http://www.asteriskguru.com/
http://www.asteriskguru.com/tutorials/asterisk_installation_compilation_suse.html
http://voip-manager.net/installation-linux-asterisk.php
http://www.voip-info.org/wiki/view/Asterisk+FreeBSD
http://www.voip-info.org/wiki/view/FreeBSD+zaptel
http://www.voip-info.org/wiki/view/Asterisk+OS+Platforms
http://www.voip-info.org/wiki/view/CentOS+5.2+and+Asterisk+1.6.x+installation
http://www.voip-info.org/wiki/view/CentOS+5+and+Asterisk+1.4.x+installation
http://www.voip-info.org/wiki/view/Asterisk+Linux+Centos
请参考下面这个网站:
http://www.openvox.cn/bbs/viewthread.php?tid=739&extra=page%3D1
如果你安装A1200P/A800P,出现问题
请参考这里:http://bbs.openvox.cn/viewthread.php?tid=819&extra=page%3D1
如果出现这个问题,请参考下面的网站:
http://bbs.openvox.cn/viewthread.php?tid=726&extra=page%3D3
如果你想让FXO加快传送拨号的速度,请参考下面网站:
http://bbs.openvox.cn/viewthread.php?tid=666&extra=page%3D3
如果你一直出现"缓冲同步问题"
请参考下面的网站:
http://bbs.openvox.cn/viewthread.php?tid=405&extra=page%3D6
当客户向我们寻求帮助的时候,为了快速高效的为客户解决问题,请你们给出问题的时候给出以下信息
1) kernel和Linux的版本
2) asterisk和zaptel/dahdi的版本
3) 你系统中用到的卡的名字
4) 在你的系统和asterisk中出现的报错信息
5) 把zaptel(zaptel.conf and zapata.conf)或dahdi(system.conf and chan_dahdi.conf)和extension.conf发给我们
6) 加载了驱动之后,运行下面命令: dmesg 并把信息发给我们
7) 运行下面这个命令,把结果发给我们: cat /proc/interrupts
8) 当你打电话的时候,CLI里输出的信息发给我们
9) 在你的系统中用到的协议
10) 如果你们需要我们登入到系统检查错误的话,请把你们的根用户权限的ssh账号发给我们.
11) 备份你的重要文件
12) 详细的描述你的问题
13) 发送你的OpenVox产品的序列号(一般附贴在板卡的后面--条形码下方)
问题如下:
1) 我接到了一个外面的电话,我才能在FXO模块上打出电话
2) 把hookstate设置成offhook(A single ring is good enough),
或者断开连接再重新连接电话线.
请参考下面这个网站:
http://bbs.openvox.cn/viewthread.php?tid=740&extra=page%3D2
如果发生这个错误,请确认以下几点:
1) 模块被正确的编译和安装
2) 编译zaptel的时候,你进入了正确的内核
3) 确认你有权加载模块.
4) 确认wctdm.ko在目录/lib/modules/2.6.XX/extra下
如果发生这个错误,请确认以下几点:
1) 模块被正确的编译和安装
2) 编译zaptel的时候,你进入了正确的内核
3) 确认你有权加载模块.
4) 确认opvxa1200.ko 在目录/lib/modules/2.6.XX/extra下
你可以用下面的工具测试wctdm和opvxa1200
1) zttest
http://www.asteriskguru.com/tutorials/pci_irq_apic_tdm_ticks_te410p_te405p_noise.html
2) zttool
http://www.voip-info.org/wiki/view/Asterisk+zttool
3) ztmonitor
http://www.voip-info.org/wiki/view/Asterisk+zapata+gain+adjustment
4) fxotune
http://www.voip-info.org/wiki/view/Asterisk+fxotune
http://kb.digium.com/entry/134/
在目录/lib/modules/2.6.18-128.el5/misc下,运行命令:
modinfo wctdm.ko/opvxa1200
[root@bogon misc]# modinfo wctdm.ko
filename: wctdm.ko
license: GPL
alias: wcfxs
author: Mark Spencer <markster@digium.com>
description: Wildcard TDM400P Zaptel Driver
srcversion: 5E22C66ED4D5B1ADE573C83
alias: pci:v0000E159d00000001sv0000A901sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A908sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A801sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A800sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A8FDsd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A9FDsd*bc*sc*i* alias: pci:v0000E159d00000001sv0000B119sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000B118sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000B1D9sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000B100sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000E159sd*bc*sc*i* alias: pci:v0000E159d00000001sv0000A159sd*bc*sc*i* depends: zaptel
vermagic: 2.6.18-128.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm: debug:int
parm: loopcurrent:int
parm: reversepolarity:int
parm: robust:int
parm: opermode:charp
parm: timingonly:int
parm: lowpower:int
parm: boostringer:int
parm: fastringer:int
parm: fxshonormode:int
parm: battdebounce:uint
parm: battalarm:uint
parm: battthresh:uint
parm: ringdebounce:int
parm: fwringdetect:int
parm: alawoverride:int
parm: fastpickup:int
parm: fxotxgain:int
parm: fxorxgain:int
parm: fxstxgain:int
parm: fxsrxgain:int
[root@bogon misc]# pwd
/lib/modules/2.6.18-128.el5/misc
当以调试模式加载wctdm/opvxa1200
用下面的方式加载驱动:
modprobe wctdm debug=1 //打开调试信息查看文件/var/log/message
请参考下面网站:
https://issues.asterisk.org/view.php?id=12889
请参考下面网站:
https://issues.asterisk.org/view.php?id=9006
请参考下面网站:
http://forums.digium.com/viewtopic.php?p=17034&sid=c914a0a979f8437576c7aa92518fe48b
请参考下面网站:
https://issues.asterisk.org/view.php?id=13427
请参考下面网站:
https://issues.asterisk.org/view.php?id=14121
运行yum install kernel-devel-`uname -r` 后再编译
请参考下面网站:
http://forums.digium.com/viewtopic.php?t=7061
http://lists.digium.com/pipermail/asterisk-users/2007-June/189259.html
请参考下面网站:
http://lists.alioth.debian.org/pipermail/pkg-voip-maintainers/2007-August/009225.html
请参考下面网站:
http://www.openvox.com.cn/bbs/viewtopic.php?t=538&sid=cae3adbe99e80f500d9c9ea7edb52bfb
http://www.openvox.cn/download/other_docs/A800P_A1200P_FAQ(Chinese).pdf
请参考下面网站:
http://www.openvox.cn/download/user_manuals_english_version/Octvqeug_5000.pdf
http://www.octasic.com/en/products/softecho/softecho_asterisk.php
http://www.octasic.com/en/products/softecho/support.php
请参考下面网站:
http://trixbox.org/node/21080 http://www.rowetel.com/ucasterisk/oslec.html
请参考下面网站:
http://www.asterisk.org/forum/viewtopic.php?p=125314&sid=9515c7b03cb14dc698e89467c3d49a86
请参考下面网站:
http://www.voip-info.org/wiki/view/DAHDI
http://docs.tzafrir.org.il/dahdi-linux/
http://docs.tzafrir.org.il/dahdi-tools/
文件zonedata.c包含了用于libtonezone的tone zones 的信息(and hence also in ztcfg). 下面是那些区域的列表:
us United States / North America
au Australia
fr France
nl Netherlands
uk United Kingdom
fi Finland
es Spain
jp Japan
no Norway
at Austria
nz New Zealand
it Italy
us-old United States Circa 1950 / North America
gr Greece
tw Taiwan
cl Chile
se Sweden
be Belgium
sg Singapore
il Israel
br Brazil
hu Hungary
lt Lithuania
pl Poland
za South Africa
pt Portugal
ee Estonia
mx Mexico
in India
de Germany
ch Switzerland
dk Denmark
cz Czech Republic
cn China
ar Argentina
my Malaysia
th Thailand
bg Bulgaria
ve Venezuela
ph Philippines
ru Russian Federation
tr Turkey
ztcfg -> dahdi_cfg
ztmonitor -> dahdi_monitor
ztscan -> dahdi_scan
ztspeed -> dahdi_speed
zttest -> dahdi_test
zttool -> dahdi_tool
zapconf -> dahdi_genconf (deprecates genzaptelconf)
当加载驱动wctdm/opvxa1200时
modprobe wctdm opermode=YOUR COUNTRY
在下面的列表上检查: fxo_mudules.h
{
US, Canada
{ .name = "FCC",
.rt = 1,
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
/* Austria, Belgium, Denmark, Finland, France, Germany,
Greece, Iceland, Ireland, Italy, Luxembourg, Netherlands,
Norway, Portugal, Spain, Sweden, Switzerland, and UK */
{ .name = "TBR21",
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.ring_osc = 0x7e6c,
.ring_x = 0x023a,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "ARGENTINA",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "AUSTRALIA",
.ohs = 1,
.mini = 0x3,
.acim = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "AUSTRIA",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "BAHRAIN",
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "BELGIUM",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "BRAZIL",
.mini = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "BULGARIA",
.ilim = 1,
.dcv = 0x3,
.mini = 0x0,
.acim = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "CANADA",
.dcv = 0x3, .battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "CHILE",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "CHINA",
.mini = 0x3,
.acim = 0xf,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "COLOMBIA",
.dcv = 0x3, .battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "CROATIA",
.ilim = 1,
.dcv = 0x3,
.mini = 0,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "CYPRUS",
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "CZECH",
.ilim = 1,
.dcv = 0x3,
.mini = 0,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "DENMARK",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "ECUADOR",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "EGYPT",
.mini = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "ELSALVADOR",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "FINLAND",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
},
{ .name = "FRANCE",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.mini = 0,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "GERMANY",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "GREECE",
.ohs2 = 1,
.ilim = 1,
.dcv = 0x3,
.acim = 0x2,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "GUAM",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000, .battthresh = 3,
}, { .name = "HONGKONG",
.dcv = 0x3, .battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "HUNGARY",
.dcv = 0x3,
.battdebounce = 64,
.battalarm = 1000,
.battthresh = 3,
}, { .name = "ICELAND",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "INDIA",
.dcv = 0x3, .acim = 0x4, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "INDONESIA",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000,
.battthresh = 3,
}, { .name = "IRELAND",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "ISRAEL",
.ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "ITALY",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "JAPAN",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "JORDAN",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "KAZAKHSTAN",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "KUWAIT",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "LATVIA",
.ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "LEBANON",
.ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "LUXEMBOURG",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "MACAO",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, /* Current loop >= 20ma */
{ .name = "MALAYSIA",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "MALTA",
.ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "MEXICO",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "MOROCCO",
.ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "NETHERLANDS",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
},
{ .name = "NEWZEALAND",
.dcv = 0x3, .acim = 0x4, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "NIGERIA",
.ilim = 0x1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "NORWAY",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "OMAN",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "PAKISTAN",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "PERU",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "PHILIPPINES",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "POLAND",
.rz = 1, .rt = 1, .dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "PORTUGAL",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "ROMANIA",
.dcv = 3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "RUSSIA",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SAUDIARABIA",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SINGAPORE",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SLOVAKIA",
.dcv = 0x3, .acim = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SLOVENIA",
.dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SOUTHAFRICA",
.ohs = 1, .rz = 1, .dcv = 0x3, .acim = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SOUTHKOREA",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SPAIN",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SWEDEN",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SWITZERLAND",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x2, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "SYRIA",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "TAIWAN",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "THAILAND",
.mini = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "UAE",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "UK",
.ohs2 = 1, .ilim = 1, .dcv = 0x3, .acim = 0x5, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "USA",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, { .name = "YEMEN",
.dcv = 0x3, .battdebounce = 64, .battalarm = 1000, .battthresh = 3,
}, };
请参考下面这些网站:
http://www.ainslie.org.uk/callerid/cli_faq.htm
http://www.asteriskguru.com/tutorials/calleridall_function.html
https://issues.asterisk.org/view.php?id=7787
http://asterisk.pbx.in/callerid-standards
http://kb.digium.com/entry/3/
如果你用wctdm或opvxa1200,Zaptel和Asterisk 1.4.22会出现一个呼出的普遍问题. 不能呼出的原因是Asterisk 1.4.22有个新的特性,它会检查模拟线是否插上了,但是只有用Dahdi的时候才有这个特性.为了解决这个问题,你可以按下面方法做.
在/asterisk-1.4.22、channels/chan_dahdi.c下找到下面这行
ifdef DAHDI_CHECK_HOOKSTATE return 0;
else return 1;
把"0"改成"1"
ifdef DAHDI_CHECK_HOOKSTATE return 1;
else return 1;
你可以试着用下面的方面解决问题:
1) 检查IRQ,确定系统能正确的处理IRQ
2) 运行zttest查看输出结果
3) Disable the X window and framebuffer(set vga=normal from grub)
4) 当用IDE驱动的时候,请打开DMA control
5) 把卡的IRQ绑定到特定的CPU,例如:
echo 1 > /proc/irq/217/smp_affinity #wcfxo
6) 设置latency timer: setpci -v -s 04:06.0 LATENCY_TIMER=f8 #wcfxo
如果你用OSLEC,你必须注释echotraining.
否则通道将会被静音.
可能的解决方法有以下:
1) 你的PSTN服务提供商用电压下降来监控断开,
请试着去编辑zaptel.h里的DCT,把它的值设置为100ms或者更大.
2) 如果你的服务提供商提供极性反转
断开监控设置如下:
hanguponpolarityswitch=yes
answeruponpolarityswitch=yes
3) 如果你的服务提供商提供忙音或断开监控
busydetect=yes busycount=6
在zapata.conf里面把progzone设置成你的国家代码
wctdm/opvxa1200用RJ11线缆.请参考下面网站:
http://www.tech-faq.com/rj-11.shtml
http://en.wikipedia.org/wiki/RJ11,_RJ14,_RJ25
http://openvox.cn/products/show.php?itemid=120&lang=2
如果你用装有wctdm/opvxa1200的FXS,你必须用12v的电源(4 pin Molex power cable)为FXS供电。
请参考下面网站:
http://www.playtool.com/pages/psuconnectors/connectors.html#peripheral
http://en.wikipedia.org/wiki/Computer_power_supply
请参考下面网址:
http://bbs.openvox.cn/viewthread.php?tid=873&extra=page%3D1
用户必须注意,如果安装freeiris2和OpenVox的PRI卡,span的数量是有限制的。 目前,免费版本最多可以支持5个spans。如果想支持更多的spans, 你需要从freeiris2购买许可证。 网站链接:http://cn.freeiris.org/
文件/etc/zaptel.conf(/etc/dahdi/system.conf)用于硬件接口配置,该文件是配置模拟接口卡必须具备的文件.在加载驱动时,运行ztcfg -vvv(dahdi_cfg -vvv)时,系统会读取并加载该文件。
例如OpenVoxA1200P:
# Span 1: OPVXA1200/0 "OpenVox A1200P Board 1" (MASTER)
fxsks=1 #表示在通道1中,FXO接口采用FXS信令;
fxsks=2
fxoks=3 #表示在通道3中,FXS接口采用FXO信令;
fxoks=4
# channel 5, WCTDM, no module. #表示通道5未插入模块(FXO模块,或者FXS模块);
# channel 6, WCTDM, no module.
# channel 7, WCTDM, no module.
# channel 8, WCTDM, no module.
# channel 9, WCTDM, no module.
# channel 10, WCTDM, no module.
# channel 11, WCTDM, no module.
# channel 12, WCTDM, no module.
# Global data
loadzone = cn #国家制式设定参数,例如中国大陆(cn),美国(us)
defaultzone = cn #国家制式设定参数;
[trunkgroups] #定义中继组
[channels] #硬件通道和他们选项信令方式参数设定.注意:该行千万不要被注释掉!
busydetect=yes #设定为yes,Asteirsk可以尝试识别忙音以及在模拟线路中检查拆线信号.
busycount=5 #设定该值前必须busydetect=yes,该值表示在挂断前的忙音次数.
usecallerid=yes #设定来电显示
hidecallerid=no #设定外呼时不隐藏号码
callwaiting=yes #设定呼叫等待
threewaycalling=yes #开启三方通话(先闪断,再呼叫第三方,再闪断,就可以实现三方通话)
transfer=yes #设定呼叫转移(基于三方通话)
echocancel=yes #设定回声消除
echotraining=yes #设定回音训练
context=from-openvox #该值需要与extensions.conf的设定吻合
signalling=fxs_ks #表示FXO通道使用FXS信令
callprogress=yes #该值一般与busydetect,busycount配合使用.
immediate=no #如果设定为yes,那么asterisk指引驱动不产生拨号音,直接执行"s"extension部分的拨号方案,而不执行预期的拨号方案.
callwaitingcallerid=yes #当呼叫等待时asterisk是否发送Caller ID.
callerid=asreceived #用于前向发送已经收到的CallerID
internationalprefix:00 #国际长途前缀为00
nationalprefix:0 #国内长途前缀为0
relaxdtmf=yes # 减缓DTMF检测
rxgain=4.2 # 声音增益设定(收到的)
txgain=-10.2 # 声音增益设定(外送的)
/etc/asterisk/logger.conf的参数一般情况下都是被注释的,但是有时要看debug信息时必须将一些参数打开。如:
;debug => debug #当需要查看asterisk console的debug信息时,应该将它取消注释.
console => notice,warning,error #打开这个参数,在执行asterisk -vvvgc启动的时候会看到很多CLI信息.
;console => notice,warning,error,debug
messages => notice,warning,error #打开就会在CLI上看到notice,warning,error信息.
;full => notice,warning,error,debug,verbose #打开这个参数会将这个asterisk系统运行的CLI信息全部打印在console上,
#但一般情况下不推荐打开,不然硬盘很快就被这些信息填满了.
/etc/asterisk/manager.conf文件一般在asterisk支持的应用管理接口中使用。如下几个链接是关于asterisk AMI的相关链接:
http://www.voip-info.org/wiki/view/Asterisk+manager+API
http://www.voip-info.org/wiki/view/Asterisk+config+manager.conf
相关链接:http://www.voip-info.org/wiki/view/Asterisk+config+features.conf
/etc/asterisk/asterisk.conf文件记录的是关于asterisk的相关目录.以及asterisk CLI命令行的相关参数设定.
asterisk.conf相关的参考链接:
http://www.voip-info.org/wiki/view/Asterisk+config+asterisk.conf
asterisk启动和停止的时候,其应该执行的操作:
http://www.voip-info.org/wiki/view/Asterisk+Starting+and+Stopping
1)语法
Dial(type/identifier, timeout, options, URL)
Dial(type1/identifier1[&type2/identifier2[&type3/identifier3... ] ], timeout, options, URL)
2)参数
Dial()需要四个参数,其中,后三个参数可以缺省
第一个参数(type/identifier)叫呼叫的被叫地,由呼叫所采用的技术、反斜线、远地资源(通道名或编号)组成。
例如,dahdi/1,他表示技术是dahdi,资源是1。
exten => 100,1,Dial(dahdi/1)
在这个拨号方案中,当这个extension被执行时,asterisk会使连接在通道1上的电话振铃。
当然,也可以同时拨多个通道,使用&符号把多个被叫地连接起来,如:
exten => 100,1,Dial(dahdi/1&dahdi/2&dahdi/3)
Dial()会桥接来电,无论被叫地中的哪一个通道先被接听。
第二个参数(timeout)是超时时间,单位是秒。如果Dial()中加入了这个参数,它会一直对被叫地进行呼叫,
直到超时后才放弃,之后进入该extension中的下一个priority。
如果此参数缺省,Dial()会一直呼叫本通道,直到有人接听或者主叫挂机。
第三个参数(options)是可选择的字符串,它包含一个或多个影响Dial()行为的字符。常用字符串可参考备注。
第四个参数是URL。如果被叫的通道支持在呼叫的同时接受URL,那么所指定的URL将会被发送。这个参数我们很少使用。
t或T:表示允许被叫通过拍xfer键进行呼叫转移。xfer键的定义在features.conf中
r:强制产生回铃音,呼叫过程中没有语音直到被叫摘机。
没有这个选项, aserisk会适当地根据情况自动地产生回铃音。
强制产生回铃有可能使主叫听不到忙音,彩铃。
在呼叫多个被叫时,回铃音不通被透传,这时需要强制一个回铃音。
R:当被叫在震铃时通知主叫被在震铃,,呼叫过程中没有语音直到被叫摘机。
m:提供Music on Hold给主叫直到被叫摘机。
o:传送主叫ID,默认是送分机的号码(extension's number)
Answer( )应用于接听正在响铃通道,它不需要任何参数。
Playback( )应用在通道上播放事先录制好的语音文件,指定一个文件名(不带扩展名),可以使用绝对路径与相对路径。
Hangup( )应用于挂断一个正在活动的通道。
Background( )它也播放事先录制好的语音文件,但它等待按键,然后执行对应extension。
防止Background( )后超出按键范围,使用i 来解决问题。
防止Background( )长时间没有选择,使用t 来决解问题。
/etc/asterisk/asterisk.conf 主要配置文件
/etc/zaptel.conf 硬件接口的基本层,修改这个文件之后,要用ztcfg 命令重新装载
/etc/asterisk/zapata.conf 为硬件配置Asterisk的接口
/etc/asterisk/extensions.conf 拨号方案配置文件
/etc/asterisk/moduprobe.conf 加载模块配置文件
/etc/asterisk/sip.conf SIP协议配置文件
/etc/asterisk/iax.conf IAX协议配置文件
Asterisk的目录结构即Asterisk使用的目录
/etc
包含了zaptel.conf文件
/usr/lib/asterisk/modules
Asterisk 的所有可载入的模块都在这里,通常情况下,所有的模块都是启动的时候载入的
如果要更改启动时载入的模块,或者是模块载入的方式,可在/etc/asterisk/modules.conf文件中修改
/etc/asterisk
包含了asterisk的所有配置文件(除了zaptel.conf)
/var/run
处理系统中运行进程的id(包括Asterisk)
/var/log/asterisk
Asterisk在这里生产日志,通过/etc/asterisk/logger.conf来配置。
/var/log/asterisk/cdr-csv
用来存储呼叫详细记录,逗号分割,例如csv(地址簿格式)
很多时间会使用cdr,ast附件包的代码可以在mysql数据库中存储cdr,用于记录呼叫详细记录
/var/spool/asterisk/Voicemail:语音和问候语。通过修改/etc/asterisk/voicemail.conf文件可以修改。
/var/lib/asterisk/agi-bin: agi 脚本
/var/lib/asterisk/firmware: 兼容设备固件
/var/lib/asterisk/sounds: 所有的语音提示
以A1200P和中国模式为例
在文件/etc/modprobe.conf中添加一行:
options opvxa1200 opermode=CHINA
然后重启系统就可以了。
启动asterisk 时,常会用到以下参数
-c:显示Asterisk的CLI
-v:设置CLI的详细程度
-g:告诉Asterisk创建core dump,一会儿用gdb调试
-r:远程连接到一个已经运行的Asterisk进程上。
-rx:远程执行,执行引号内的命令(如"stop now")
s: s 表示start,当没有指定extension的呼叫(例如:正在振铃的FXO线路)进入context的时候,就由这个s extension来处理。
i:无效的分机呼叫时(例如:客户拨打不存在的分机)调用此extension。
t: 当用户在规定时间内(默认时间是10秒)没有输入的时候调用此extension。
硬件环境:A800P(2FXS+1FXO),A400P(2FXS+1FXO),步步高6082G来电显示有绳电话
软件环境:Centos5.5,dahdi-linux-complete-2.3.0.1+2.3.0
编译安装:
1.输入以下命令:
#cd /usr/src/dahdi-linux-complete-2.3.0.1+2.3.0/tools
#make menuselect
选择“fxstest”,然后选择“Save&Exit”保存退出。
2. 开始编译dahdi。输入以下命令:
#cd /usr/src/dahdi-linux-complete-2.3.0.1+2.3.0
#make
#make install
#make config
3. 重新加载驱动。
#service dahdi stop
#modprobe –r wctdm
#modprobe –r opvxa1200
#modprobe –r dahdi
#modprobe dahdi
#modprobe opvxa1200 opermode=CHINA
#modprobe wctdm opermode=CHINA
#dahdi_genconf
#dahdi_cfg –vvv (如果没有报错,则表示已经OK)
#dahdi_scan (此命令可以看到语音卡的基本信息及通道信息)
开始测试:
fxstest命令有两个固定参数。第一个需要指定操作的设备文件,如/dev/dahdi/1。第二个参数则是需要操作的命令。测试时,FXS口需要接上电话机,不能启动asterisk。
1. 查看电压伏特数
# fxstest /dev/dahdi/1 stats //A800P第一个通道的电压
TIP: -5.6400 Volts
RING: -54.1440 Volts
VBAT: -62.7920 Volts
#fxstest /dev/dahdi/11 stats //A400P第三个通道的电压
TIP: -5.6400 Volts RING: -54.8960 Volts
VBAT: -63.9200 Volts
2. 查看内核寄存器
# fxstest /dev/dahdi/1 regdump //A800P第一个通道的寄存器
Direct registers:
0. 05 1. 28 2. 18 3. 00 4. 18 5. 00 6. 00 7. 00
8. 00 9. 00 10. 08 11. 33 12. 80 13. 10 14. 00 15. 00
…
Indirect registers:
0. 55c2 1. 51e6 2. 4b85 3. 4937 4. 3333 5. 0202
6. 0202 7. 0198 8. 0198 9. 0611 10. 0202 11. 00e5
…
3. 播放一串音调。
# fxstest /dev/dahdi/1 tones
这时拿起电话,可以听到一串音调。按CTRL+C中止。
4. 传送dtmfcid。
#fxstest /dev/dahdi/1 dtmfcid
Going to send a set of DTMF tones >A5551212C<
Phone is ringing
Ringing Done
电话振铃时,可以看到来电显示传送的cid:5551212
5. 测试极性反转。(此项测试必须要在传送dtmfcid之后,才能正常显示反转信息)
# fxstest /dev/dahdi/1 polarity
Twiddling polarity...
Polarity is forward...
Polarity is reversed...
Polarity is forward...
6. 发送一串dtmf信号(“-”表示没有发送信号)。
# fxstest /dev/dahdi/1 dtmf "12324" 70
Going to send a set of DTMF tones >12324<
Using a duration of 70 mS per tone
这时可以在电话来电显示上看到发送的字符串“12324”,注意:时间要在70ms或以上才能显示完整的字符串。
7. 触发语音信箱等待指示灯、HV、NEON。(A800P不支持此项测试)
# fxstest /dev/dahdi/11 vmwi
Twiddling vmwi ...
Set 1 Voice Message...
Set 2 Voice Messages...
Set No Voice messages...
# fxstest /dev/dahdi/11 hvdc
Twiddling hvdc ...
Set 1 Voice Message...
Set 2 Voice Messages...
Set No Voice messages...
# fxstest /dev/dahdi/11 neon
Twiddling neon ...
Set 1 Voice Message...
Set 2 Voice Messages...
Set No Voice messages...
uuid
yum install uuid-devel libuuid libuuid-devel
json
cd /usr/src/ && wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
tar -zxf jansson-2.5.tar.gz
cd jansson*
./configure --prefix=/usr/ && make clean && make && make install && ldconfig
sqlite3
yum install sqlite sqlite-devel