1Remote Controller devices 2------------------------- 3 4Remote Controller core 5~~~~~~~~~~~~~~~~~~~~~~ 6 7The remote controller core implements infrastructure to receive and send 8remote controller keyboard keystrokes and mouse events. 9 10Every time a key is pressed on a remote controller, a scan code is produced. 11Also, on most hardware, keeping a key pressed for more than a few dozens of 12milliseconds produce a repeat key event. That's somewhat similar to what 13a normal keyboard or mouse is handled internally on Linux\ [#f1]_. So, the 14remote controller core is implemented on the top of the linux input/evdev 15interface. 16 17.. [#f1] 18 19 The main difference is that, on keyboard events, the keyboard controller 20 produces one event for a key press and another one for key release. On 21 infrared-based remote controllers, there's no key release event. Instead, 22 an extra code is produced to indicate key repeats. 23 24However, most of the remote controllers use infrared (IR) to transmit signals. 25As there are several protocols used to modulate infrared signals, one 26important part of the core is dedicated to adjust the driver and the core 27system to support the infrared protocol used by the emitter. 28 29The infrared transmission is done by blinking a infrared emitter using a 30carrier. The carrier can be switched on or off by the IR transmitter 31hardware. When the carrier is switched on, it is called *PULSE*. 32When the carrier is switched off, it is called *SPACE*. 33 34In other words, a typical IR transmission can be viewed as a sequence of 35*PULSE* and *SPACE* events, each with a given duration. 36 37The carrier parameters (frequency, duty cycle) and the intervals for 38*PULSE* and *SPACE* events depend on the protocol. 39For example, the NEC protocol uses a carrier of 38kHz, and transmissions 40start with a 9ms *PULSE* and a 4.5ms SPACE. It then transmits 16 bits of 41scan code, being 8 bits for address (usually it is a fixed number for a 42given remote controller), followed by 8 bits of code. A bit "1" is modulated 43with 560µs *PULSE* followed by 1690µs *SPACE* and a bit "0" is modulated 44with 560µs *PULSE* followed by 560µs *SPACE*. 45 46At receiver, a simple low-pass filter can be used to convert the received 47signal in a sequence of *PULSE/SPACE* events, filtering out the carrier 48frequency. Due to that, the receiver doesn't care about the carrier's 49actual frequency parameters: all it has to do is to measure the amount 50of time it receives *PULSE/SPACE* events. 51So, a simple IR receiver hardware will just provide a sequence of timings 52for those events to the Kernel. The drivers for hardware with such kind of 53receivers are identified by ``RC_DRIVER_IR_RAW``, as defined by 54:c:type:`rc_driver_type`\ [#f2]_. Other hardware come with a 55microcontroller that decode the *PULSE/SPACE* sequence and return scan 56codes to the Kernel. Such kind of receivers are identified 57by ``RC_DRIVER_SCANCODE``. 58 59.. [#f2] 60 61 The RC core also supports devices that have just IR emitters, 62 without any receivers. Right now, all such devices work only in 63 raw TX mode. Such kind of hardware is identified as 64 ``RC_DRIVER_IR_RAW_TX``. 65 66When the RC core receives events produced by ``RC_DRIVER_IR_RAW`` IR 67receivers, it needs to decode the IR protocol, in order to obtain the 68corresponding scan code. The protocols supported by the RC core are 69defined at enum :c:type:`rc_proto`. 70 71When the RC code receives a scan code (either directly, by a driver 72of the type ``RC_DRIVER_SCANCODE``, or via its IR decoders), it needs 73to convert into a Linux input event code. This is done via a mapping 74table. 75 76The Kernel has support for mapping tables available on most media 77devices. It also supports loading a table in runtime, via some 78sysfs nodes. See the :ref:`RC userspace API <Remote_controllers_Intro>` 79for more details. 80 81Remote controller data structures and functions 82^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 83 84.. kernel-doc:: include/media/rc-core.h 85 86.. kernel-doc:: include/media/rc-map.h 87