summaryrefslogtreecommitdiff
path: root/xpp/utils/zconf/Zaptel/Hardware/USB.pm
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-05-17 19:34:32 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-05-17 19:34:32 +0000
commit5b68efc40a339a8ae3d9d137c7b9af809c3f5519 (patch)
tree365f4c82a3123daebaf9a8d41817916c1dd74bf4 /xpp/utils/zconf/Zaptel/Hardware/USB.pm
parent5174fc292d1a6184271a39aea2826b57f177454e (diff)
* Tested with zaptel-1.2.17.1
* Add D-Channel TX, RX and BAD frames count in /proc/xpp/XBUS-*/XPD-*/bri_info * Adjust output of xpp_sync script. Pad for 8 port BRI. * Added a debugging module parport_debug (not compiled by default). * Added an optional patch to zaptel: - compiles only if ZAPTEL_SYNC_TICK is defined - Allow interested driver to register for "sync" notification. - Does not affect drivers that do not use this feature. * Added external synchronization feature: - Only if ZAPTEL_SYNC_TICK feature is compiled in - Than XPP may be synchronized by another card (e.g: an Astribank with FXS can be synchronized by a Digium PRI card). - May be enabled/disabled in runtime via the 'sync_tick_active' module parameter to the xpp.ko module. * Fixed a potential bug in D-Channel hexdump printing. * New visual indications in BRI leds: - Constant ON RED/GREEN: Shows the port type -- NT/TE. - Very fast "double blink": Layer1 work, no D-Channel yet. - Steady blinking (1/2 sec): D-Channel trafic detected. * xpp_fxloader moved to /usr/share/zaptel . * adj_clock removed: never really used. * Debugfs code now disabled by default. * Now we have Zaptel::Hardware and a sample zaptel_hardware script (not (installed by default). * We also have a sample perl zapconf (not installed by default) which aims at replacing genzaptelconf (sans the modules detection). git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@2529 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp/utils/zconf/Zaptel/Hardware/USB.pm')
-rw-r--r--xpp/utils/zconf/Zaptel/Hardware/USB.pm108
1 files changed, 108 insertions, 0 deletions
diff --git a/xpp/utils/zconf/Zaptel/Hardware/USB.pm b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
new file mode 100644
index 0000000..bbf00fe
--- /dev/null
+++ b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
@@ -0,0 +1,108 @@
+package Zaptel::Hardware::USB;
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2007, Xorcom
+# This program is free software; you can redistribute and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id$
+#
+use strict;
+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
+ );
+
+
+$ENV{PATH} .= ":/usr/sbin:/sbin:/usr/bin:/bin";
+my $prog = 'lsusb';
+
+# 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() {
+ return
+ sprintf("%03d/%03d", $a->bus, $a->dev) cmp
+ sprintf("%03d/%03d", $b->bus, $b->dev);
+}
+
+sub xbus_of_usb($$) {
+ my $bus = shift;
+ my $dev = shift;
+
+ my ($wanted) = grep {
+ my $b = $_->usb_bus;
+ my $d = $_->usb_dev;
+ defined($b) && $b == $bus &&
+ defined($d) && $d == $dev
+ } @xbuses;
+ return $wanted;
+}
+
+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);
+ if(defined $xbus) {
+ $self->{XBUS} = $xbus;
+ $self->{DRIVER} = '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);
+ return $self;
+}
+
+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;
+ open(F, "$prog|") || die "$0: Failed running $prog: $!";
+ 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 $d = Zaptel::Hardware::USB->new(
+ BUS => $bus,
+ DEV => $dev,
+ VENDOR => $vendor,
+ PRODUCT => $product,
+ );
+ push(@devices, $d);
+ }
+ close F;
+}
+
+1;