summaryrefslogtreecommitdiff
path: root/Documentation/media/uapi/rc/lirc_ioctl.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/media/uapi/rc/lirc_ioctl.rst')
-rw-r--r--Documentation/media/uapi/rc/lirc_ioctl.rst156
1 files changed, 156 insertions, 0 deletions
diff --git a/Documentation/media/uapi/rc/lirc_ioctl.rst b/Documentation/media/uapi/rc/lirc_ioctl.rst
new file mode 100644
index 0000000..916d064
--- /dev/null
+++ b/Documentation/media/uapi/rc/lirc_ioctl.rst
@@ -0,0 +1,156 @@
+.. -*- coding: utf-8; mode: rst -*-
+
+.. _lirc_ioctl:
+
+**************
+LIRC ioctl fop
+**************
+
+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 arg. For the purposes
+of ioctl portability across 32-bit and 64-bit, these values are capped
+to their 32-bit sizes.
+
+The following ioctls can be used to change specific hardware settings.
+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.
+
+LIRC_GET_FEATURES
+ Obviously, get the underlying hardware device's features. If a
+ driver does not announce support of certain features, calling of the
+ corresponding ioctls is undefined.
+
+LIRC_GET_SEND_MODE
+ Get supported transmit mode. Only LIRC_MODE_PULSE is supported by
+ lircd.
+
+LIRC_GET_REC_MODE
+ Get supported receive modes. Only LIRC_MODE_MODE2 and
+ LIRC_MODE_LIRCCODE are supported by lircd.
+
+LIRC_GET_SEND_CARRIER
+ Get carrier frequency (in Hz) currently used for transmit.
+
+LIRC_GET_REC_CARRIER
+ Get carrier frequency (in Hz) currently used for IR reception.
+
+LIRC_{G,S}ET_{SEND,REC}_DUTY_CYCLE
+ Get/set the duty cycle (from 0 to 100) of the carrier signal.
+ Currently, no special meaning is defined for 0 or 100, but this
+ could be used to switch off carrier generation in the future, so
+ these values should be reserved.
+
+LIRC_GET_REC_RESOLUTION
+ Some receiver have maximum resolution which is defined by internal
+ sample rate or data format limitations. E.g. it's common that
+ signals can only be reported in 50 microsecond steps. This integer
+ value is used by lircd to automatically adjust the aeps tolerance
+ value in the lircd config file.
+
+LIRC_GET_M{IN,AX}_TIMEOUT
+ 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 in
+ detecting that a IR signal is finished and can speed up the decoding
+ process. Returns an integer value with the minimum/maximum timeout
+ that can be set. Some devices have a fixed timeout, in that case
+ both ioctls will return the same value even though the timeout
+ cannot be changed.
+
+LIRC_GET_M{IN,AX}_FILTER_{PULSE,SPACE}
+ 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
+ derives the settings from all protocols definitions found in its
+ config file.
+
+LIRC_GET_LENGTH
+ Retrieves the code length in bits (only for LIRC_MODE_LIRCCODE).
+ Reads on the device must be done in blocks matching the bit count.
+ The bit could should be rounded up so that it matches full bytes.
+
+LIRC_SET_{SEND,REC}_MODE
+ Set send/receive mode. Largely obsolete for send, as only
+ LIRC_MODE_PULSE is supported.
+
+LIRC_SET_{SEND,REC}_CARRIER
+ Set send/receive carrier (in Hz).
+
+LIRC_SET_TRANSMITTER_MASK
+ This enables the given set of transmitters. The first transmitter is
+ encoded by the least significant bit, etc. When an invalid bit mask
+ is given, i.e. a bit is set, even though the device does not have so
+ many transitters, then this ioctl returns the number of available
+ transitters and does nothing otherwise.
+
+LIRC_SET_REC_TIMEOUT
+ Sets the integer value for IR inactivity timeout (cf.
+ 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
+ Enable (1) or disable (0) timeout reports in LIRC_MODE_MODE2. By
+ default, timeout reports should be turned off.
+
+LIRC_SET_REC_FILTER_{,PULSE,SPACE}
+ Pulses/spaces shorter than this 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
+ shall be used instead.
+
+LIRC_SET_MEASURE_CARRIER_MODE
+ Enable (1)/disable (0) 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_SET_REC_{DUTY_CYCLE,CARRIER}_RANGE
+ To set a range use
+ LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE
+ with the lower bound first and later
+ LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper
+ bound.
+
+LIRC_NOTIFY_DECODE
+ This ioctl is called by lircd whenever a successful decoding of an
+ incoming IR signal could be done. This can be used by supporting
+ hardware to give visual feedback to the user e.g. by flashing a LED.
+
+LIRC_SETUP_{START,END}
+ Setting of several driver parameters can be optimized by
+ encapsulating the according ioctl calls with
+ LIRC_SETUP_START/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_SET_WIDEBAND_RECEIVER
+ Some receivers are equipped with special wide band receiver which is
+ intended to be used to learn output of existing remote. Calling that
+ ioctl with (1) will enable it, and with (0) disable it. This might
+ be useful of receivers that have otherwise narrow band receiver that
+ prevents them to be used with some remotes. Wide band receiver might
+ also be more precise On the other hand its disadvantage it usually
+ reduced range of reception. Note: wide band receiver might be
+ implictly enabled if you enable carrier reports. In that case it
+ will be disabled as soon as you disable carrier reports. Trying to
+ disable wide band receiver while carrier reports are active will do
+ nothing.
+
+
+.. _lirc_dev_errors:
+
+Return Value
+============
+
+On success 0 is returned, on error -1 and the ``errno`` variable is set
+appropriately. The generic error codes are described at the
+:ref:`Generic Error Codes <gen-errors>` chapter.