The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Linux::Input - Linux input event interface

SYNOPSIS

Example: 1 joystick using event API

  my $js1 = Linux::Input->new('/dev/input/event3');
  while (1) {
    while (my @events = $js1->poll(0.01)) {
      foreach (@event) {
      }
    }
  }

Example: 2 joysticks using joystick API (different event structure)

  my $js1 = Linux::Input::Joystick->new('/dev/input/js0');
  my $js2 = Linux::Input::Joystick->new('/dev/input/js1');
  my $selector = IO::Select->new();
  $selector->add($js1->fh);
  $selector->add($js2->fh);

  while (my $fh = $selector->can_read) {
    my @event;
    if ($fh == $js1->fh) {
      @event = $js1->poll()
    } elsif ($fh == $js2->fh) {
      @event = $js2->poll()
    }
    foreach (@event) {
      # work
    }
  }

Example 3: monitor all input devices

  use File::Basename qw(basename);
  my @inputs = map { "/dev/input/" . basename($_) }
    </sys/class/input/event*>;

  my @dev;
  my $selector = IO::Select->new();
  foreach (@inputs) {
    my $device = Linux::Input->new($_);
    $selector->add($device->fh);
    push @dev, $device;
  }

  while (my $fh = $selector->can_read) {
    # work
  }

Example 4: testing for events on the command line

  # information on what event queue belongs to what device
  cat /proc/bus/input/devices

  # verify that events are coming in
  sudo evtest.pl /dev/input/event*

DESCRIPTION

Linux::Input provides a pure-perl interface to the Linux kernel's input event interface. It basically provides a uniform API for getting realtime data from all the different input devices that Linux supports.

For more information, please read: /usr/src/linux/Documentation/input/input.txt.

Class Methods

new

This method takes one filename as a parameter and returns a Linux::Input object.

Example:

  my $js1 = Linux::Input->new('/dev/input/event3');

entity_bytes

This method returns the size of the event structure on this system.

Example:

  my $struct_size = Linux::Input->entity_bytes();

timeout

This method can be used to read or specify the default timeout value for the select()'ing on filehandles that happens within the module. The default value is 0.01.

Object Methods

fh

This method returns the filehandle of a Linux::Input object.

Example:

  my $filehandle = $js->fh();

selector

This method is used internally to return the IO::Select object that's been assigned to the current Linux::Input object.

poll

This method takes a $timeout value as a parameter and returns a list of @events for the current Linux::Input object. Each event is a hashref with the following key/value pairs.

tv_sec
tv_usec
type
code
value

Example:

  my @events = $js->poll(0.01);

AUTHOR

John Beppu (beppu@cpan.org)

SEE ALSO

Linux::Input::Joystick, Class::Data::Inheritable, IO::Select, IO::File