/usr/lib/perl5/Device/USB/DevInterface.pm is in libdevice-usb-perl 0.36-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | package Device::USB::DevInterface;
require 5.006;
use warnings;
use strict;
use Carp;
=head1 Device::USB::DevInterface
This class encapsulates a USB Device Interface and the methods that object
would support.
=head1 NAME
Device::USB::DevInterface - Access a device interface returned by libusb.
=head1 VERSION
Version 0.36
=cut
our $VERSION=0.36;
=head1 SYNOPSIS
Device::USB:DevInterface provides a Perl object for accessing an
interface of a configuration of a USB device using the libusb library.
use Device::USB;
my $usb = Device::USB->new();
my $dev = $usb->find_device( $VENDOR, $PRODUCT );
printf "Device: %04X:%04X\n", $dev->idVendor(), $dev->idProduct();
$dev->open();
my $cfg = $dev->config()->[0];
my $inter = $cfg->interfaces()->[0];
print "Interface:", $inter->bInterfaceNumber(),
" name: ", $dev->get_string_simple($iter->iInterface()),
": endpoint count: ", $inter->nNumEndpoints(), "\n";
See USB specification for an explanation of the attributes of an
interface.
=head1 DESCRIPTION
This module defines a Perl object that represents the data associated with
a USB device configuration's interface. The object provides read-only access
to the important data associated with the interface.
=head2 METHODS
There are several accessor methods that return data from the interface.
Each is named after the field that they return. These accessors include:
=cut
# I need to build a lot of accessors
sub _make_descr_accessor
{
my $name = shift;
## no critic (ProhibitStringyEval)
return eval <<"EOE";
sub $name
{
my \$self = shift;
return \$self->{$name};
}
EOE
}
=over 4
=item bInterfaceNumber
The 0-based number of this interface.
=item bAlternateSetting
Value used to select this alternate setting for the interface specified
in bInterfaceNumber.
=item bNumEndpoints
Number of endpoints (excluding endpoint 0) available on this interface.
If the value is 0, only the control interface is supported.
=item bInterfaceClass
Class code as specified by the USB-IF. A value of 0xff is a vendor-specific
interface class.
=item bInterfaceSubClass
Subclass code specified by the USB-IF. If bInterfaceClass is not 0xff,
this field must use only subclasses specified by the USB-IF.
=item bInterfaceProtocol
The InterfaceProtocol as specified by the USB-IF. A value of 0xff uses
a vendor-specific protocol.
=item iInterface
Returns the index of the string descriptor describing this interface.
The string can be retrieved using the method
C<Device::USB::Device::get_string_simple>.
=cut
_make_descr_accessor( 'bInterfaceNumber' );
_make_descr_accessor( 'bAlternateSetting' );
_make_descr_accessor( 'bNumEndpoints' );
_make_descr_accessor( 'bInterfaceClass' );
_make_descr_accessor( 'bInterfaceSubClass' );
_make_descr_accessor( 'bInterfaceProtocol' );
_make_descr_accessor( 'iInterface' );
=item endpoints
Returns a list of endpoint objects associated with this interface.
=cut
sub endpoints
{
my $self = shift;
return wantarray ? @{$self->{endpoints}} : $self->{endpoints};
}
=back
=head1 DIAGNOSTICS
This is an explanation of the diagnostic and error messages this module
can generate.
=head1 DEPENDENCIES
This module depends on the Carp, Inline and Inline::C modules, as well as
the strict and warnings pragmas. Obviously, libusb must be available since
that is the entire reason for the module's existence.
=head1 AUTHOR
G. Wade Johnson (gwadej at cpan dot org)
Paul Archer (paul at paularcher dot org)
Houston Perl Mongers Group
=head1 BUGS
Please report any bugs or feature requests to
C<bug-device-usb@rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Device::USB>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 ACKNOWLEDGEMENTS
Thanks go to various members of the Houston Perl Mongers group for input
on the module. But thanks mostly go to Paul Archer who proposed the project
and helped with the development.
=head1 COPYRIGHT & LICENSE
Copyright 2006-2013 Houston Perl Mongers
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1;
|