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

Download:
Device-USB-Win32Async-0.36.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.36   Source  

NAME ^

Device::USB::Win32Async - Add async functions to Device::USB

VERSION ^

Version 0.36

SYNOPSIS ^

Device::USB provides a Perl wrapper around the libusb library.

Device::USB::Win32Async adds the async functions from libusb-win32 to Device::USB. This is only available for Win32 systems.

    use Device::USB;
    use Device::USB::Win32Async;

    my $usb = Device::USB->new();
    my $dev = $usb->find_device( $VENDOR, $PRODUCT );

    ...

    my $Context;                # Context variable for asynch I/O
    my $Buffer;                 # Buffer for results (input) or to transmit (output)
    my $NumBytes = 5000;        # of bytes to transfer

    $dev->bulk_setup_async($Context,$Endpoint);
    $Status = $dev->submit_async($Context,$Buffer,$NumBytes);   # Start the transfer

    while( 1 ) {
        $Response = $dev->reap_async_nocancel($Context,50);     # 50 mS wait time

        last
            if $Response != Device::USB::Device::ETIMEDOUT;
        #
        # Do other tasks while waiting, such as update the GUI
        #
        # For example, a TK program might call $MainWindow->update();
        #
        <Other Task code>
        }

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

Generally, define a $Context variable which the library will use to keep track of the asynchronous call. Activate the transfer (read or write, depending on the endpoint) using submit_async() as shown, then loop calling reap_async_nocancel() while checking the return code.

You can have any number of async operations pending on different endpoints - just define multiple context variables as needed (ie - $Context1, $Context2, &c).

isochronous_setup_async($Context,$Endpoint,$Packetsize)

Setup a Context for use in subsequent asynchronous operations

Context

A scalar to store opaque information about the operation

Endpoint

The endpoint the asynchronous operation will use

Packetsize

The size of the isochronous packets

Returns 0 on success, < 0 on error (consult errno.h for explanation)

bulk_setup_async($Context,$Endpoint)

Setup a Context for use in subsequent asynchronous operations

Context

A scalar to store opaque information about the operation

Endpoint

The endpoint the asynchronous operation will use

Returns 0 on success, < 0 on error (consult errno.h for explanation)

interrupt_setup_async($Context,$Endpoint)

Setup a Context for use in subsequent asynchronous operations

Context

A scalar to store opaque information about the operation

Endpoint

The endpoint the asynchronous operation will use

Returns 0 on success, < 0 on error (consult errno.h for explanation)

submit_async($Context,$Buffer,$Size)

Start an asynchronous I/O operation

Context

A previously prepared context generated by one of the xxx_setup_async functions above

Buffer

A string buffer to receive the resulting data

Size

The number of bytes to pre-allocate to hold the incoming data.

Returns 0 on success, < 0 on error (consult errno.h for explanation)

reap_async($Context,$Timeout)

Get the results of an asynchronous operation and cancel if not complete.

Context

A previously prepared context generated by one of the xxx_setup_async functions above

Timeout

Number of milliseconds to wait before timeout

Returns 0 on success, < 0 on error (consult errno.h for explanation)

reap_async_nocancel($Context,$Timeout)

Get the results of an asynchronous operation, but continue request (return Device::USB::Device::ETIMEDOUT => -116) if not complete yet.

Context

A previously prepared context generated by one of the xxx_setup_async functions above

Timeout

Number of milliseconds to wait before timeout

Returns 0 on success, < 0 on error (consult errno.h for explanation)

cancel_async($Context)

Cancel an asynchronous operation in progress

Context

A previously prepared context generated by one of the xxx_setup_async functions above

Returns 0 on success, < 0 on error (consult errno.h for explanation)

free_async($Context)

Free up resources allocated for the asynchrounous context

Context

A previously prepared context generated by one of the xxx_setup_async functions above

Returns 0 on success, < 0 on error (consult errno.h for explanation)

ETIMEDOUT

Constant representing a return from an asynchronous routine due to timeout.

DEPENDENCIES ^

Carp, Inline::C, and Device::USB.

Also depends on the libusb-win32 library.

AUTHOR ^

Rajstennaj Barrabas wrote the code.

The module is maintained by G. Wade Johnson (wade at anomaly dot org).

BUGS ^

Please report any bugs or feature requests to bug-device-usb-win32async@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Device::USB::Win32Async. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

LIMITATIONS ^

This module depends on extensions to the libusb library added in the LibUsb-Win32 library. As such, the module is only expected to work on a Win32-based system.

COPYRIGHT & LICENSE ^

Copyright 2009 Rajstennaj Barrabas

This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5.10.0.

syntax highlighting: