123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- .. -*- coding: utf-8; mode: rst -*-
- .. _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
- ===========
- .. note::
- This documents the proposed CEC API. This API is not yet finalized
- and is currently only available as a staging kernel module.
- 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.
- 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{7.5cm}|p{8.0cm}|
- .. cssclass:: longtable
- .. flat-table:: struct cec_log_addrs
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 16
- - .. row 1
- - __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``.
- - .. row 2
- - __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.
- - .. row 3
- - __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.
- - .. row 4
- - __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.
- - .. row 5
- - __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``.
- - .. row 6
- - __u32
- - ``flags``
- - Flags. See :ref:`cec-log-addrs-flags` for a list of available flags.
- - .. row 7
- - char
- - ``osd_name[15]``
- - The On-Screen Display name as is returned by the
- ``CEC_MSG_SET_OSD_NAME`` message.
- - .. row 8
- - __u8
- - ``primary_device_type[CEC_MAX_LOG_ADDRS]``
- - Primary device type for each logical address. See
- :ref:`cec-prim-dev-types` for possible types.
- - .. row 9
- - __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>`).
- - .. row 10
- - __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.
- - .. row 11
- - __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.
- .. _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.
- .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|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.
|