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.