G. Wade Johnson > Device-USB-0.36 > Device::USB

Download:
Device-USB-0.36.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  5
Open  6
View/Report Bugs
Module Version: 0.36   Source  

NAME ^

Device::USB - Use libusb to access USB devices.

VERSION ^

Version 0.36

SYNOPSIS ^

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 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, functioality, Device::USB provides a few convenience features that are intended to produce a more Perl-ish interface.

These features include:

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:

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.

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 Google Code http://code.google.com/p/perl-device-usb/. More information on the project, including installation help is avaliable 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.

syntax highlighting: