dahdi_tools 分析(一)dahdi_scan

本文详细介绍了dahdi_scan工具的使用方法,通过分析其源码,展示了如何扫描和显示电话板卡的详细信息,包括板卡状态、描述、制造商、设备类型等,并区分了数字和模拟板卡的不同属性。

dahdi_tools 分析(一)dahdi_scan

dahdi_scan 的使用

示例:

# dahdi_scan 
[1]
active=yes
alarms=OK
description= XX WCTDM Board 1
name=WCTDM/0
manufacturer=xx
devicetype=xx
location=PCI Bus 00 Slot 00
basechan=1
totchans=4
irq=0
type=analog
port=1,FXS
port=2,FXS
port=3,FXS
port=4,FXS

dahdi_scan 用于显示板卡的一些信息。无参数时扫描所有板卡信息,加参数时扫描指定板卡,如 dahdi_scan 4 5 6 ;只扫描 4 5 6 号板卡。

源码分析

int main(int argc, char *argv[])
{
   
   
	int ctl;
	int x, y, z;
	struct dahdi_params params;
	unsigned int basechan = 1;
	int direct_basechan;
	struct dahdi_spaninfo s;
	char buf[100];
	char alarms[50];
	
	// 打开 /dev/dahdi/ctl 
    if ((ctl = open("/dev/dahdi/ctl", O_RDWR)) < 0) {
   
   
    	fprintf(stderr, "Unable to open /dev/dahdi/ctl: %s\n", strerror(errno));
    	exit(1);
    }
    
    for (x = 1; x < DAHDI_MAX_SPANS; x++) {
   
   
		memset(&s, 0, sizeof(s));
		s.spanno = x;
		if (ioctl(ctl, DAHDI_SPANSTAT, &s))   // 使用 ioctl DAHDI_SPANSTAT 获取板卡信息,struct dahdi_spaninfo
			continue;
        
        /* DAHDI-Linux 2.5.x exposes the base channel in sysfs. Let's
		 * try to look for it there in case there are holes in the span
		 * numbering. */
		direct_basechan = get_basechan(x);   // get_basechan 后面分析
		if (-1 != direct_basechan) {
   
   
			basechan = direct_basechan;
		}
        
         fprintf(stdout, "[%d]\n", x);
		fprintf(stdout, "active=yes\n");
		fprintf(stdout, "alarms=%s\n", alarms);
		fprintf(stdout, "description=%s\n", s.desc);
		fprintf(stdout, "name=%s\n", s.name);
		fprintf(stdout, "manufacturer=%s\n", s.manufacturer)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值