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.pm81
1 files changed, 42 insertions, 39 deletions
diff --git a/xpp/utils/zconf/Zaptel/Hardware/USB.pm b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
index bbf00fe..0f2024b 100644
--- a/xpp/utils/zconf/Zaptel/Hardware/USB.pm
+++ b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
@@ -12,21 +12,28 @@ use Zaptel::Hardware;
use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
-my @idlist = qw(
- e4e4:1130
- e4e4:1131
- e4e4:1132
- e4e4:1140
- e4e4:1141
- e4e4:1142
- e4e4:1150
- e4e4:1151
- e4e4:1152
+our @ISA = qw(Zaptel::Hardware);
+
+my %usb_ids = (
+ # from wcusb
+ '06e6:831c' => { DRIVER => 'wcusb', DESCRIPTION => 'Wildcard S100U USB FXS Interface' },
+ '06e6:831e' => { DRIVER => 'wcusb2', DESCRIPTION => 'Wildcard S110U USB FXS Interface' },
+ '06e6:b210' => { DRIVER => 'wc_usb_phone', DESCRIPTION => 'Wildcard Phone Test driver' },
+
+ # from xpp_usb
+ 'e4e4:1130' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-8/16 no-firmware' },
+ 'e4e4:1131' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-8/16 USB-firmware' },
+ 'e4e4:1132' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-8/16 FPGA-firmware' },
+ 'e4e4:1140' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-BRI no-firmware' },
+ 'e4e4:1141' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-BRI USB-firmware' },
+ 'e4e4:1142' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-BRI FPGA-firmware' },
+ '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' },
);
$ENV{PATH} .= ":/usr/sbin:/sbin:/usr/bin:/bin";
-my $prog = 'lsusb';
# Accessors (miniperl does not have Class:Accessor)
our $AUTOLOAD;
@@ -45,21 +52,14 @@ my @devices;
my @xbuses = Zaptel::Xpp::xbuses('SORT_CONNECTOR');
sub usb_sorter() {
- return
- sprintf("%03d/%03d", $a->bus, $a->dev) cmp
- sprintf("%03d/%03d", $b->bus, $b->dev);
+ return $a->hardware_name cmp $b->hardware_name;
}
-sub xbus_of_usb($$) {
- my $bus = shift;
+sub xbus_of_usb($) {
+ my $priv_device_name = shift;
my $dev = shift;
- my ($wanted) = grep {
- my $b = $_->usb_bus;
- my $d = $_->usb_dev;
- defined($b) && $b == $bus &&
- defined($d) && $d == $dev
- } @xbuses;
+ my ($wanted) = grep { $priv_device_name eq $_->usb_devname } @xbuses;
return $wanted;
}
@@ -67,14 +67,13 @@ sub new($$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $self = { @_ };
bless $self, $pack;
- my $xbus = xbus_of_usb($self->bus, $self->dev);
+ my $xbus = xbus_of_usb($self->priv_device_name);
if(defined $xbus) {
$self->{XBUS} = $xbus;
- $self->{DRIVER} = 'xpp_usb';
+ $self->{LOADED} = 'xpp_usb';
}
- my $hardware_name = sprintf("usb:%03d/%03d", $self->{BUS}, $self->{DEV});
- $self->{HARDWARE_NAME} = $hardware_name;
- Zaptel::Hardware::device_detected($self, $hardware_name);
+ Zaptel::Hardware::device_detected($self,
+ sprintf("usb:%s", $self->{PRIV_DEVICE_NAME}));
return $self;
}
@@ -85,20 +84,24 @@ sub devices($) {
sub scan_devices($) {
my $pack = shift || die;
- open(F, "$prog|") || die "$0: Failed running $prog: $!";
+ my $usb_device_list = "/proc/bus/usb/devices";
+ open(F, $usb_device_list) || die "Failed to open $usb_device_list: $!";
+ $/ = '';
while(<F>) {
- chomp;
- my ($bus,$dev,$id) = (split(/\s+/))[1,3,5];
- $dev =~ s/://;
- $bus =~ s/^0*//;
- $dev =~ s/^0*//;
- next unless grep { lc($id) eq $_ } @idlist;
- my($vendor,$product) = split(/:/, $id);
+ my @lines = split(/\n/);
+ my ($tline) = grep(/^T/, @lines);
+ my ($pline) = grep(/^P/, @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 $model = $usb_ids{"$vendor:$product"};
+ next unless defined $model;
my $d = Zaptel::Hardware::USB->new(
- BUS => $bus,
- DEV => $dev,
- VENDOR => $vendor,
- PRODUCT => $product,
+ PRIV_DEVICE_NAME => $devname,
+ VENDOR => $vendor,
+ PRODUCT => $product,
+ DESCRIPTION => $model->{DESCRIPTION},
+ DRIVER => $model->{DRIVER},
);
push(@devices, $d);
}