ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL
&manvol;

# VIDIOC_G_CTRL

# VIDIOC_S_CTRL

Get or set the value of a control

    	int ioctl
    	int fd
    	int request
    	struct v4l2_control
    *argp

## Arguments

`fd`

  &fd;

`request`

  VIDIOC_G_CTRL, VIDIOC_S_CTRL

`argp`

## Description

To get the current value of a control applications initialize the id field of a struct v4l2_control and call the `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 v4l2_control and call the `VIDIOC_S_CTRL` ioctl.

When the id is invalid drivers return an &EINVAL;. When the value is out of bounds drivers can choose to take the closest valid value or return an &ERANGE;, whatever seems more appropriate. However, `VIDIOC_S_CTRL` is a write-only ioctl, it does not return the actual new value.

These ioctls work only with user controls. For other control classes the &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; or &VIDIOC-TRY-EXT-CTRLS; must be used.

### struct v4l2_control

&cs-str;
__u32 | id | Identifies the control, set by the application.
__s32 | value | New value or current value.

&return-value;

EINVAL

  The &v4l2-control; id is invalid.

ERANGE

  The &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.