diff options
Diffstat (limited to 'xpp/utils/zconf/Zaptel/Xpp/Xpd.pm')
-rw-r--r-- | xpp/utils/zconf/Zaptel/Xpp/Xpd.pm | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm index 852aaea..ef479fb 100644 --- a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm +++ b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm @@ -8,22 +8,10 @@ package Zaptel::Xpp::Xpd; # $Id$ # use strict; +use XppUtils; my $proc_base = "/proc/xpp"; -# Accessors (miniperl does not have Class:Accessor) -our $AUTOLOAD; -sub AUTOLOAD { - my $self = shift; - my $name = uc($AUTOLOAD); - $name =~ s/.*://; # strip fully-qualified portion - if (@_) { - return $self->{$name} = shift; - } else { - return $self->{$name}; - } -} - sub blink($$) { my $self = shift; my $on = shift; @@ -76,23 +64,54 @@ sub zt_registration($$) { return $result; } +# +# Backward compatibility for old drivers +# before changeset:5119 +# +# Newer drivers should directly have $xpd->spanno +# +sub spanno_of_xpd($) { + my $xpd = shift || die; + + warn "Running on old driver. Keep going...\n"; + use Zaptel; + my @spans = Zaptel::spans; + + my ($span) = grep { $_->name eq $xpd->fqn } @spans; + return ($span) ? $span->num : 0; +} + sub new($$) { my $pack = shift or die "Wasn't called as a class method\n"; - my $self = { @_ }; + my $xbus = shift || die; + my $procdir = shift || die; + my $self = {}; bless $self, $pack; - my $dir = "$proc_base/" . $self->fqn; - $self->{DIR} = $dir; - open(F, "$dir/summary") || die "Missing summary file in $dir"; + $self->{XBUS} = $xbus; + $self->{DIR} = $procdir; + local $/ = "\n"; + open(F, "$procdir/summary") || die "Missing summary file in $procdir"; my $head = <F>; chomp $head; - # "XPD-00 (BRI_TE ,card present, span registered) SYNC MASTER" + # "XPD-00 (BRI_TE ,card present, span 3)" close F; - $head =~ s/^.*\(//; - $head =~ s/\) */, /; - $head =~ s/\s*,\s*/,/g; - my ($type,$present,$registered,$sync) = split(/,/, $head); - $self->{TYPE} = uc($type); - $self->{IS_SYNC_MASTER} = ($sync =~ /MASTER/); + $head =~ s/^(XPD-(\d\d))\s+// || die; + $self->{ID} = $2; + $self->{FQN} = $xbus->name . "/" . $1; + $head =~ s/^.*\(// || die; + $head =~ s/\) */, / || die; + $head =~ s/\s*,\s*/,/g || die; + my ($type,$present,$span,$rest) = split(/,/, $head); + #warn "Garbage in '$procdir/summary': rest='$rest'\n" if $rest; + if($span =~ s/span\s+(\d+)//) { # since changeset:5119 + $self->{SPANNO} = $1; + } else { + $self->{SPANNO} = $self->spanno_of_xpd; + } + $self->{TYPE} = $type; + $self->{IS_BRI} = ($type =~ /BRI_(NT|TE)/); + $self->{IS_PRI} = ($type =~ /[ETJ]1_(NT|TE)/); + $self->{IS_DIGITAL} = ( $self->{IS_BRI} || $self->{IS_PRI} ); return $self; } |