Provided by: libdevice-usb-perl_0.38-2_amd64 bug

NAME

       Device::USB - Use libusb to access USB devices. (DEPRECATED)

VERSION

       Version 0.38

SYNOPSIS

       Device::USB has now been superceded by USB::LibUSB <https://metacpan.org/pod/USB::LibUSB>,
       which supports the v1.0 libusb API.

       Device::USB provides a Perl wrapper around the libusb library. This supports Perl code
       controlling and accessing USB devices.

           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();
           print "Manufactured by ", $dev->manufacturer(), "\n",
                 " Product: ", $dev->product(), "\n";

           $dev->set_configuration( $CFG );
           $dev->control_msg( @params );
           ...

       See the libusb manual for more information about most of the methods. The functionality is
       generally the same as the libusb function whose name is the method name prepended with
       "usb_".

DESCRIPTION

       This module is deprecated as of version 0.38. I have not had the time or need to update
       the module, and no one has been willing to take it over.

       This module provides a Perl interface to the C library libusb. This library supports a
       relatively full set of functionality to access a USB device. In addition to the libusb
       functionality Device::USB provides a few convenience features that are intended to produce
       a more Perl-ish interface.

       These features include:

       •   Using the library initializes it, no need to call the underlying usb_init function.

       •   Object interface reduces namespace pollution and provides a better interface to the
           library.

       •   The find_device method finds the device associated with a vendor id and product id and
           creates an appropriate Device::USB::Device object to manipulate the USB device.

       •   Object interfaces to the bus and device data structures allowing read access to
           information about each.

Device::USB

       This class provides an interface to the non-bus and non-device specific functions of the
       libusb library. In particular, it provides interfaces to find busses and devices. It also
       provides convenience methods that simplify some of the tasks above.

   CONSTANTS
       This class provides a set of constants for the defined device classes. The constants
       defined at this time are:

       •   CLASS_PER_INSTANCE

       •   CLASS_AUDIO

       •   CLASS_COMM

       •   CLASS_HID

       •   CLASS_PRINTER

       •   CLASS_MASS_STORAGE

       •   CLASS_HUB

       •   CLASS_DATA

       •   CLASS_VENDOR_SPEC

   FUNCTIONS
       new Create a new Device::USB object for accessing the library.

       debug_mode
           This class method enables low-level debugging messages from the library interface
           code.

           level
               0 disables debugging, 1 enables some debug messages, and 2 enables verbose debug
               messages

               Any other values are forced to the nearest endpoint.

       find_busses
           Returns the number of changes since previous call to the function: the number of
           busses added or removed.

       find_devices
           Returns the number of changes since previous call to the function: the number of
           devices added or removed. Should be called after find_busses.

       find_device
           Find a particular USB device based on the vendor and product ids. If more than one
           device has the same product id from the same vendor, the first one found is returned.

           vendor
               the vendor id

           product
               product id for that vendor

           returns a device reference or undef if none was found.

       find_device_if
           Find a particular USB device based on the supplied predicate coderef. If more than one
           device would satisfy the predicate, the first one found is returned.

           pred
               the predicate used to select a device

           returns a device reference or undef if none was found.

       list_devices
           Find all devices matching a vendor id and optional product id. If called with no
           parameters, returns a list of all devices. If no product id is given, returns all
           devices found with the supplied vendor id. If a product id is given, returns all
           devices matching both the vendor id and product id.

           vendor
               the optional vendor id

           product
               optional product id for that vendor

           returns a list of devices matching the supplied criteria or a reference to that array
           in scalar context

       list_devices_if
           This method provides a more flexible interface for finding devices. It takes a single
           coderef parameter that is used to test each discovered device. If the coderef returns
           a true value, the device is returned in the list of matching devices, otherwise it is
           not.

           pred
               coderef to test devices.

           For example,

               my @devices = $usb->list_devices_if(
                   sub { Device::USB::CLASS_HUB == $_->bDeviceClass() }
               );

           Returns all USB hubs found. The device to test is available to the coderef in the $_
           variable for simplicity.

       list_busses
           Return the complete list of information after finding busses and devices.

           By using this function, you do not need to do the find_* calls yourself.

           returns a reference to an array of busses.

       get_busses
           Return the complete list of information after finding busses and devices.

           Before calling this function, remember to call find_busses and find_devices.

           returns a reference to an array of busses.

LIBRARY INTERFACE

       The raw api of the libusb library is also :

       DeviceUSBDebugLevel()
       libusb_init()
       libusb_find_busses()
       libusb_find_devices()
       libusb_get_busses()
       libusb_open(void *dev)
       libusb_close(void *dev)
       libusb_set_configuration(void *dev, int configuration)
       libusb_set_altinterface(void *dev, int alternate)
       libusb_clear_halt(void *dev, unsigned int ep)
       libusb_reset(void *dev)
       libusb_get_driver_np(void *dev, int interface, char *name, unsigned int namelen)
       libusb_detach_kernel_driver_np(void *dev, int interface)
       libusb_claim_interface(void *dev, int interface)
       libusb_release_interface(void *dev, int interface)
       libusb_control_msg(void *dev, int requesttype, int request, int value, int index, char
       *bytes, int size, int timeout)
       libusb_get_string(void *dev, int index, int langid, char *buf, size_t buflen)
       libusb_get_string_simple(void *dev, int index, char *buf, size_t buflen)
       libusb_get_descriptor(void *dev, unsigned char type, unsigned char index, char *buf, int
       size)
       libusb_get_descriptor_by_endpoint(void *dev, int ep, unsigned char type, unsigned char
       index, char *buf, int size)
       libusb_bulk_write(void *dev, int ep, char *bytes, int size, int timeout)
       libusb_bulk_read(void *dev, int ep, char *bytes, int size, int timeout)
       libusb_interrupt_write(void *dev, int ep, char *bytes, int size, int timeout)
       libusb_interrupt_read(void *dev, int ep, char *bytes, int size, int timeout)
       lib_get_usb_busses()
           Return the complete list of information after finding busses and devices.

           Before calling this function, remember to call find_busses and find_devices.

           returns a reference to an array of busses.

       lib_list_busses()
           Return the complete list of information after finding busses and devices.

           By using this function, you do not need to do the find_* calls yourself.

           returns a reference to an array of busses.

       lib_find_usb_device( int vendor, int product )
           Find a particular device

              vendor  - the vendor id
              product - product id for that vendor

           returns a pointer to the device if it is found, NULL otherwise.

       lib_debug_mode( int unsafe_level )
           Set debugging level: 0: off, 1: some messages, 2: verbose Values outside range are
           forced into range.

DIAGNOSTICS

       This is an explanation of the diagnostic and error messages this module can generate.

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.

AUTHOR

       G. Wade Johnson (gwadej at cpan dot org) Paul Archer (paul at paularcher dot org)

       Houston Perl Mongers Group

       Original author: David Davis

BUGS

       Please report any bugs or feature requests to "bug-device-usb@rt.cpan.org", or through the
       web interface at <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.

FOR MORE INFORMATION

       The project is hosted at github <https://github.com/gwadej/perl-device-usb/>.  More
       information on the project, including installation help is available on the Wiki.

LIMITATIONS

       So far, this module has only been tested on Linux. It should work on any OS that supports
       the libusb library. Several people have reported problems compiling the module on Windows.
       In theory, it should be possible to make the library work with LibUsb-Win32
       <http://libusb-win32.sourceforge.net/>.  Without access to a Windows development system, I
       can't make those changes.

       The Interfaces and Endpoints are not yet proper objects. The code to extract this
       information is not yet written.

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.

       Thanks to Josep Monés Teixidor for fixing the "bInterfaceClass" bug.

       Thanks to Mike McCauley for support of "usb_get_driver_np" and
       "usb_detach_kernel_driver_np".

       Thanks to Vadim Mikhailov for fixing a compile problem with VC6 on Windows and then
       chipping in again for VS 2005 on Windows, and yet again to fix warnings on C99-compliant
       compilers.

       Thanks to John R. Hogheruis for information about modifying the Inline parameters for
       compiling with Strawberry Perl on Windows.

       Thanks to Tony Shadwick for helping me resolve a problem with bulk_read and
       interrupt_read.

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.