.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later

.. _CEC_ADAP_LOG_ADDRS:
.. _CEC_ADAP_G_LOG_ADDRS:
.. _CEC_ADAP_S_LOG_ADDRS:

****************************************************
ioctls CEC_ADAP_G_LOG_ADDRS and CEC_ADAP_S_LOG_ADDRS
****************************************************

Name
====

CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS - Get or set the logical addresses


Synopsis
========

.. c:function:: int ioctl( int fd, CEC_ADAP_G_LOG_ADDRS, struct cec_log_addrs *argp )
   :name: CEC_ADAP_G_LOG_ADDRS

.. c:function:: int ioctl( int fd, CEC_ADAP_S_LOG_ADDRS, struct cec_log_addrs *argp )
   :name: CEC_ADAP_S_LOG_ADDRS

Arguments
=========

``fd``
    File descriptor returned by :c:func:`open() <cec-open>`.

``argp``
    Pointer to struct :c:type:`cec_log_addrs`.

Description
===========

To query the current CEC logical addresses, applications call
:ref:`ioctl CEC_ADAP_G_LOG_ADDRS <CEC_ADAP_G_LOG_ADDRS>` with a pointer to a
struct :c:type:`cec_log_addrs` where the driver stores the logical addresses.

To set new logical addresses, applications fill in
struct :c:type:`cec_log_addrs` and call :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
with a pointer to this struct. The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
is only available if ``CEC_CAP_LOG_ADDRS`` is set (the ``ENOTTY`` error code is
returned otherwise). The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
can only be called by a file descriptor in initiator mode (see :ref:`CEC_S_MODE`), if not
the ``EBUSY`` error code will be returned.

To clear existing logical addresses set ``num_log_addrs`` to 0. All other fields
will be ignored in that case. The adapter will go to the unconfigured state and the
``cec_version``, ``vendor_id`` and ``osd_name`` fields are all reset to their default
values (CEC version 2.0, no vendor ID and an empty OSD name).

If the physical address is valid (see :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`),
then this ioctl will block until all requested logical
addresses have been claimed. If the file descriptor is in non-blocking mode then it will
not wait for the logical addresses to be claimed, instead it just returns 0.

A :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>` event is sent when the
logical addresses are claimed or cleared.

Attempting to call :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>` when
logical address types are already defined will return with error ``EBUSY``.

.. c:type:: cec_log_addrs

.. tabularcolumns:: |p{1.0cm}|p{8.0cm}|p{7.5cm}|

.. cssclass:: longtable

.. flat-table:: struct cec_log_addrs
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 16

    * - __u8
      - ``log_addr[CEC_MAX_LOG_ADDRS]``
      - The actual logical addresses that were claimed. This is set by the
	driver. If no logical address could be claimed, then it is set to
	``CEC_LOG_ADDR_INVALID``. If this adapter is Unregistered, then
	``log_addr[0]`` is set to 0xf and all others to
	``CEC_LOG_ADDR_INVALID``.
    * - __u16
      - ``log_addr_mask``
      - The bitmask of all logical addresses this adapter has claimed. If
	this adapter is Unregistered then ``log_addr_mask`` sets bit 15
	and clears all other bits. If this adapter is not configured at
	all, then ``log_addr_mask`` is set to 0. Set by the driver.
    * - __u8
      - ``cec_version``
      - The CEC version that this adapter shall use. See
	:ref:`cec-versions`. Used to implement the
	``CEC_MSG_CEC_VERSION`` and ``CEC_MSG_REPORT_FEATURES`` messages.
	Note that :ref:`CEC_OP_CEC_VERSION_1_3A <CEC-OP-CEC-VERSION-1-3A>` is not allowed by the CEC
	framework.
    * - __u8
      - ``num_log_addrs``
      - Number of logical addresses to set up. Must be ≤
	``available_log_addrs`` as returned by
	:ref:`CEC_ADAP_G_CAPS`. All arrays in
	this structure are only filled up to index
	``available_log_addrs``-1. The remaining array elements will be
	ignored. Note that the CEC 2.0 standard allows for a maximum of 2
	logical addresses, although some hardware has support for more.
	``CEC_MAX_LOG_ADDRS`` is 4. The driver will return the actual
	number of logical addresses it could claim, which may be less than
	what was requested. If this field is set to 0, then the CEC
	adapter shall clear all claimed logical addresses and all other
	fields will be ignored.
    * - __u32
      - ``vendor_id``
      - The vendor ID is a 24-bit number that identifies the specific
	vendor or entity. Based on this ID vendor specific commands may be
	defined. If you do not want a vendor ID then set it to
	``CEC_VENDOR_ID_NONE``.
    * - __u32
      - ``flags``
      - Flags. See :ref:`cec-log-addrs-flags` for a list of available flags.
    * - char
      - ``osd_name[15]``
      - The On-Screen Display name as is returned by the
	``CEC_MSG_SET_OSD_NAME`` message.
    * - __u8
      - ``primary_device_type[CEC_MAX_LOG_ADDRS]``
      - Primary device type for each logical address. See
	:ref:`cec-prim-dev-types` for possible types.
    * - __u8
      - ``log_addr_type[CEC_MAX_LOG_ADDRS]``
      - Logical address types. See :ref:`cec-log-addr-types` for
	possible types. The driver will update this with the actual
	logical address type that it claimed (e.g. it may have to fallback
	to :ref:`CEC_LOG_ADDR_TYPE_UNREGISTERED <CEC-LOG-ADDR-TYPE-UNREGISTERED>`).
    * - __u8
      - ``all_device_types[CEC_MAX_LOG_ADDRS]``
      - CEC 2.0 specific: the bit mask of all device types. See
	:ref:`cec-all-dev-types-flags`. It is used in the CEC 2.0
	``CEC_MSG_REPORT_FEATURES`` message. For CEC 1.4 you can either leave
	this field to 0, or fill it in according to the CEC 2.0 guidelines to
	give the CEC framework more information about the device type, even
	though the framework won't use it directly in the CEC message.
    * - __u8
      - ``features[CEC_MAX_LOG_ADDRS][12]``
      - Features for each logical address. It is used in the CEC 2.0
	``CEC_MSG_REPORT_FEATURES`` message. The 12 bytes include both the
	RC Profile and the Device Features. For CEC 1.4 you can either leave
        this field to all 0, or fill it in according to the CEC 2.0 guidelines to
        give the CEC framework more information about the device type, even
        though the framework won't use it directly in the CEC message.


.. tabularcolumns:: |p{7.8cm}|p{1.0cm}|p{8.7cm}|

.. _cec-log-addrs-flags:

.. flat-table:: Flags for struct cec_log_addrs
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * .. _`CEC-LOG-ADDRS-FL-ALLOW-UNREG-FALLBACK`:

      - ``CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK``
      - 1
      - By default if no logical address of the requested type can be claimed, then
	it will go back to the unconfigured state. If this flag is set, then it will
	fallback to the Unregistered logical address. Note that if the Unregistered
	logical address was explicitly requested, then this flag has no effect.
    * .. _`CEC-LOG-ADDRS-FL-ALLOW-RC-PASSTHRU`:

      - ``CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU``
      - 2
      - By default the ``CEC_MSG_USER_CONTROL_PRESSED`` and ``CEC_MSG_USER_CONTROL_RELEASED``
        messages are only passed on to the follower(s), if any. If this flag is set,
	then these messages are also passed on to the remote control input subsystem
	and will appear as keystrokes. This features needs to be enabled explicitly.
	If CEC is used to enter e.g. passwords, then you may not want to enable this
	to avoid trivial snooping of the keystrokes.
    * .. _`CEC-LOG-ADDRS-FL-CDC-ONLY`:

      - ``CEC_LOG_ADDRS_FL_CDC_ONLY``
      - 4
      - If this flag is set, then the device is CDC-Only. CDC-Only CEC devices
	are CEC devices that can only handle CDC messages.

	All other messages are ignored.


.. tabularcolumns:: |p{7.8cm}|p{1.0cm}|p{8.7cm}|

.. _cec-versions:

.. flat-table:: CEC Versions
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * .. _`CEC-OP-CEC-VERSION-1-3A`:

      - ``CEC_OP_CEC_VERSION_1_3A``
      - 4
      - CEC version according to the HDMI 1.3a standard.
    * .. _`CEC-OP-CEC-VERSION-1-4B`:

      - ``CEC_OP_CEC_VERSION_1_4B``
      - 5
      - CEC version according to the HDMI 1.4b standard.
    * .. _`CEC-OP-CEC-VERSION-2-0`:

      - ``CEC_OP_CEC_VERSION_2_0``
      - 6
      - CEC version according to the HDMI 2.0 standard.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|

.. _cec-prim-dev-types:

.. flat-table:: CEC Primary Device Types
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * .. _`CEC-OP-PRIM-DEVTYPE-TV`:

      - ``CEC_OP_PRIM_DEVTYPE_TV``
      - 0
      - Use for a TV.
    * .. _`CEC-OP-PRIM-DEVTYPE-RECORD`:

      - ``CEC_OP_PRIM_DEVTYPE_RECORD``
      - 1
      - Use for a recording device.
    * .. _`CEC-OP-PRIM-DEVTYPE-TUNER`:

      - ``CEC_OP_PRIM_DEVTYPE_TUNER``
      - 3
      - Use for a device with a tuner.
    * .. _`CEC-OP-PRIM-DEVTYPE-PLAYBACK`:

      - ``CEC_OP_PRIM_DEVTYPE_PLAYBACK``
      - 4
      - Use for a playback device.
    * .. _`CEC-OP-PRIM-DEVTYPE-AUDIOSYSTEM`:

      - ``CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM``
      - 5
      - Use for an audio system (e.g. an audio/video receiver).
    * .. _`CEC-OP-PRIM-DEVTYPE-SWITCH`:

      - ``CEC_OP_PRIM_DEVTYPE_SWITCH``
      - 6
      - Use for a CEC switch.
    * .. _`CEC-OP-PRIM-DEVTYPE-VIDEOPROC`:

      - ``CEC_OP_PRIM_DEVTYPE_VIDEOPROC``
      - 7
      - Use for a video processor device.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|

.. _cec-log-addr-types:

.. flat-table:: CEC Logical Address Types
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 16

    * .. _`CEC-LOG-ADDR-TYPE-TV`:

      - ``CEC_LOG_ADDR_TYPE_TV``
      - 0
      - Use for a TV.
    * .. _`CEC-LOG-ADDR-TYPE-RECORD`:

      - ``CEC_LOG_ADDR_TYPE_RECORD``
      - 1
      - Use for a recording device.
    * .. _`CEC-LOG-ADDR-TYPE-TUNER`:

      - ``CEC_LOG_ADDR_TYPE_TUNER``
      - 2
      - Use for a tuner device.
    * .. _`CEC-LOG-ADDR-TYPE-PLAYBACK`:

      - ``CEC_LOG_ADDR_TYPE_PLAYBACK``
      - 3
      - Use for a playback device.
    * .. _`CEC-LOG-ADDR-TYPE-AUDIOSYSTEM`:

      - ``CEC_LOG_ADDR_TYPE_AUDIOSYSTEM``
      - 4
      - Use for an audio system device.
    * .. _`CEC-LOG-ADDR-TYPE-SPECIFIC`:

      - ``CEC_LOG_ADDR_TYPE_SPECIFIC``
      - 5
      - Use for a second TV or for a video processor device.
    * .. _`CEC-LOG-ADDR-TYPE-UNREGISTERED`:

      - ``CEC_LOG_ADDR_TYPE_UNREGISTERED``
      - 6
      - Use this if you just want to remain unregistered. Used for pure
	CEC switches or CDC-only devices (CDC: Capability Discovery and
	Control).



.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|

.. _cec-all-dev-types-flags:

.. flat-table:: CEC All Device Types Flags
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * .. _`CEC-OP-ALL-DEVTYPE-TV`:

      - ``CEC_OP_ALL_DEVTYPE_TV``
      - 0x80
      - This supports the TV type.
    * .. _`CEC-OP-ALL-DEVTYPE-RECORD`:

      - ``CEC_OP_ALL_DEVTYPE_RECORD``
      - 0x40
      - This supports the Recording type.
    * .. _`CEC-OP-ALL-DEVTYPE-TUNER`:

      - ``CEC_OP_ALL_DEVTYPE_TUNER``
      - 0x20
      - This supports the Tuner type.
    * .. _`CEC-OP-ALL-DEVTYPE-PLAYBACK`:

      - ``CEC_OP_ALL_DEVTYPE_PLAYBACK``
      - 0x10
      - This supports the Playback type.
    * .. _`CEC-OP-ALL-DEVTYPE-AUDIOSYSTEM`:

      - ``CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM``
      - 0x08
      - This supports the Audio System type.
    * .. _`CEC-OP-ALL-DEVTYPE-SWITCH`:

      - ``CEC_OP_ALL_DEVTYPE_SWITCH``
      - 0x04
      - This supports the CEC Switch or Video Processing type.



Return Value
============

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.

The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>` can return the following
error codes:

ENOTTY
    The ``CEC_CAP_LOG_ADDRS`` capability wasn't set, so this ioctl is not supported.

EBUSY
    The CEC adapter is currently configuring itself, or it is already configured and
    ``num_log_addrs`` is non-zero, or another filehandle is in exclusive follower or
    initiator mode, or the filehandle is in mode ``CEC_MODE_NO_INITIATOR``.

EINVAL
    The contents of struct :c:type:`cec_log_addrs` is invalid.
