bionic (4) lirc.4.gz

Provided by: manpages_4.15-1_all bug

NAME

       lirc - lirc devices

DESCRIPTION

       The  /dev/lirc* character devices provide a low-level bi-directional interface to infra-red (IR) remotes.
       When receiving data, the driver works in two different modes depending on the underlying hardware.

       Some hardware (typically TV-cards) decodes the IR signal internally  and  just  provides  decoded  button
       presses  as  integer  values.   Drivers  for this kind of hardware work in LIRC_MODE_LIRCCODE mode.  Such
       hardware usually does not support sending IR signals.  Furthermore, it usually only works with a specific
       remote which is bundled with, for example, a TV-card.

       Other  hardware  provides  a stream of pulse/space durations.  Such drivers work in LIRC_MODE_MODE2 mode.
       Sometimes, this kind of hardware also supports sending IR data.  Such hardware can be used with  (almost)
       any kind of remote.

       The LIRC_GET_REC_MODE ioctl (see below) allows probing for the mode.

   Reading input with the LIRC_MODE_MODE2 drivers
       In  the LIRC_MODE_MODE2 mode, the data returned by read(2) provides 32-bit values representing a space or
       a pulse duration, by convention typed as lirc_t.  The time of the duration (microseconds) is  encoded  in
       the lower 24 bits.  The upper 8 bit reflects the type of package:

       LIRC_MODE2_SPACE.
           Value reflects a space duration (microseconds).

       LIRC_MODE2_PULSE.
           Value reflects a pulse duration (microseconds).

       LIRC_MODE2_FREQUENCY.
           Value reflects a frequency (Hz); see the LIRC_SET_MEASURE_CARRIER_MODE ioctl.

       LIRC_MODE2_TIMEOUT.
           The package reflects a timeout; see the LIRC_SET_REC_TIMEOUT_REPORTS ioctl.

   Reading input with the
       LIRC_MODE_LIRCCODE drivers

       In the LIRC_MODE_LIRCCODE mode, the data returned by read(2) reflects decoded button presses.  The length
       of each packet can be retrieved using the LIRC_GET_LENGTH ioctl.  Reads must be done in  blocks  matching
       the bit count returned by the LIRC_GET_LENGTH ioctl, rounded up so it matches full bytes.

   Sending data
       When  sending data, only the LIRC_MODE_PULSE mode is supported.  The data written to the character device
       using write(2) is a pulse/space sequence of integer values.  Pulses and spaces are only marked implicitly
       by  their  position.  The data must start and end with a pulse, thus it must always include an odd number
       of samples.  The write(2) function blocks until the data has been transmitted by the hardware.   If  more
       data is provided than the hardware can send, the write(2) call fails with the error EINVAL

IOCTL COMMANDS

       The  complete  list of ioctl commands is maintained in the kernel documentation, see SEE ALSO.  The ioctl
       commands presented here is a subset of the kernel documentation.

       The LIRC device's ioctl definition is bound by the ioctl function definition of  struct  file_operations,
       leaving  us  with  an  unsigned int for the ioctl command and an unsigned long for the argument.  For the
       purposes of ioctl portability across 32-bit and 64-bit architectures, these values are  capped  to  their
       32-bit sizes.

       #include <lirc/include/media/lirc.h>    /* But see BUGS */
       int ioctl(int fd, int cmd, ...);

       The  following  ioctls  can  be  used to probe or change specific lirc hardware settings.  Many require a
       third argument, usually an int.  referred to below as val.

       In general, each driver should have a default set of settings.  The driver implementation is expected  to
       re-apply  the default settings when the device is closed by user space, so that every application opening
       the device can rely on working with the default settings initially.

   Always Supported Commands
       /dev/lirc* devices always support the following commands:

       LIRC_GET_FEATURES (void)
           Returns a bit mask of combined features bits; see FEATURES.  Some drivers have dynamic features which
           are  not  updated  until  after  an init() command.  If a driver does not announce support of certain
           features, calling of the corresponding ioctls is undefined.

       LIRC_GET_REC_MODE
           Return the receive mode, which will be one of:

           LIRC_MODE_MODE2 (void)
                  The driver returns a sequence of pulse/space durations.

           LIRC_MODE_LIRCCODE
                  The driver returns integer values, each of which represents a decoded button press.

       If a device returns an error code for LIRC_GET_REC_MODE, it is safe to assume it is not a lirc device.

   Optional Commands
       Some lirc devices support commands listed below.  Unless otherwise stated,  these  fail  with  the  error
       ENOIOCTLCMD  or  with  the error ENOSYS if the operation isn't supported, or with the error EINVAL if the
       operation failed.

       LIRC_SET_REC_MODE (int)
              Set the receive mode.  val is either LIRC_MODE_LIRCCODE or LIRC_MODE_MODE2.

       LIRC_GET_LENGTH (void)
              Return the length of the returned codes for LIRC_MODE_LIRCCODE-type drivers, otherwise  fail  with
              the error ENOIOCTLCMD.

       LIRC_GET_SEND_MODE (void)
              Return the send mode.  Currently, only LIRC_MODE_PULSE is supported.

       LIRC_SET_SEND_MODE (int)
              Set the send mode.  Currently serves no purpose since only LIRC_MODE_PULSE is supported.

       LIRC_GET_SEND_CARRIER (void)
              Get the modulation frequency (Hz).

       LIRC_SET_SEND_CARRIER (int)
              Set the modulation frequency.  The argument is the frequency (Hz).

       LIRC_GET_SEND_CARRIER (void)
              Get the modulation frequency used when decoding (Hz).

       SET_SEND_DUTY_CYCLE (int)
              Set  the carrier duty cycle.  val is a number in the range [0,100] which describes the pulse width
              as a percentage of the total cycle.  Currently, no special meaning is defined for 0  or  100,  but
              the values are reserved for future use.

       LIRC_GET_MIN_TIMEOUT (void), LIRC_GET_MAX_TIMEOUT (void)
              Some  devices  have  internal  timers that can be used to detect when there's no IR activity for a
              long time.  This can help lircd(8) in detecting that an IR signal is finished and can speed up the
              decoding  process.   These  operations return integer values with the minimum/maximum timeout that
              can  be  set  (microseconds).   Some  devices  have  a   fixed   timeout.    For   such   drivers,
              LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT will return the same value.

       LIRC_SET_REC_TIMEOUT (int)
              Set the integer value for IR inactivity timeout (microseconds).  To be accepted, the value must be
              within the limits defined by LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT.   A  value  of  0  (if
              supported  by  the hardware) disables all hardware timeouts and data should be reported as soon as
              possible.  If the exact value cannot be set, then the next possible value greater than  the  given
              value should be set.

       LIRC_SET_REC_TIMEOUT_REPORTS (int)
              Enable  (val is 1) or disable (val is 0) timeout packages in LIRC_MODE_MODE2.  By default, timeout
              reports should be turned off.

       LIRC_SET_REC_CARRIER (int)
              Set the receive carrier frequency (Hz).

       LIRC_SET_REC_CARRIER_RANGE (int)
              After opening device, the first use of this operation sets the lower bound of the  carrier  range,
              and the second use sets the upper bound (Hz).

       LIRC_SET_MEASURE_CARRIER_MODE (int)
              Enable (val is 1) or disable (val is 0) the measure mode.  If enabled, from the next key press on,
              the driver will send LIRC_MODE2_FREQUENCY packets.  By default this should be turned off.

       LIRC_GET_REC_RESOLUTION (void)
              Return the driver resolution (microseconds).

       LIRC_GET_MIN_FILTER_PULSE (void), LIRC_GET_MAX_FILTER_PULSE (void)
              Some devices are able to filter out spikes in the incoming signal using given filter rules.  These
              ioctls  return the hardware capabilities that describe the bounds of the possible filters.  Filter
              settings depend on the IR protocols that are expected.  lircd(8) derives  the  settings  from  all
              protocols definitions found in its lircd.conf(5) config file.

       LIRC_GET_MIN_FILTER_SPACE (void), LIRC_GET_MAX_FILTER_SPACE (void)
              See LIRC_GET_MIN_FILTER_PULSE.

       LIRC_SET_REC_FILTER (int)
              Pulses/spaces shorter than this (microseconds) are filtered out by hardware.

       LIRC_SET_REC_FILTER_PULSE (int), LIRC_SET_REC_FILTER_SPACE (int)
              Pulses/spaces shorter than this (microseconds) are filtered out by hardware.  If filters cannot be
              set  independently  for  pulse/space,  the  corresponding  ioctls  must  return   an   error   and
              LIRC_SET_REC_FILTER should be used instead.

       LIRC_SET_TRANSMITTER_MASK
              Enable  the  set  of  transmitters  specified in val, which contains a bit mask where each enabled
              transmitter is a 1.  The first transmitter is encoded by the least significant  bit,  and  so  on.
              When  an  invalid bit mask is given, for example a bit is set even though the device does not have
              so many transmitters, this operation returns the number of available transmitters and does nothing
              otherwise.

       LIRC_SET_WIDEBAND_RECEIVER (int)
              Some  devices are equipped with a special wide band receiver which is intended to be used to learn
              the output of an existing remote.  This ioctl can be used to enable (val equals 1) or disable (val
              equals  0)  this  functionality.  This might be useful for devices that otherwise have narrow band
              receivers that prevent them to be used with certain remotes.  Wide band receivers may also be more
              precise.  On the other hand its disadvantage usually is reduced range of reception.

              Note:  wide  band receiver may be implicitly enabled if you enable carrier reports.  In that case,
              it will be disabled as soon as you disable  carrier  reports.   Trying  to  disable  a  wide  band
              receiver while carrier reports are active will do nothing.

       LIRC_SETUP_START (void), LIRC_SETUP_END (void)
              Setting  of  several  driver  parameters  can  be  optimized  by bracketing the actual ioctl calls
              LIRC_SETUP_START and LIRC_SETUP_END.  When a driver receives  a  LIRC_SETUP_START  ioctl,  it  can
              choose  to  not commit further setting changes to the hardware until a LIRC_SETUP_END is received.
              But this is open to the driver implementation and every driver must also handle parameter  changes
              which  are  not  encapsulated  by LIRC_SETUP_START and LIRC_SETUP_END.  Drivers can also choose to
              ignore these ioctls.

       LIRC_NOTIFY_DECODE (void)
              This ioctl is called by lircd(8) whenever a successful  decoding  of  an  incoming  IR  signal  is
              possible.   This  can  be used by supporting hardware to give visual user feedback, for example by
              flashing an LED.

FEATURES

       The features returned by The LIRC_GET_FEATURES ioctl returns  a  bit  mask  describing  features  of  the
       driver.  The following bits may be returned in the mask:

       LIRC_CAN_REC_RAW
              The driver is capable of receiving using LIRC_MODE_RAW.

       LIRC_CAN_REC_PULSE
              The driver is capable of receiving using LIRC_MODE_PULSE.

       LIRC_CAN_REC_MODE2
              The driver is capable of receiving using LIRC_MODE_MODE2.

       LIRC_CAN_REC_LIRCCODE
              The driver is capable of receiving using LIRC_MODE_LIRCCODE.

       LIRC_CAN_SET_SEND_CARRIER
              The driver supports changing the modulation frequency using LIRC_SET_SEND_CARRIER.

       LIRC_CAN_SET_SEND_DUTY_CYCLE
              The driver supports changing the duty cycle using LIRC_SET_SEND_DUTY_CYCLE.

       LIRC_CAN_SET_TRANSMITTER_MASK
              The driver supports changing the active transmitter(s) using LIRC_SET_TRANSMITTER_MASK.

       LIRC_CAN_SET_REC_CARRIER
              The driver supports setting the receive carrier frequency using LIRC_SET_REC_CARRIER.

       LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE
              The driver supports LIRC_SET_REC_DUTY_CYCLE_RANGE.

       LIRC_CAN_SET_REC_CARRIER_RANGE
              The driver supports LIRC_SET_REC_CARRIER_RANGE.

       LIRC_CAN_GET_REC_RESOLUTION
              The driver supports LIRC_GET_REC_RESOLUTION.

       LIRC_CAN_SET_REC_TIMEOUT
              The driver supports LIRC_SET_REC_TIMEOUT.

       LIRC_CAN_SET_REC_FILTER
              The driver supports LIRC_SET_REC_FILTER.

       LIRC_CAN_MEASURE_CARRIER
              The driver supports measuring of the modulation frequency using LIRC_SET_MEASURE_CARRIER_MODE.

       LIRC_CAN_USE_WIDEBAND_RECEIVER
              The driver supports learning mode using LIRC_SET_WIDEBAND_RECEIVER.

       LIRC_CAN_NOTIFY_DECODE
              The driver supports LIRC_NOTIFY_DECODE.

       LIRC_CAN_SEND_RAW
              The driver supports sending using LIRC_MODE_RAW.

       LIRC_CAN_SEND_PULSE
              The driver supports sending using LIRC_MODE_PULSE.

       LIRC_CAN_SEND_MODE2
              The driver supports sending using LIRC_MODE_MODE2.

       LIRC_CAN_SEND_LIRCCODE
              The  driver supports sending.  (This is uncommon, since LIRCCODE drivers reflect hardware like TV-
              cards which usually dos not support sending.)

BUGS

       Using these devices requires the kernel source header file lirc.h.  This file  is  not  available  before
       kernel release 4.6.  Users of older kernels could use the file bundled in ⟨http://www.lirc.org⟩.

SEE ALSO

       lircd(8)

       https://www.kernel.org/doc/htmldocs/media_api/lirc_dev.html

COLOPHON

       This  page  is  part  of  release  4.15  of  the  Linux man-pages project.  A description of the project,
       information  about  reporting  bugs,  and  the  latest  version  of  this   page,   can   be   found   at
       https://www.kernel.org/doc/man-pages/.