Re: [PATCH 2/2] media: rc-core.rst: add an introduction for RC core

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Sep 23, 2017 at 04:43:34PM -0300, Mauro Carvalho Chehab wrote:
> The RC core does several assumptions, but those aren't documented
> anywhere, with could make harder for ones that want to understand
> what's there.
> 
> So, add an introduction explaining the basic concepts of RC and
> how they're related to the RC core implementation.

Thanks for that -- I hadn't thought of that, but rc-core does really need
an introduction like this.

Just one minor point below, otherwise:

Acked-by: Sean Young <sean@xxxxxxxx>

> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx>
> ---
>  Documentation/media/kapi/rc-core.rst | 77 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 77 insertions(+)
> 
> diff --git a/Documentation/media/kapi/rc-core.rst b/Documentation/media/kapi/rc-core.rst
> index a45895886257..355c8ea3ad9f 100644
> --- a/Documentation/media/kapi/rc-core.rst
> +++ b/Documentation/media/kapi/rc-core.rst
> @@ -4,6 +4,83 @@ Remote Controller devices
>  Remote Controller core
>  ~~~~~~~~~~~~~~~~~~~~~~
>  
> +The remote controller core implements infrastructure to receive and send
> +remote controller keyboard keystrokes and mouse events.
> +
> +Every time a key is pressed on a remote controller, a scan code is produced.
> +Also, on most hardware, keeping a key pressed for more than a few dozens of
> +milliseconds produce a repeat key event. That's somewhat similar to what
> +a normal keyboard or mouse is handled internally on Linux\ [#f1]_. So, the
> +remote controller core is implemented on the top of the linux input/evdev
> +interface.
> +
> +.. [#f1]
> +
> +   The main difference is that, on keyboard events, the keyboard controller
> +   produces one event for a key press and another one for key release. On
> +   infrared-based remote controllers, there's no key release event. Instead,
> +   an extra code is produced to indicate key repeats.
> +
> +However, most of the remote controllers use infrared (IR) to transmit signals.
> +As there are several protocols used to modulate infrared signals, one
> +important part of the core is dedicated to adjust the driver and the core
> +system to support the infrared protocol used by the emitter.
> +
> +The infrared transmission is done by blinking a infrared emitter using a
> +carrier. The carrier can be switched on or off by the IR transmitter
> +hardware. When the carrier is switched on, it is called *PULSE*.
> +When the carrier is switched off, it is called *SPACE*.
> +
> +In other words, a typical IR transmission can be thinking on a sequence of
> +*PULSE* and *SPACE* events, each with a given duration.

This must be of s/thinking on/thought of as/ or something similar. Maybe
viewed is better?

+In other words, a typical IR transmission can be viewed as a sequence of
+*PULSE* and *SPACE* events, each with a given duration.


> +
> +The carrier parameters (frequency, duty cycle) and the intervals for
> +*PULSE* and *SPACE* events depend on the protocol.
> +For example, the NEC protocol uses a carrier of 38kHz, and transmissions
> +start with a 9ms *PULSE* and a 4.5ms SPACE. It then transmits 16 bits of
> +scan code, being 8 bits for address (usually it is a fixed number for a
> +given remote controller), followed by 8 bits of code. A bit "1" is modulated
> +with 560µs *PULSE* followed by 1690µs *SPACE* and a bit "0"  is modulated
> +with 560µs *PULSE* followed by 560µs *SPACE*.
> +
> +At receiver, a simple low-pass filter can be used to convert the received
> +signal in a sequence of *PULSE/SPACE* events, filtering out the carrier
> +frequency. Due to that, the receiver doesn't care about the carrier's
> +actual frequency parameters: all it has to do is to measure the amount
> +of time it receives *PULSE/SPACE* events.
> +So, a simple IR receiver hardware will just provide a sequence of timings
> +for those events to the Kernel. The drivers for hardware with such kind of
> +receivers are identified by  ``RC_DRIVER_IR_RAW``, as defined by
> +:c:type:`rc_driver_type`\ [#f2]_. Other hardware come with a
> +microcontroller that decode the *PULSE/SPACE* sequence and return scan
> +codes to the Kernel. Such kind of receivers are identified
> +by ``RC_DRIVER_SCANCODE``.
> +
> +.. [#f2]
> +
> +   The RC core also supports devices that have just IR emitters,
> +   without any receivers. Right now, all such devices work only in
> +   raw TX mode. Such kind of hardware is identified as
> +   ``RC_DRIVER_IR_RAW_TX``.
> +
> +When the RC core receives events produced by ``RC_DRIVER_IR_RAW`` IR
> +receivers, it needs to decode the IR protocol, in order to obtain the
> +corresponding scan code. The protocols supported by the RC core are
> +defined at enum :c:type:`rc_proto`.
> +
> +When the RC code receives a scan code (either directly, by a driver
> +of the type ``RC_DRIVER_SCANCODE``, or via its IR decoders), it needs
> +to convert into a Linux input event code. This is done via a mapping
> +table.
> +
> +The Kernel has support for mapping tables available on most media
> +devices. It also supports loading a table in runtime, via some
> +sysfs nodes. See the :ref:`RC userspace API <Remote_controllers_Intro>`
> +for more details.
> +
> +Remote controller data structures and functions
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
>  .. kernel-doc:: include/media/rc-core.h
>  
>  .. kernel-doc:: include/media/rc-map.h
> -- 
> 2.13.5



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux