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. Returnsundef
on error unlessautodie
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 unlessautodie
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. Whenread_data
returns successfully the first time,renew_on_timeout
is reset and timeout is set toundef
, but can be manually adjusted.For reasons unknown to me, Valve's Steam controller needs a couple of
hid_open
calls beforehid_read
manages to read data. None of the priorhid_open
calls fail, they just block indefinitely. For devices that ought to report periodically what they're up to, set thetimeout
innew
to a sensible value and callrenew_on_timeout
on the handle. The followinghid_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
The API of this module was modelled after Device::FTDI by Pavel Shaydo.
AUTHOR
Ahmad Fatoum <athreef@cpan.org>
, 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.