| <partinfo> |
| <authorgroup> |
| <author> |
| <firstname>Hans</firstname> |
| <surname>Verkuil</surname> |
| <affiliation><address><email>hans.verkuil@cisco.com</email></address></affiliation> |
| <contrib>Initial version.</contrib> |
| </author> |
| </authorgroup> |
| <copyright> |
| <year>2016</year> |
| <holder>Hans Verkuil</holder> |
| </copyright> |
| |
| <revhistory> |
| <!-- Put document revisions here, newest first. --> |
| <revision> |
| <revnumber>1.0.0</revnumber> |
| <date>2016-03-17</date> |
| <authorinitials>hv</authorinitials> |
| <revremark>Initial revision</revremark> |
| </revision> |
| </revhistory> |
| </partinfo> |
| |
| <title>CEC API</title> |
| |
| <chapter id="cec-api"> |
| <title>CEC: Consumer Electronics Control</title> |
| |
| <section id="cec-intro"> |
| <title>Introduction</title> |
| <para> |
| Note: this documents the proposed CEC API. This API is not yet finalized and |
| is currently only available as a staging kernel module. |
| </para> |
| <para>HDMI connectors provide a single pin for use by the Consumer Electronics |
| Control protocol. This protocol allows different devices connected by an HDMI cable |
| to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC) |
| and 2 (HEAC or HDMI Ethernet and Audio Return Channel) of the HDMI 1.4a |
| (<xref linkend="hdmi" />) specification and the extensions added to CEC version 2.0 |
| are defined in chapter 11 of the HDMI 2.0 (<xref linkend="hdmi2" />) specification. |
| </para> |
| |
| <para>The bitrate is very slow (effectively no more than 36 bytes per second) and |
| is based on the ancient AV.link protocol used in old SCART connectors. The protocol |
| closely resembles a crazy Rube Goldberg contraption and is an unholy mix of low and |
| high level messages. Some messages, especially those part of the HEAC protocol layered |
| on top of CEC, need to be handled by the kernel, others can be handled either by the |
| kernel or by userspace.</para> |
| |
| <para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB |
| devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para> |
| |
| <para>Drivers that support CEC will create a CEC device node (/dev/cecX) |
| to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace |
| what it is allowed to do.</para> |
| </section> |
| </chapter> |
| |
| <appendix id="cec-user-func"> |
| <title>Function Reference</title> |
| <!-- Keep this alphabetically sorted. --> |
| &sub-cec-func-open; |
| &sub-cec-func-close; |
| &sub-cec-func-ioctl; |
| &sub-cec-func-poll; |
| <!-- All ioctls go here. --> |
| &sub-cec-ioc-adap-g-caps; |
| &sub-cec-ioc-adap-g-log-addrs; |
| &sub-cec-ioc-adap-g-phys-addr; |
| &sub-cec-ioc-dqevent; |
| &sub-cec-ioc-g-mode; |
| &sub-cec-ioc-receive; |
| </appendix> |