dahdi_genconf: Use 'dahdi_scan' to determine span_type for B410P cards.

The wcb4xxp driver does not put enough information in the proc filesystem to
determine if the ports are in TE or NT mode.  Previously the ports would
always just setup the dahdi-channels.conf file in TE mode. After this change
the dahdi_scan utility is used to detect if the ports are in TE or NT mode and
setup dahdi-channels.conf appropriately.

Internal-Issue-ID: DAHTOOL-54
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.astersk.org/svn/dahdi/tools/trunk@10214 17933a7a-c749-41c5-a318-cba88f637d49
This commit is contained in:
Shaun Ruffell 2011-09-29 17:00:51 +00:00
parent db9b649e03
commit 250bc06238

View File

@ -131,7 +131,7 @@ my @bri_strings = (
'(?:quad|octo)BRI PCI ISDN Card.* \[(NT|TE)\]', '(?:quad|octo)BRI PCI ISDN Card.* \[(NT|TE)\]',
'octoBRI \[(NT|TE)\] ', 'octoBRI \[(NT|TE)\] ',
'HFC-S PCI A ISDN.* \[(NT|TE)\] ', 'HFC-S PCI A ISDN.* \[(NT|TE)\] ',
'(B4XXP) \(PCI\) Card', # Does not expose NT/TE type '(B4XXP) \(PCI\) Card', # Use dahdi_scan to determine TE/NT mode
'(WCBRI)', # has selectable NT/TE modes via dahdi_cfg '(WCBRI)', # has selectable NT/TE modes via dahdi_cfg
); );
@ -177,6 +177,28 @@ sub init_proto($$) {
$self->{TYPE} = "${proto}_$self->{TERMTYPE}"; $self->{TYPE} = "${proto}_$self->{TERMTYPE}";
} }
sub get_digital_spantype {
my $span_no = shift;
my @lines = split /\n/, `dahdi_scan`;
my $found_span = 0;
foreach my $line (@lines) {
if (! $found_span) {
if ($line =~ m/\[$span_no\]/) {
$found_span = 1;
}
} else {
if ($line !~ m/^\[/) {
if ($line =~ m/digital-(TE|NT)/ ){
return $1;
}
} else {
$found_span = 0;
}
}
}
die "Cannot determine digital spantype";
}
sub new($$) { sub new($$) {
my $pack = shift or die "Wasn't called as a class method\n"; my $pack = shift or die "Wasn't called as a class method\n";
my $proc_file = shift or die "Missing a proc file parameter\n"; my $proc_file = shift or die "Missing a proc file parameter\n";
@ -195,7 +217,12 @@ sub new($$) {
foreach my $cardtype (@bri_strings) { foreach my $cardtype (@bri_strings) {
if($head =~ m/$cardtype/) { if($head =~ m/$cardtype/) {
my $termtype = $1; my $termtype = $1;
$termtype = 'TE' if ( $1 eq 'B4XXP' or $1 eq 'WCBRI' ); if ($1 eq 'B4XXP') {
$termtype = get_digital_spantype($num);
}
if ($1 eq 'WCBRI') {
$termtype = 'TE';
}
$self->{IS_DIGITAL} = 1; $self->{IS_DIGITAL} = 1;
$self->{IS_BRI} = 1; $self->{IS_BRI} = 1;
$self->{TERMTYPE} = $termtype; $self->{TERMTYPE} = $termtype;