101 lines
3.0 KiB
ReStructuredText
101 lines
3.0 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||
|
.. c:namespace:: V4L
|
||
|
|
||
|
.. _VIDIOC_G_CTRL:
|
||
|
|
||
|
**********************************
|
||
|
ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL
|
||
|
**********************************
|
||
|
|
||
|
Name
|
||
|
====
|
||
|
|
||
|
VIDIOC_G_CTRL - VIDIOC_S_CTRL - Get or set the value of a control
|
||
|
|
||
|
Synopsis
|
||
|
========
|
||
|
|
||
|
.. c:macro:: VIDIOC_G_CTRL
|
||
|
|
||
|
``int ioctl(int fd, VIDIOC_G_CTRL, struct v4l2_control *argp)``
|
||
|
|
||
|
.. c:macro:: VIDIOC_S_CTRL
|
||
|
|
||
|
``int ioctl(int fd, VIDIOC_S_CTRL, struct v4l2_control *argp)``
|
||
|
|
||
|
Arguments
|
||
|
=========
|
||
|
|
||
|
``fd``
|
||
|
File descriptor returned by :c:func:`open()`.
|
||
|
|
||
|
``argp``
|
||
|
Pointer to struct :c:type:`v4l2_control`.
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
|
||
|
To get the current value of a control applications initialize the ``id``
|
||
|
field of a struct :c:type:`v4l2_control` and call the
|
||
|
:ref:`VIDIOC_G_CTRL <VIDIOC_G_CTRL>` ioctl with a pointer to this structure. To change the
|
||
|
value of a control applications initialize the ``id`` and ``value``
|
||
|
fields of a struct :c:type:`v4l2_control` and call the
|
||
|
:ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` ioctl.
|
||
|
|
||
|
When the ``id`` is invalid drivers return an ``EINVAL`` error code. When the
|
||
|
``value`` is out of bounds drivers can choose to take the closest valid
|
||
|
value or return an ``ERANGE`` error code, whatever seems more appropriate.
|
||
|
However, :ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` is a write-only ioctl, it does not return the
|
||
|
actual new value. If the ``value`` is inappropriate for the control
|
||
|
(e.g. if it refers to an unsupported menu index of a menu control), then
|
||
|
EINVAL error code is returned as well.
|
||
|
|
||
|
These ioctls work only with user controls. For other control classes the
|
||
|
:ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`,
|
||
|
:ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` or
|
||
|
:ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` must be used.
|
||
|
|
||
|
.. c:type:: v4l2_control
|
||
|
|
||
|
.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|
|
||
|
|
||
|
.. flat-table:: struct v4l2_control
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 1 1 2
|
||
|
|
||
|
* - __u32
|
||
|
- ``id``
|
||
|
- Identifies the control, set by the application.
|
||
|
* - __s32
|
||
|
- ``value``
|
||
|
- New value or current value.
|
||
|
|
||
|
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.
|
||
|
|
||
|
EINVAL
|
||
|
The struct :c:type:`v4l2_control` ``id`` is invalid
|
||
|
or the ``value`` is inappropriate for the given control (i.e. if a
|
||
|
menu item is selected that is not supported by the driver according
|
||
|
to :ref:`VIDIOC_QUERYMENU <VIDIOC_QUERYCTRL>`).
|
||
|
|
||
|
ERANGE
|
||
|
The struct :c:type:`v4l2_control` ``value`` is out of
|
||
|
bounds.
|
||
|
|
||
|
EBUSY
|
||
|
The control is temporarily not changeable, possibly because another
|
||
|
applications took over control of the device function this control
|
||
|
belongs to.
|
||
|
|
||
|
EACCES
|
||
|
Attempt to set a read-only control or to get a write-only control.
|
||
|
|
||
|
Or if there is an attempt to set an inactive control and the driver is
|
||
|
not capable of caching the new value until the control is active again.
|