brintos

brintos / linux-shallow public Read only

0
0
Text · 3.9 KiB · 53f5e64 Raw
89 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3Remote Controller devices4-------------------------5 6Remote Controller core7~~~~~~~~~~~~~~~~~~~~~~8 9The remote controller core implements infrastructure to receive and send10remote controller keyboard keystrokes and mouse events.11 12Every time a key is pressed on a remote controller, a scan code is produced.13Also, on most hardware, keeping a key pressed for more than a few dozens of14milliseconds produce a repeat key event. That's somewhat similar to what15a normal keyboard or mouse is handled internally on Linux\ [#f1]_. So, the16remote controller core is implemented on the top of the linux input/evdev17interface.18 19.. [#f1]20 21   The main difference is that, on keyboard events, the keyboard controller22   produces one event for a key press and another one for key release. On23   infrared-based remote controllers, there's no key release event. Instead,24   an extra code is produced to indicate key repeats.25 26However, most of the remote controllers use infrared (IR) to transmit signals.27As there are several protocols used to modulate infrared signals, one28important part of the core is dedicated to adjust the driver and the core29system to support the infrared protocol used by the emitter.30 31The infrared transmission is done by blinking a infrared emitter using a32carrier. The carrier can be switched on or off by the IR transmitter33hardware. When the carrier is switched on, it is called *PULSE*.34When the carrier is switched off, it is called *SPACE*.35 36In other words, a typical IR transmission can be viewed as a sequence of37*PULSE* and *SPACE* events, each with a given duration.38 39The carrier parameters (frequency, duty cycle) and the intervals for40*PULSE* and *SPACE* events depend on the protocol.41For example, the NEC protocol uses a carrier of 38kHz, and transmissions42start with a 9ms *PULSE* and a 4.5ms SPACE. It then transmits 16 bits of43scan code, being 8 bits for address (usually it is a fixed number for a44given remote controller), followed by 8 bits of code. A bit "1" is modulated45with 560µs *PULSE* followed by 1690µs *SPACE* and a bit "0"  is modulated46with 560µs *PULSE* followed by 560µs *SPACE*.47 48At receiver, a simple low-pass filter can be used to convert the received49signal in a sequence of *PULSE/SPACE* events, filtering out the carrier50frequency. Due to that, the receiver doesn't care about the carrier's51actual frequency parameters: all it has to do is to measure the amount52of time it receives *PULSE/SPACE* events.53So, a simple IR receiver hardware will just provide a sequence of timings54for those events to the Kernel. The drivers for hardware with such kind of55receivers are identified by  ``RC_DRIVER_IR_RAW``, as defined by56:c:type:`rc_driver_type`\ [#f2]_. Other hardware come with a57microcontroller that decode the *PULSE/SPACE* sequence and return scan58codes to the Kernel. Such kind of receivers are identified59by ``RC_DRIVER_SCANCODE``.60 61.. [#f2]62 63   The RC core also supports devices that have just IR emitters,64   without any receivers. Right now, all such devices work only in65   raw TX mode. Such kind of hardware is identified as66   ``RC_DRIVER_IR_RAW_TX``.67 68When the RC core receives events produced by ``RC_DRIVER_IR_RAW`` IR69receivers, it needs to decode the IR protocol, in order to obtain the70corresponding scan code. The protocols supported by the RC core are71defined at enum :c:type:`rc_proto`.72 73When the RC code receives a scan code (either directly, by a driver74of the type ``RC_DRIVER_SCANCODE``, or via its IR decoders), it needs75to convert into a Linux input event code. This is done via a mapping76table.77 78The Kernel has support for mapping tables available on most media79devices. It also supports loading a table in runtime, via some80sysfs nodes. See the :ref:`RC userspace API <Remote_controllers_Intro>`81for more details.82 83Remote controller data structures and functions84^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^85 86.. kernel-doc:: include/media/rc-core.h87 88.. kernel-doc:: include/media/rc-map.h89