100 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. -*- coding: utf-8; mode: rst -*-
 | |
| 
 | |
| .. _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:function:: int ioctl( int fd, VIDIOC_G_CTRL, struct v4l2_control *argp )
 | |
|     :name: VIDIOC_G_CTRL
 | |
| 
 | |
| .. c:function:: int ioctl( int fd, VIDIOC_S_CTRL, struct v4l2_control *argp )
 | |
|     :name: VIDIOC_S_CTRL
 | |
| 
 | |
| 
 | |
| Arguments
 | |
| =========
 | |
| 
 | |
| ``fd``
 | |
|     File descriptor returned by :ref:`open() <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.7cm}|
 | |
| 
 | |
| .. 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.
 | 
