summaryrefslogtreecommitdiff
path: root/xpp/perl_modules/Dahdi/Xpp/Mpp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/perl_modules/Dahdi/Xpp/Mpp.pm')
-rw-r--r--xpp/perl_modules/Dahdi/Xpp/Mpp.pm51
1 files changed, 44 insertions, 7 deletions
diff --git a/xpp/perl_modules/Dahdi/Xpp/Mpp.pm b/xpp/perl_modules/Dahdi/Xpp/Mpp.pm
index 6e23260..a19e0fe 100644
--- a/xpp/perl_modules/Dahdi/Xpp/Mpp.pm
+++ b/xpp/perl_modules/Dahdi/Xpp/Mpp.pm
@@ -102,15 +102,10 @@ sub showinfo($$) {
}
}
-sub new($$$) {
- my $pack = shift || die;
+sub astribank_tool_cmd($) {
my $dev = shift || die;
- my $product = $dev->product;
my $usb_top;
- return undef unless $dev->is_astribank;
- return undef unless $dev->bus_type eq 'USB';
- return undef unless $product =~ /116./;
# Find USB bus toplevel
$usb_top = '/dev/bus/usb';
$usb_top = '/proc/bus/usb' unless -d $usb_top;
@@ -118,6 +113,17 @@ sub new($$$) {
my $name = $dev->priv_device_name();
die "$0: Unkown private device name" unless defined $name;
my $path = "$usb_top/$name";
+ return ($astribank_tool, '-D', "$path");
+}
+
+sub new($$$) {
+ my $pack = shift || die;
+ my $dev = shift || die;
+ my $product = $dev->product;
+
+ return undef unless $dev->is_astribank;
+ return undef unless $dev->bus_type eq 'USB';
+ return undef unless $product =~ /116./;
my $mppinfo = {
DEV => $dev,
HAS_MPP => 1,
@@ -130,11 +136,13 @@ sub new($$$) {
}
return $mppinfo unless $product =~ /116[12]/;
$mppinfo->{'MPP_TALK'} = 1;
+ my @cmd = astribank_tool_cmd($dev);
+ my $name = $dev->priv_device_name();
my $dbg_file = "$name";
$dbg_file =~ s/\W/_/g;
#$dbg_file = "/tmp/twinstar-debug-$dbg_file";
$dbg_file = "/dev/null";
- unless(open(F, "$astribank_tool -D '$path' 2> '$dbg_file' |")) {
+ unless(open(F, "@cmd 2> '$dbg_file' |")) {
warn "Failed running '$astribank_tool': $!";
return undef;
}
@@ -142,6 +150,7 @@ sub new($$$) {
local $_;
while(<F>) {
chomp;
+ #printf STDERR "'%s'\n", $_;
if(s/^INFO:\s*//) {
$mppinfo->{'PROTOCOL'} = $1 if /^protocol\s+version:\s*(\d+)/i;
} elsif(s/^EEPROM:\s*//) {
@@ -149,6 +158,9 @@ sub new($$$) {
$mppinfo->{'EEPROM_LABEL'} = $1 if /^label\s*:\s*([\w._'-]+)/i;
} elsif(s/^Extrainfo:\s+:\s*(.+?)$//) {
$mppinfo->{'EEPROM_EXTRAINFO'} = $1;
+ } elsif(s/^Capabilities:\s*TwinStar\s*:\s*(.+?)$//) {
+ my $cap = $1;
+ $mppinfo->{'TWINSTAR_CAPABLE'} = ($cap =~ /yes/i) ? 1 : 0;
} elsif(s/^TwinStar:\s*//) {
$mppinfo->{'TWINSTAR_PORT'} = $1 if /^connected\s+to\s*:\s*usb-(\d+)/i;
if(s/^USB-(\d+)\s*POWER\s*:\s*//) {
@@ -172,6 +184,31 @@ sub new($$$) {
return $mppinfo;
}
+sub mpp_setwatchdog($$) {
+ my $mppinfo = shift || die;
+ my $on = shift;
+ die "$0: Bad value '$on'" unless defined($on) && $on =~ /^[0-1]$/;
+ my $dev = $mppinfo->dev || die;
+ return undef unless defined $mppinfo->mpp_talk;
+ my $old = $mppinfo->tws_watchdog;
+ my @cmd = astribank_tool_cmd($dev);
+ print STDERR "DEBUG($on): '@cmd'\n";
+ system(@cmd, '-w', $on);
+ die "Running $astribank_tool failed: $?" if $?;
+}
+
+sub mpp_jump($) {
+ my $mppinfo = shift || die;
+ my $dev = $mppinfo->dev || die;
+ return undef unless defined $mppinfo->mpp_talk;
+ my $port = $mppinfo->twinstar_port;
+ $port = ($port == 1) ? 0 : 1;
+ die "Unknown TwinStar port" unless defined $port;
+ my @cmd = astribank_tool_cmd($dev);
+ system(@cmd, '-p', $port);
+ die "Running $astribank_tool failed: $?" if $?;
+}
+
sub mpp_addinfo($@) {
my $pack = shift || die;
my @devlist = @_;