summaryrefslogtreecommitdiff
path: root/xpp/utils/zconf/Zaptel/Hardware/USB.pm
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/utils/zconf/Zaptel/Hardware/USB.pm')
-rw-r--r--xpp/utils/zconf/Zaptel/Hardware/USB.pm45
1 files changed, 24 insertions, 21 deletions
diff --git a/xpp/utils/zconf/Zaptel/Hardware/USB.pm b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
index 4d87536..a5501d1 100644
--- a/xpp/utils/zconf/Zaptel/Hardware/USB.pm
+++ b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
@@ -8,6 +8,7 @@ package Zaptel::Hardware::USB;
# $Id$
#
use strict;
+use XppUtils;
use Zaptel::Hardware;
use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
@@ -30,25 +31,14 @@ my %usb_ids = (
'e4e4:1150' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi no-firmware' },
'e4e4:1151' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi USB-firmware' },
'e4e4:1152' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi FPGA-firmware' },
+ 'e4e4:1160' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular no-firmware' },
+ 'e4e4:1161' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular USB-firmware' },
+ 'e4e4:1162' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular FPGA-firmware' },
);
$ENV{PATH} .= ":/usr/sbin:/sbin:/usr/bin:/bin";
-# 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};
- }
-}
-
-my @devices;
my @xbuses = Zaptel::Xpp::xbuses('SORT_CONNECTOR');
sub usb_sorter() {
@@ -59,7 +49,10 @@ sub xbus_of_usb($) {
my $priv_device_name = shift;
my $dev = shift;
- my ($wanted) = grep { $priv_device_name eq $_->usb_devname } @xbuses;
+ my ($wanted) = grep {
+ defined($_->usb_devname) &&
+ $priv_device_name eq $_->usb_devname
+ } @xbuses;
return $wanted;
}
@@ -71,6 +64,9 @@ sub new($$) {
if(defined $xbus) {
$self->{XBUS} = $xbus;
$self->{LOADED} = 'xpp_usb';
+ } else {
+ $self->{XBUS} = undef;
+ $self->{LOADED} = undef;
}
Zaptel::Hardware::device_detected($self,
sprintf("usb:%s", $self->{PRIV_DEVICE_NAME}));
@@ -78,36 +74,43 @@ sub new($$) {
}
sub devices($) {
- my $pack = shift or die "Wasn't called as a class method\n";
- return sort usb_sorter @devices;
-}
-
-sub scan_devices($) {
my $pack = shift || die;
my $usb_device_list = "/proc/bus/usb/devices";
return unless (-r $usb_device_list);
+ my @devices;
open(F, $usb_device_list) || die "Failed to open $usb_device_list: $!";
- $/ = '';
+ local $/ = '';
while(<F>) {
my @lines = split(/\n/);
my ($tline) = grep(/^T/, @lines);
my ($pline) = grep(/^P/, @lines);
+ my ($sline) = grep(/^S:.*SerialNumber=/, @lines);
my ($busnum,$devnum) = ($tline =~ /Bus=(\w+)\W.*Dev#=\s*(\w+)\W/);
my $devname = sprintf("%03d/%03d", $busnum, $devnum);
my ($vendor,$product) = ($pline =~ /Vendor=(\w+)\W.*ProdID=(\w+)\W/);
+ my $serial;
+ if(defined $sline) {
+ $sline =~ /SerialNumber=(.*)/;
+ $serial = $1;
+ #$serial =~ s/[[:^print:]]/_/g;
+ }
my $model = $usb_ids{"$vendor:$product"};
next unless defined $model;
my $d = Zaptel::Hardware::USB->new(
+ IS_ASTRIBANK => ($model->{DRIVER} eq 'xpp_usb')?1:0,
+ BUS_TYPE => 'USB',
PRIV_DEVICE_NAME => $devname,
VENDOR => $vendor,
PRODUCT => $product,
+ SERIAL => $serial,
DESCRIPTION => $model->{DESCRIPTION},
DRIVER => $model->{DRIVER},
);
push(@devices, $d);
}
close F;
+ @devices = sort usb_sorter @devices;
}
1;