summaryrefslogtreecommitdiff
path: root/xpp/twinstar
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-04-20 13:44:35 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-04-20 13:44:35 +0000
commit072842446fd7d7c522706729c358d23c9aeeecd8 (patch)
treee855926f6053bac057f13362bcec8784eb4719f9 /xpp/twinstar
parent469e3f161db8d43374994ff4ad8a047669e3a96d (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-xxpp/twinstar135
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__