NAME
Device::HID - Perl Interface to HIDAPI
SYNOPSIS
use Device::HID;
use Data::Hexdumper;
my $dev = Device::HID->new(vendor => 0x1337, product => 0x4242) or die "No such device!\n";
$dev->timeout = 0.1;
my $buf;
while (defined (my $in = $dev->read_data($buf, $len)) {
if ($in == 0) {
print "Timeout!\n";
next;
}
print Hexdumper($buf), "\n";
}
METHODS AND ARGUMENTS
new()
Opens specified device and returns the corresponding object
reference. Returns undef if an attempt to open the device has failed.
Accepts following parameters:
vendor
Vendor ID.
product
Product ID.
serial
Device serial number. By default undefined.
autodie
if true, methods on this instance will use "croak" in Carp on
failure. Default is 0, where undef is returned on failure.
read_data
$dev->read_data($buffer, $size)
Reads data from the device (up to $size bytes) and stores it in
$buffer.
Returns number of bytes read or 0 on timeout. Returns undef on error
unless autodie is in effect.
timeout
$dev->timeout = 0.1; # seconds (=100 ms)
printf "Timeout is %d\n", $dev->timeout;
Lvalue subroutine that can be used to set and get the timeout in
seconds for read_data. Granularity is 1 millisecond.
Default value is undef, which means wait indefinitely.
write_data
$dev->write_data($reportid, $data)
Writes data to the device.
Returns actual number of bytes written or undef on error unless
autodie is in effect.
autodie
$dev->autodie = 1;
Lvalue subroutine that can be used to set whether the module "croak"
in Carps on failure.
Default value is 0.
renew_on_timeout
$dev->renew_on_timeout;
Closes HIDAPI handle and opens a new one transparently at read_data
timeout and retries reading. When read_data returns successfully the
first time, renew_on_timeout is reset and timeout is set to undef,
but can be manually adjusted.
For reasons unknown to me, Valve's Steam controller needs a couple of
hid_open calls before hid_read manages to read data. None of the
prior hid_open calls fail, they just block indefinitely. For devices
that ought to report periodically what they're up to, set the timeout
in new to a sensible value and call renew_on_timeout on the handle.
The following hid_read will then be retried till data can be read.
TODO
Use hid_error in croak/carp. Wrap the other information retrieval
function. Till then, you can use the XSUBs in Device::HID::XS.
GIT REPOSITORY
http://github.com/athreef/Device-HID
SEE ALSO
Device::HID::XS
Alien::HIDAPI
The API of this module was modelled after Device::FTDI by Pavel Shaydo.
AUTHOR
Ahmad Fatoum <
[email protected]>,
http://a3f.at
COPYRIGHT AND LICENSE
Copyright (C) 2017 Ahmad Fatoum
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.