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 <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.

