Take me over?
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)
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.