diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-04-20 13:44:35 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-04-20 13:44:35 +0000 |
commit | 072842446fd7d7c522706729c358d23c9aeeecd8 (patch) | |
tree | e855926f6053bac057f13362bcec8784eb4719f9 /xpp/twinstar | |
parent | 469e3f161db8d43374994ff4ad8a047669e3a96d (diff) |
xpp: twinstar-related perl improvements
* New generator Dahdi::Config::Gen::Xpporder can generate
and xpp_order config for an existing setup.
* Add more TwinStar related logic to Dahdi::Xpp::Mpp. Simplifies
the twinstar utility accordingly.
* twinstar_hook: for the multiple Astribanks case.
* twinstar_setup: More logic tests. Now delegates configuration
generation to dahdi_genconf (with new Xpporder generator).
* dahdi_hardware: Show number of channels with -v
git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@6417 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'xpp/twinstar')
-rwxr-xr-x | xpp/twinstar | 135 |
1 files changed, 73 insertions, 62 deletions
diff --git a/xpp/twinstar b/xpp/twinstar index cbcd97f..b5e43ff 100755 --- a/xpp/twinstar +++ b/xpp/twinstar @@ -17,8 +17,7 @@ use Dahdi::Hardware; use Dahdi::Span; use Dahdi::Xpp; use Dahdi::Xpp::Xbus; - -my $astribank_tool = '/usr/sbin/astribank_tool'; +use Dahdi::Xpp::Mpp; sub usage { die "Usage: $0 {status|jump|enable-wd|disable-wd|ports}\n"; @@ -54,96 +53,108 @@ sub tws_usb_devfile($) { return "$usb_top/$name"; } -sub tws_show() { - my @usb_devs = grep { /usb:/ } tws_devs(); +sub tws_show(@) { + my @usb_devs = @_; + my $format = "%-15s %-10s %-15s %-10s %-10s\n"; + printf $format, 'DEVICE', 'PORT', 'WATCHDOG', 'POWER0', 'POWER1'; foreach my $dev (@usb_devs) { - my $path = tws_usb_devfile($dev); - print "$path:\n"; - open(F, "$astribank_tool -D '$path' 2>&1 |") or - die "Failed running '$astribank_tool': $!"; - while(<F>) { - chomp; - next unless /twinstar/i; - printf "\t%s\n", $_; + my $mppinfo = $dev->mppinfo; + if(!defined $mppinfo) { + printf STDERR "%s: no MPP information\n", $dev->hardware_name; + next; + } + if(!defined $mppinfo->{TWINSTAR_PORT}) { + printf STDERR "%s: no TWINSTAR_PORT information\n", $dev->hardware_name; + next; } - close F || die "Failed running '$astribank_tool': $!"; + my $power = $mppinfo->twinstar_power; + printf $format, + $dev->hardware_name, + $mppinfo->twinstar_port, + ($mppinfo->twinstar_watchdog) ? "on" : "off", + ($power->[0]) ? "yes" : "no", + ($power->[1]) ? "yes" : "no"; } } sub tws_portnum($) { my $dev = shift || die "Missing dev"; - my $path = tws_usb_devfile($dev); - my $port; - open(F, "$astribank_tool -D '$path' 2>&1 |") or - die "Failed running '$astribank_tool': $!"; - while(<F>) { - chomp; - next unless /twinstar/i; - next unless /connected\s+to/i; - if(/USB-(\d+)/i) { - $port = $1; - } + my $mppinfo = $dev->mppinfo; + if(!defined $mppinfo) { + printf STDERR "%s: no MPP information\n", $dev->hardware_name; + return undef; } - close F || die "Failed running '$astribank_tool': $!"; - return $port; + return $mppinfo->twinstar_port; } -sub tws_jumpdev($$) { - my $dev = shift || die; - my $port = shift; - my $path = tws_usb_devfile($dev); - print "$path -> $port\n"; - system($astribank_tool, "-D", $path, "-p", $port); +sub tws_showports(@) { + my @usb_devs = @_; + foreach my $dev (@usb_devs) { + my $mppinfo = $dev->mppinfo; + if(!defined $mppinfo) { + printf STDERR "%s: no MPP information\n", $dev->hardware_name; + next; + } + if(!defined $mppinfo->{TWINSTAR_PORT}) { + printf STDERR "%s: no TWINSTAR_PORT information\n", $dev->hardware_name; + next; + } + printf "%s\n", $mppinfo->{TWINSTAR_PORT}; + } } -sub tws_jump() { - my @usb_devs = grep { /usb:/ } tws_devs(); - my %ports; +sub tws_watchdog($@) { + my $on = shift; + die "tws_watchdog() on/off?" unless defined $on; + my @usb_devs = @_; foreach my $dev (@usb_devs) { - my $path = tws_usb_devfile($dev); - my $port = tws_portnum($dev); - # The "other" port - $port = ($port == 1) ? 0 : 1; - $ports{$dev} = $port; - } - foreach my $usbdev (sort keys %ports) { - tws_jumpdev($usbdev, $ports{$usbdev}); + my $mppinfo = $dev->mppinfo; + if(!defined $mppinfo) { + printf STDERR "%s: no MPP information\n", $dev->hardware_name; + next; + } + $mppinfo->mpp_setwatchdog($on); } } -sub tws_showports() { - my @usb_devs = grep { /usb:/ } tws_devs(); +sub tws_jump(@) { + my @usb_devs = @_; + foreach my $dev (@usb_devs) { - my $port = tws_portnum($dev); - print "$port\n"; + my $mppinfo = $dev->mppinfo; + if(!defined $mppinfo) { + printf STDERR "%s: no MPP information\n", $dev->hardware_name; + next; + } + $mppinfo->mpp_jump; } } -sub tws_watchdog($) { - my $on = shift; - die "tws_watchdog() on/off?" unless defined $on; - my @usb_devs = grep { /usb:/ } tws_devs(); - - foreach my $dev (@usb_devs) { - my $path = tws_usb_devfile($dev); - print "$path:\n"; - system($astribank_tool, "-D", $path, "-w", $on); - die "Running $astribank_tool failed: $?" if $?; +sub dev_list() { + my @devs; + foreach my $dev (Dahdi::Hardware->device_list) { + next unless $dev->is_astribank; + next unless $dev->product =~ /116./; + Dahdi::Xpp::Mpp->mpp_addinfo($dev); + push(@devs, $dev); } + return @devs; } +my @usb_devices = dev_list(); + if($ARGV[0] eq 'status') { - tws_show(); + tws_show(@usb_devices); } elsif($ARGV[0] eq 'jump') { - tws_jump(); + tws_jump(@usb_devices); } elsif($ARGV[0] eq 'disable-wd') { - tws_watchdog(0); + tws_watchdog(0, @usb_devices); } elsif($ARGV[0] eq 'enable-wd') { - tws_watchdog(1); + tws_watchdog(1, @usb_devices); } elsif($ARGV[0] eq 'ports') { - tws_showports(); + tws_showports(@usb_devices); } __END__ |