media: lirc: document LIRC_MODE_SCANCODE
Lirc supports a new mode which requires documentation. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
b66218fddf
commit
7d402db89b
@@ -6,11 +6,12 @@
|
||||
Introduction
|
||||
************
|
||||
|
||||
The LIRC device interface is a bi-directional interface for transporting
|
||||
raw IR data between userspace and kernelspace. Fundamentally, it is just
|
||||
a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number of standard
|
||||
struct file_operations defined on it. With respect to transporting raw
|
||||
IR data to and fro, the essential fops are read, write and ioctl.
|
||||
LIRC stands for Linux Infrared Remote Control. The LIRC device interface is
|
||||
a bi-directional interface for transporting raw IR and decoded scancodes
|
||||
data between userspace and kernelspace. Fundamentally, it is just a chardev
|
||||
(/dev/lircX, for X = 0, 1, 2, ...), with a number of standard struct
|
||||
file_operations defined on it. With respect to transporting raw IR and
|
||||
decoded scancodes to and fro, the essential fops are read, write and ioctl.
|
||||
|
||||
Example dmesg output upon a driver registering w/LIRC:
|
||||
|
||||
@@ -36,6 +37,46 @@ LIRC modes
|
||||
LIRC supports some modes of receiving and sending IR codes, as shown
|
||||
on the following table.
|
||||
|
||||
.. _lirc-mode-scancode:
|
||||
.. _lirc-scancode-flag-toggle:
|
||||
.. _lirc-scancode-flag-repeat:
|
||||
|
||||
``LIRC_MODE_SCANCODE``
|
||||
|
||||
This mode is for both sending and receiving IR.
|
||||
|
||||
For transmitting (aka sending), create a ``struct lirc_scancode`` with
|
||||
the desired scancode set in the ``scancode`` member, ``rc_proto`` set
|
||||
the IR protocol, and all other members set to 0. Write this struct to
|
||||
the lirc device.
|
||||
|
||||
For receiving, you read ``struct lirc_scancode`` from the lirc device,
|
||||
with ``scancode`` set to the received scancode and the IR protocol
|
||||
``rc_proto``. If the scancode maps to a valid key code, this is set
|
||||
in the ``keycode`` field, else it is set to ``KEY_RESERVED``.
|
||||
|
||||
The ``flags`` can have ``LIRC_SCANCODE_FLAG_TOGGLE`` set if the toggle
|
||||
bit is set in protocols that support it (e.g. rc-5 and rc-6), or
|
||||
``LIRC_SCANCODE_FLAG_REPEAT`` for when a repeat is received for protocols
|
||||
that support it (e.g. nec).
|
||||
|
||||
In the Sanyo and NEC protocol, if you hold a button on remote, rather than
|
||||
repeating the entire scancode, the remote sends a shorter message with
|
||||
no scancode, which just means button is held, a "repeat". When this is
|
||||
received, the ``LIRC_SCANCODE_FLAG_REPEAT`` is set and the scancode and
|
||||
keycode is repeated.
|
||||
|
||||
With nec, there is no way to distinguish "button hold" from "repeatedly
|
||||
pressing the same button". The rc-5 and rc-6 protocols have a toggle bit.
|
||||
When a button is released and pressed again, the toggle bit is inverted.
|
||||
If the toggle bit is set, the ``LIRC_SCANCODE_FLAG_TOGGLE`` is set.
|
||||
|
||||
The ``timestamp`` field is filled with the time nanoseconds
|
||||
(in ``CLOCK_MONOTONIC``) when the scancode was decoded.
|
||||
|
||||
An ``enum rc_proto`` in the :ref:`lirc_header` lists all the supported
|
||||
IR protocols.
|
||||
|
||||
.. _lirc-mode-mode2:
|
||||
|
||||
``LIRC_MODE_MODE2``
|
||||
|
Reference in New Issue
Block a user