€•tÑ Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ ”Œchildren”]”(Œtranslations”Œ
LanguagesNode”“”)�”}”(hhh]”(h Œpending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ
attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ8/translations/zh_CN/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuŒtagname”hhhubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/zh_TW/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/it_IT/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/ja_JP/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/ko_KR/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/pt_BR/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/sp_SP/userspace-api/media/drivers/uvcvideo”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h
hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/userspace-api/media/drivers/uvcvideo.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ&The Linux USB Video Class (UVC) driver”h]”hŒ&The Linux USB Video Class (UVC) driver”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ|This file documents some driver-specific aspects of the UVC driver, such as
driver-specific ioctls and implementation notes.”h]”hŒ|This file documents some driver-specific aspects of the UVC driver, such as
driver-specific ioctls and implementation notes.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒkQuestions and remarks can be sent to the Linux UVC development mailing list at
linux-media@vger.kernel.org.”h]”(hŒOQuestions and remarks can be sent to the Linux UVC development mailing list at
”…”�”}”(hhíh²hh³Nh´NubhŒ reference”“”)�”}”(hŒlinux-media@vger.kernel.org”h]”hŒlinux-media@vger.kernel.org”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ"mailto:linux-media@vger.kernel.org”uh1hõhhíubhŒ.”…”�”}”(hhíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒExtension Unit (XU) support”h]”hŒExtension Unit (XU) support”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIntroduction”h]”hŒIntroduction”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj" h²hh³hÇh´KubhÞ)�”}”(hŒ¿The UVC specification allows for vendor-specific extensions through extension
units (XUs). The Linux UVC driver supports extension unit controls (XU controls)
through two separate mechanisms:”h]”hŒ¿The UVC specification allows for vendor-specific extensions through extension
units (XUs). The Linux UVC driver supports extension unit controls (XU controls)
through two separate mechanisms:”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj" h²hubhŒblock_quote”“”)�”}”(hŒ_- through mappings of XU controls to V4L2 controls
- through a driver-specific ioctl interface
”h]”hŒbullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ0through mappings of XU controls to V4L2 controls”h]”hÞ)�”}”(hjP h]”hŒ0through mappings of XU controls to V4L2 controls”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjN ubah}”(h]”h ]”h"]”h$]”h&]”uh1jL hjI ubjM )�”}”(hŒ*through a driver-specific ioctl interface
”h]”hÞ)�”}”(hŒ)through a driver-specific ioctl interface”h]”hŒ)through a driver-specific ioctl interface”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khje ubah}”(h]”h ]”h"]”h$]”h&]”uh1jL hjI ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jG h³hÇh´KhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jA h³hÇh´Khj" h²hubhÞ)�”}”(hŒ¬The first one allows generic V4L2 applications to use XU controls by mapping
certain XU controls onto V4L2 controls, which then show up during ordinary
control enumeration.”h]”hŒ¬The first one allows generic V4L2 applications to use XU controls by mapping
certain XU controls onto V4L2 controls, which then show up during ordinary
control enumeration.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj" h²hubhÞ)�”}”(hŒ°The second mechanism requires uvcvideo-specific knowledge for the application to
access XU controls but exposes the entire UVC XU concept to user space for
maximum flexibility.”h]”hŒ°The second mechanism requires uvcvideo-specific knowledge for the application to
access XU controls but exposes the entire UVC XU concept to user space for
maximum flexibility.”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj" h²hubhÞ)�”}”(hŒMBoth mechanisms complement each other and are described in more detail below.”h]”hŒMBoth mechanisms complement each other and are described in more detail below.”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hj" h²hubeh}”(h]”Œintroduction”ah ]”h"]”Œintroduction”ah$]”h&]”uh1hÈhj h²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒControl mappings”h]”hŒControl mappings”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj½ h²hh³hÇh´K&ubhÞ)�”}”(hXº The UVC driver provides an API for user space applications to define so-called
control mappings at runtime. These allow for individual XU controls or byte
ranges thereof to be mapped to new V4L2 controls. Such controls appear and
function exactly like normal V4L2 controls (i.e. the stock controls, such as
brightness, contrast, etc.). However, reading or writing of such a V4L2 controls
triggers a read or write of the associated XU control.”h]”hXº The UVC driver provides an API for user space applications to define so-called
control mappings at runtime. These allow for individual XU controls or byte
ranges thereof to be mapped to new V4L2 controls. Such controls appear and
function exactly like normal V4L2 controls (i.e. the stock controls, such as
brightness, contrast, etc.). However, reading or writing of such a V4L2 controls
triggers a read or write of the associated XU control.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hj½ h²hubhÞ)�”}”(hXJ The ioctl used to create these control mappings is called UVCIOC_CTRL_MAP.
Previous driver versions (before 0.2.0) required another ioctl to be used
beforehand (UVCIOC_CTRL_ADD) to pass XU control information to the UVC driver.
This is no longer necessary as newer uvcvideo versions query the information
directly from the device.”h]”hXJ The ioctl used to create these control mappings is called UVCIOC_CTRL_MAP.
Previous driver versions (before 0.2.0) required another ioctl to be used
beforehand (UVCIOC_CTRL_ADD) to pass XU control information to the UVC driver.
This is no longer necessary as newer uvcvideo versions query the information
directly from the device.”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj½ h²hubhÞ)�”}”(hŒdFor details on the UVCIOC_CTRL_MAP ioctl please refer to the section titled
"IOCTL reference" below.”h]”hŒhFor details on the UVCIOC_CTRL_MAP ioctl please refer to the section titled
“IOCTL referenceâ€� below.”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K5hj½ h²hubhŒenumerated_list”“”)�”}”(hhh]”jM )�”}”(hŒ%Driver specific XU control interface
”h]”hÞ)�”}”(hŒ$Driver specific XU control interface”h]”hŒ$Driver specific XU control interface”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K9hjý ubah}”(h]”h ]”h"]”h$]”h&]”uh1jL hjú h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”Œstart”Kuh1jø hj½ h²hh³hÇh´K9ubhÞ)�”}”(hŒûFor applications that need to access XU controls directly, e.g. for testing
purposes, firmware upload, or accessing binary controls, a second mechanism to
access XU controls is provided in the form of a driver-specific ioctl, namely
UVCIOC_CTRL_QUERY.”h]”hŒûFor applications that need to access XU controls directly, e.g. for testing
purposes, firmware upload, or accessing binary controls, a second mechanism to
access XU controls is provided in the form of a driver-specific ioctl, namely
UVCIOC_CTRL_QUERY.”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hj½ h²hubhÞ)�”}”(hŒƒA call to this ioctl allows applications to send queries to the UVC driver that
directly map to the low-level UVC control requests.”h]”hŒƒA call to this ioctl allows applications to send queries to the UVC driver that
directly map to the low-level UVC control requests.”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K@hj½ h²hubhÞ)�”}”(hXP In order to make such a request the UVC unit ID of the control's extension unit
and the control selector need to be known. This information either needs to be
hardcoded in the application or queried using other ways such as by parsing the
UVC descriptor or, if available, using the media controller API to enumerate a
device's entities.”h]”hXT In order to make such a request the UVC unit ID of the control’s extension unit
and the control selector need to be known. This information either needs to be
hardcoded in the application or queried using other ways such as by parsing the
UVC descriptor or, if available, using the media controller API to enumerate a
device’s entities.”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KChj½ h²hubhÞ)�”}”(hXº Unless the control size is already known it is necessary to first make a
UVC_GET_LEN requests in order to be able to allocate a sufficiently large buffer
and set the buffer size to the correct value. Similarly, to find out whether
UVC_GET_CUR or UVC_SET_CUR are valid requests for a given control, a
UVC_GET_INFO request should be made. The bits 0 (GET supported) and 1 (SET
supported) of the resulting byte indicate which requests are valid.”h]”hXº Unless the control size is already known it is necessary to first make a
UVC_GET_LEN requests in order to be able to allocate a sufficiently large buffer
and set the buffer size to the correct value. Similarly, to find out whether
UVC_GET_CUR or UVC_SET_CUR are valid requests for a given control, a
UVC_GET_INFO request should be made. The bits 0 (GET supported) and 1 (SET
supported) of the resulting byte indicate which requests are valid.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhj½ h²hubhÞ)�”}”(hX' With the addition of the UVCIOC_CTRL_QUERY ioctl the UVCIOC_CTRL_GET and
UVCIOC_CTRL_SET ioctls have become obsolete since their functionality is a
subset of the former ioctl. For the time being they are still supported but
application developers are encouraged to use UVCIOC_CTRL_QUERY instead.”h]”hX' With the addition of the UVCIOC_CTRL_QUERY ioctl the UVCIOC_CTRL_GET and
UVCIOC_CTRL_SET ioctls have become obsolete since their functionality is a
subset of the former ioctl. For the time being they are still supported but
application developers are encouraged to use UVCIOC_CTRL_QUERY instead.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KPhj½ h²hubhÞ)�”}”(hŒfFor details on the UVCIOC_CTRL_QUERY ioctl please refer to the section titled
"IOCTL reference" below.”h]”hŒjFor details on the UVCIOC_CTRL_QUERY ioctl please refer to the section titled
“IOCTL referenceâ€� below.”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KUhj½ h²hubeh}”(h]”Œcontrol-mappings”ah ]”h"]”Œcontrol mappings”ah$]”h&]”uh1hÈhj h²hh³hÇh´K&ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSecurity”h]”hŒSecurity”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj} h²hh³hÇh´KZubhÞ)�”}”(hŒ˜The API doesn't currently provide a fine-grained access control facility. The
UVCIOC_CTRL_ADD and UVCIOC_CTRL_MAP ioctls require super user permissions.”h]”hŒšThe API doesn’t currently provide a fine-grained access control facility. The
UVCIOC_CTRL_ADD and UVCIOC_CTRL_MAP ioctls require super user permissions.”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hj} h²hubhÞ)�”}”(hŒ/Suggestions on how to improve this are welcome.”h]”hŒ/Suggestions on how to improve this are welcome.”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K_hj} h²hubeh}”(h]”Œsecurity”ah ]”h"]”Œsecurity”ah$]”h&]”uh1hÈhj h²hh³hÇh´KZubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Debugging”h]”hŒ Debugging”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj² h²hh³hÇh´KcubhÞ)�”}”(hŒÛIn order to debug problems related to XU controls or controls in general it is
recommended to enable the UVC_TRACE_CONTROL bit in the module parameter 'trace'.
This causes extra output to be written into the system log.”h]”hŒßIn order to debug problems related to XU controls or controls in general it is
recommended to enable the UVC_TRACE_CONTROL bit in the module parameter ‘trace’.
This causes extra output to be written into the system log.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kehj² h²hubeh}”(h]”Œ debugging”ah ]”h"]”Œ debugging”ah$]”h&]”uh1hÈhj h²hh³hÇh´KcubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIOCTL reference”h]”hŒIOCTL reference”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÙ h²hh³hÇh´KkubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ5UVCIOC_CTRL_MAP - Map a UVC control to a V4L2 control”h]”hŒ5UVCIOC_CTRL_MAP - Map a UVC control to a V4L2 control”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjê h²hh³hÇh´KnubhÞ)�”}”(hŒ;**This IOCTL is deprecated and will be eventually removed**”h]”hŒstrong”“”)�”}”(hjý h]”hŒ7This IOCTL is deprecated and will be eventually removed”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphjê h²hubhÞ)�”}”(hŒ'Argument: struct uvc_xu_control_mapping”h]”hŒ'Argument: struct uvc_xu_control_mapping”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Krhjê h²hubhÞ)�”}”(hŒ**Description**:”h]”(j )�”}”(hŒ**Description**”h]”hŒDescription”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hj" ubhŒ:”…”�”}”(hj" h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kthjê h²hubjB )�”}”(hX0 This ioctl creates a mapping between a UVC control or part of a UVC
control and a V4L2 control. Once mappings are defined, userspace
applications can access vendor-defined UVC control through the V4L2
control API.
To create a mapping, applications fill the uvc_xu_control_mapping
structure with information about an existing UVC control defined with
UVCIOC_CTRL_ADD and a new V4L2 control.
A UVC control can be mapped to several V4L2 controls. For instance,
a UVC pan/tilt control could be mapped to separate pan and tilt V4L2
controls. The UVC control is divided into non overlapping fields using
the 'size' and 'offset' fields and are then independently mapped to
V4L2 control.
For signed integer V4L2 controls the data_type field should be set to
UVC_CTRL_DATA_TYPE_SIGNED. Other values are currently ignored.
”h]”(hÞ)�”}”(hŒÕThis ioctl creates a mapping between a UVC control or part of a UVC
control and a V4L2 control. Once mappings are defined, userspace
applications can access vendor-defined UVC control through the V4L2
control API.”h]”hŒÕThis ioctl creates a mapping between a UVC control or part of a UVC
control and a V4L2 control. Once mappings are defined, userspace
applications can access vendor-defined UVC control through the V4L2
control API.”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kvhj> ubhÞ)�”}”(hŒ¯To create a mapping, applications fill the uvc_xu_control_mapping
structure with information about an existing UVC control defined with
UVCIOC_CTRL_ADD and a new V4L2 control.”h]”hŒ¯To create a mapping, applications fill the uvc_xu_control_mapping
structure with information about an existing UVC control defined with
UVCIOC_CTRL_ADD and a new V4L2 control.”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K{hj> ubhÞ)�”}”(hX! A UVC control can be mapped to several V4L2 controls. For instance,
a UVC pan/tilt control could be mapped to separate pan and tilt V4L2
controls. The UVC control is divided into non overlapping fields using
the 'size' and 'offset' fields and are then independently mapped to
V4L2 control.”h]”hX) A UVC control can be mapped to several V4L2 controls. For instance,
a UVC pan/tilt control could be mapped to separate pan and tilt V4L2
controls. The UVC control is divided into non overlapping fields using
the ‘size’ and ‘offset’ fields and are then independently mapped to
V4L2 control.”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj> ubhÞ)�”}”(hŒ„For signed integer V4L2 controls the data_type field should be set to
UVC_CTRL_DATA_TYPE_SIGNED. Other values are currently ignored.”h]”hŒ„For signed integer V4L2 controls the data_type field should be set to
UVC_CTRL_DATA_TYPE_SIGNED. Other values are currently ignored.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K…hj> ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jA h³hÇh´Kvhjê h²hubhÞ)�”}”(hŒ**Return value**:”h]”(j )�”}”(hŒ**Return value**”h]”hŒReturn value”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hj€ ubhŒ:”…”�”}”(hj€ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kˆhjê h²hubjB )�”}”(hXu On success 0 is returned. On error -1 is returned and errno is set
appropriately.
ENOMEM
Not enough memory to perform the operation.
EPERM
Insufficient privileges (super user privileges are required).
EINVAL
No such UVC control.
EOVERFLOW
The requested offset and size would overflow the UVC control.
EEXIST
Mapping already exists.
”h]”(hÞ)�”}”(hŒQOn success 0 is returned. On error -1 is returned and errno is set
appropriately.”h]”hŒQOn success 0 is returned. On error -1 is returned and errno is set
appropriately.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŠhjœ ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ2ENOMEM
Not enough memory to perform the operation.”h]”(hŒterm”“”)�”}”(hŒENOMEM”h]”hŒENOMEM”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´K�hjµ ubhŒ
definition”“”)�”}”(hhh]”hÞ)�”}”(hŒ+Not enough memory to perform the operation.”h]”hŒ+Not enough memory to perform the operation.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŽhjË ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjµ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´K�hj° ubj´ )�”}”(hŒCEPERM
Insufficient privileges (super user privileges are required).”h]”(jº )�”}”(hŒEPERM”h]”hŒEPERM”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´K�hjè ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ=Insufficient privileges (super user privileges are required).”h]”hŒ=Insufficient privileges (super user privileges are required).”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjè ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´K�hj° ubj´ )�”}”(hŒEINVAL
No such UVC control.”h]”(jº )�”}”(hŒEINVAL”h]”hŒEINVAL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´K‘hj ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒNo such UVC control.”h]”hŒNo such UVC control.”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K’hj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´K‘hj° ubj´ )�”}”(hŒGEOVERFLOW
The requested offset and size would overflow the UVC control.”h]”(jº )�”}”(hŒ EOVERFLOW”h]”hŒ EOVERFLOW”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´K“hjF ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ=The requested offset and size would overflow the UVC control.”h]”hŒ=The requested offset and size would overflow the UVC control.”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K”hjX ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´K“hj° ubj´ )�”}”(hŒEEXIST
Mapping already exists.
”h]”(jº )�”}”(hŒEEXIST”h]”hŒEEXIST”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´K–hju ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒMapping already exists.”h]”hŒMapping already exists.”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K–hj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hju ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´K–hj° ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hjœ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jA h³hÇh´KŠhjê h²hubhÞ)�”}”(hŒ**Data types**:”h]”(j )�”}”(hŒ**Data types**”h]”hŒ
Data types”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hj° ubhŒ:”…”�”}”(hj° h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K˜hjê h²hubhŒ
literal_block”“”)�”}”(hXO * struct uvc_xu_control_mapping
__u32 id V4L2 control identifier
__u8 name[32] V4L2 control name
__u8 entity[16] UVC extension unit GUID
__u8 selector UVC control selector
__u8 size V4L2 control size (in bits)
__u8 offset V4L2 control offset (in bits)
enum v4l2_ctrl_type
v4l2_type V4L2 control type
enum uvc_control_data_type
data_type UVC control data type
struct uvc_menu_info
*menu_info Array of menu entries (for menu controls only)
__u32 menu_count Number of menu entries (for menu controls only)
* struct uvc_menu_info
__u32 value Menu entry value used by the device
__u8 name[32] Menu entry name
* enum uvc_control_data_type
UVC_CTRL_DATA_TYPE_RAW Raw control (byte array)
UVC_CTRL_DATA_TYPE_SIGNED Signed integer
UVC_CTRL_DATA_TYPE_UNSIGNED Unsigned integer
UVC_CTRL_DATA_TYPE_BOOLEAN Boolean
UVC_CTRL_DATA_TYPE_ENUM Enumeration
UVC_CTRL_DATA_TYPE_BITMASK Bitmask
UVC_CTRL_DATA_TYPE_RECT Rectangular area”h]”hXO * struct uvc_xu_control_mapping
__u32 id V4L2 control identifier
__u8 name[32] V4L2 control name
__u8 entity[16] UVC extension unit GUID
__u8 selector UVC control selector
__u8 size V4L2 control size (in bits)
__u8 offset V4L2 control offset (in bits)
enum v4l2_ctrl_type
v4l2_type V4L2 control type
enum uvc_control_data_type
data_type UVC control data type
struct uvc_menu_info
*menu_info Array of menu entries (for menu controls only)
__u32 menu_count Number of menu entries (for menu controls only)
* struct uvc_menu_info
__u32 value Menu entry value used by the device
__u8 name[32] Menu entry name
* enum uvc_control_data_type
UVC_CTRL_DATA_TYPE_RAW Raw control (byte array)
UVC_CTRL_DATA_TYPE_SIGNED Signed integer
UVC_CTRL_DATA_TYPE_UNSIGNED Unsigned integer
UVC_CTRL_DATA_TYPE_BOOLEAN Boolean
UVC_CTRL_DATA_TYPE_ENUM Enumeration
UVC_CTRL_DATA_TYPE_BITMASK Bitmask
UVC_CTRL_DATA_TYPE_RECT Rectangular area”…”�”}”hjÎ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”Œnone”Œhighlight_args”}”uh1jÌ h³hÇh´Kšhjê h²hubeh}”(h]”Œ3uvcioc-ctrl-map-map-a-uvc-control-to-a-v4l2-control”ah ]”h"]”Œ5uvcioc_ctrl_map - map a uvc control to a v4l2 control”ah$]”h&]”uh1hÈhjÙ h²hh³hÇh´KnubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ*UVCIOC_CTRL_QUERY - Query a UVC XU control”h]”hŒ*UVCIOC_CTRL_QUERY - Query a UVC XU control”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjé h²hh³hÇh´K¾ubhÞ)�”}”(hŒ%Argument: struct uvc_xu_control_query”h]”hŒ%Argument: struct uvc_xu_control_query”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¿hjé h²hubhÞ)�”}”(hŒ**Description**:”h]”(j )�”}”(hŒ**Description**”h]”hŒDescription”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hj ubhŒ:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÁhjé h²hubjB )�”}”(hXÐ This ioctl queries a UVC XU control identified by its extension unit ID
and control selector.
There are a number of different queries available that closely
correspond to the low-level control requests described in the UVC
specification. These requests are:
UVC_GET_CUR
Obtain the current value of the control.
UVC_GET_MIN
Obtain the minimum value of the control.
UVC_GET_MAX
Obtain the maximum value of the control.
UVC_GET_DEF
Obtain the default value of the control.
UVC_GET_RES
Query the resolution of the control, i.e. the step size of the
allowed control values.
UVC_GET_LEN
Query the size of the control in bytes.
UVC_GET_INFO
Query the control information bitmap, which indicates whether
get/set requests are supported.
UVC_SET_CUR
Update the value of the control.
Applications must set the 'size' field to the correct length for the
control. Exceptions are the UVC_GET_LEN and UVC_GET_INFO queries, for
which the size must be set to 2 and 1, respectively. The 'data' field
must point to a valid writable buffer big enough to hold the indicated
number of data bytes.
Data is copied directly from the device without any driver-side
processing. Applications are responsible for data buffer formatting,
including little-endian/big-endian conversion. This is particularly
important for the result of the UVC_GET_LEN requests, which is always
returned as a little-endian 16-bit integer by the device.
”h]”(hÞ)�”}”(hŒ]This ioctl queries a UVC XU control identified by its extension unit ID
and control selector.”h]”hŒ]This ioctl queries a UVC XU control identified by its extension unit ID
and control selector.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÃhj$ ubhÞ)�”}”(hŒ£There are a number of different queries available that closely
correspond to the low-level control requests described in the UVC
specification. These requests are:”h]”hŒ£There are a number of different queries available that closely
correspond to the low-level control requests described in the UVC
specification. These requests are:”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhj$ ubj¯ )�”}”(hhh]”(j´ )�”}”(hŒ4UVC_GET_CUR
Obtain the current value of the control.”h]”(jº )�”}”(hŒUVC_GET_CUR”h]”hŒUVC_GET_CUR”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÊhjG ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ(Obtain the current value of the control.”h]”hŒ(Obtain the current value of the control.”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KËhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjG ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÊhjD ubj´ )�”}”(hŒ4UVC_GET_MIN
Obtain the minimum value of the control.”h]”(jº )�”}”(hŒUVC_GET_MIN”h]”hŒUVC_GET_MIN”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÌhjv ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ(Obtain the minimum value of the control.”h]”hŒ(Obtain the minimum value of the control.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÍhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjv ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÌhjD ubj´ )�”}”(hŒ4UVC_GET_MAX
Obtain the maximum value of the control.”h]”(jº )�”}”(hŒUVC_GET_MAX”h]”hŒUVC_GET_MAX”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÎhj¥ ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ(Obtain the maximum value of the control.”h]”hŒ(Obtain the maximum value of the control.”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÎhjD ubj´ )�”}”(hŒ4UVC_GET_DEF
Obtain the default value of the control.”h]”(jº )�”}”(hŒUVC_GET_DEF”h]”hŒUVC_GET_DEF”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÐhjÔ ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ(Obtain the default value of the control.”h]”hŒ(Obtain the default value of the control.”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÑhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÐhjD ubj´ )�”}”(hŒbUVC_GET_RES
Query the resolution of the control, i.e. the step size of the
allowed control values.”h]”(jº )�”}”(hŒUVC_GET_RES”h]”hŒUVC_GET_RES”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÓhj ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒVQuery the resolution of the control, i.e. the step size of the
allowed control values.”h]”hŒVQuery the resolution of the control, i.e. the step size of the
allowed control values.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÓhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÓhjD ubj´ )�”}”(hŒ3UVC_GET_LEN
Query the size of the control in bytes.”h]”(jº )�”}”(hŒUVC_GET_LEN”h]”hŒUVC_GET_LEN”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÕhj2 ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ'Query the size of the control in bytes.”h]”hŒ'Query the size of the control in bytes.”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÖhjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÕhjD ubj´ )�”}”(hŒjUVC_GET_INFO
Query the control information bitmap, which indicates whether
get/set requests are supported.”h]”(jº )�”}”(hŒUVC_GET_INFO”h]”hŒUVC_GET_INFO”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KØhja ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ]Query the control information bitmap, which indicates whether
get/set requests are supported.”h]”hŒ]Query the control information bitmap, which indicates whether
get/set requests are supported.”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KØhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KØhjD ubj´ )�”}”(hŒ-UVC_SET_CUR
Update the value of the control.
”h]”(jº )�”}”(hŒUVC_SET_CUR”h]”hŒUVC_SET_CUR”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KÛhj� ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ Update the value of the control.”h]”hŒ Update the value of the control.”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÛhj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´KÛhjD ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hj$ ubhÞ)�”}”(hX- Applications must set the 'size' field to the correct length for the
control. Exceptions are the UVC_GET_LEN and UVC_GET_INFO queries, for
which the size must be set to 2 and 1, respectively. The 'data' field
must point to a valid writable buffer big enough to hold the indicated
number of data bytes.”h]”hX5 Applications must set the ‘size’ field to the correct length for the
control. Exceptions are the UVC_GET_LEN and UVC_GET_INFO queries, for
which the size must be set to 2 and 1, respectively. The ‘data’ field
must point to a valid writable buffer big enough to hold the indicated
number of data bytes.”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÝhj$ ubhÞ)�”}”(hXH Data is copied directly from the device without any driver-side
processing. Applications are responsible for data buffer formatting,
including little-endian/big-endian conversion. This is particularly
important for the result of the UVC_GET_LEN requests, which is always
returned as a little-endian 16-bit integer by the device.”h]”hXH Data is copied directly from the device without any driver-side
processing. Applications are responsible for data buffer formatting,
including little-endian/big-endian conversion. This is particularly
important for the result of the UVC_GET_LEN requests, which is always
returned as a little-endian 16-bit integer by the device.”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhj$ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jA h³hÇh´KÃhjé h²hubhÞ)�”}”(hŒ**Return value**:”h]”(j )�”}”(hŒ**Return value**”h]”hŒReturn value”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hjç ubhŒ:”…”�”}”(hjç h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kéhjé h²hubjB )�”}”(hXß On success 0 is returned. On error -1 is returned and errno is set
appropriately.
ENOENT
The device does not support the given control or the specified
extension unit could not be found.
ENOBUFS
The specified buffer size is incorrect (too big or too small).
EINVAL
An invalid request code was passed.
EBADRQC
The given request is not supported by the given control.
EFAULT
The data pointer references an inaccessible memory area.
”h]”(hÞ)�”}”(hŒQOn success 0 is returned. On error -1 is returned and errno is set
appropriately.”h]”hŒQOn success 0 is returned. On error -1 is returned and errno is set
appropriately.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Këhj ubj¯ )�”}”(hhh]”(j´ )�”}”(hŒhENOENT
The device does not support the given control or the specified
extension unit could not be found.”h]”(jº )�”}”(hŒENOENT”h]”hŒENOENT”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´Kïhj ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒaThe device does not support the given control or the specified
extension unit could not be found.”h]”hŒaThe device does not support the given control or the specified
extension unit could not be found.”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kïhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Kïhj ubj´ )�”}”(hŒFENOBUFS
The specified buffer size is incorrect (too big or too small).”h]”(jº )�”}”(hŒENOBUFS”h]”hŒENOBUFS”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KñhjG ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ>The specified buffer size is incorrect (too big or too small).”h]”hŒ>The specified buffer size is incorrect (too big or too small).”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KòhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjG ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Kñhj ubj´ )�”}”(hŒ*EINVAL
An invalid request code was passed.”h]”(jº )�”}”(hŒEINVAL”h]”hŒEINVAL”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´Kóhjv ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ#An invalid request code was passed.”h]”hŒ#An invalid request code was passed.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kôhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjv ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Kóhj ubj´ )�”}”(hŒ@EBADRQC
The given request is not supported by the given control.”h]”(jº )�”}”(hŒEBADRQC”h]”hŒEBADRQC”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´Kõhj¥ ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ8The given request is not supported by the given control.”h]”hŒ8The given request is not supported by the given control.”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Köhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Kõhj ubj´ )�”}”(hŒ@EFAULT
The data pointer references an inaccessible memory area.
”h]”(jº )�”}”(hŒEFAULT”h]”hŒEFAULT”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´KøhjÔ ubjÊ )�”}”(hhh]”hÞ)�”}”(hŒ8The data pointer references an inaccessible memory area.”h]”hŒ8The data pointer references an inaccessible memory area.”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Køhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Køhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jA h³hÇh´Këhjé h²hubhÞ)�”}”(hŒ**Data types**:”h]”(j )�”}”(hŒ**Data types**”h]”hŒ
Data types”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ hj ubhŒ:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kúhjé h²hubjÍ )�”}”(hX * struct uvc_xu_control_query
__u8 unit Extension unit ID
__u8 selector Control selector
__u8 query Request code to send to the device
__u16 size Control data size (in bytes)
__u8 *data Control value”h]”hX * struct uvc_xu_control_query
__u8 unit Extension unit ID
__u8 selector Control selector
__u8 query Request code to send to the device
__u16 size Control data size (in bytes)
__u8 *data Control value”…”�”}”hj+ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjÜ ‰jÝ Œnone”jß }”uh1jÌ h³hÇh´Kühjé h²hubeh}”(h]”Œ(uvcioc-ctrl-query-query-a-uvc-xu-control”ah ]”h"]”Œ*uvcioc_ctrl_query - query a uvc xu control”ah$]”h&]”uh1hÈhjÙ h²hh³hÇh´K¾ubeh}”(h]”Œioctl-reference”ah ]”h"]”Œioctl reference”ah$]”h&]”uh1hÈhj h²hh³hÇh´Kkubeh}”(h]”Œextension-unit-xu-support”ah ]”h"]”Œextension unit (xu) support”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDriver-specific V4L2 controls”h]”hŒDriver-specific V4L2 controls”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjS h²hh³hÇh´MubhÞ)�”}”(hŒCThe uvcvideo driver implements the following UVC-specific controls:”h]”hŒCThe uvcvideo driver implements the following UVC-specific controls:”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M
hjS h²hubj¯ )�”}”(hhh]”(j´ )�”}”(hX ``V4L2_CID_UVC_REGION_OF_INTEREST_RECT (struct)``
This control determines the region of interest (ROI). ROI is a
rectangular area represented by a struct :c:type:`v4l2_rect`. The
rectangle is in global sensor coordinates using pixel units. It is
independent of the field of view, not impacted by any cropping or
scaling.
Use ``V4L2_CTRL_WHICH_MIN_VAL`` and ``V4L2_CTRL_WHICH_MAX_VAL`` to query
the range of rectangle sizes.
Setting a ROI allows the camera to optimize the capture for the region.
The value of ``V4L2_CID_REGION_OF_INTEREST_AUTO`` control determines
the detailed behavior.
An example of use of this control, can be found in the:
`Chrome OS USB camera HAL.
`
”h]”(jº )�”}”(hŒ1``V4L2_CID_UVC_REGION_OF_INTEREST_RECT (struct)``”h]”hŒliteral”“”)�”}”(hj{ h]”hŒ-V4L2_CID_UVC_REGION_OF_INTEREST_RECT (struct)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´Mhju ubjÊ )�”}”(hhh]”(hÞ)�”}”(hX This control determines the region of interest (ROI). ROI is a
rectangular area represented by a struct :c:type:`v4l2_rect`. The
rectangle is in global sensor coordinates using pixel units. It is
independent of the field of view, not impacted by any cropping or
scaling.”h]”(hŒhThis control determines the region of interest (ROI). ROI is a
rectangular area represented by a struct ”…”�”}”(hj• h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_rect`”h]”j~ )�”}”(hjŸ h]”hŒ v4l2_rect”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1j} hj� ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ$userspace-api/media/drivers/uvcvideo”Œ refdomain”j¬ Œreftype”Œtype”Œrefexplicit”‰Œrefwarn”‰Œ reftarget”Œ v4l2_rect”uh1hh³hÇh´M
hj• ubhŒ“. The
rectangle is in global sensor coordinates using pixel units. It is
independent of the field of view, not impacted by any cropping or
scaling.”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M
hj’ ubhÞ)�”}”(hŒfUse ``V4L2_CTRL_WHICH_MIN_VAL`` and ``V4L2_CTRL_WHICH_MAX_VAL`` to query
the range of rectangle sizes.”h]”(hŒUse ”…”�”}”(hjÊ h²hh³Nh´Nubj~ )�”}”(hŒ``V4L2_CTRL_WHICH_MIN_VAL``”h]”hŒV4L2_CTRL_WHICH_MIN_VAL”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjÊ ubhŒ and ”…”�”}”(hjÊ h²hh³Nh´Nubj~ )�”}”(hŒ``V4L2_CTRL_WHICH_MAX_VAL``”h]”hŒV4L2_CTRL_WHICH_MAX_VAL”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjÊ ubhŒ' to query
the range of rectangle sizes.”…”�”}”(hjÊ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj’ ubhÞ)�”}”(hŒ£Setting a ROI allows the camera to optimize the capture for the region.
The value of ``V4L2_CID_REGION_OF_INTEREST_AUTO`` control determines
the detailed behavior.”h]”(hŒUSetting a ROI allows the camera to optimize the capture for the region.
The value of ”…”�”}”(hjü h²hh³Nh´Nubj~ )�”}”(hŒ$``V4L2_CID_REGION_OF_INTEREST_AUTO``”h]”hŒ V4L2_CID_REGION_OF_INTEREST_AUTO”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjü ubhŒ* control determines
the detailed behavior.”…”�”}”(hjü h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj’ ubhÞ)�”}”(hŒ¾An example of use of this control, can be found in the:
`Chrome OS USB camera HAL.
`”h]”(hŒ8An example of use of this control, can be found in the:
”…”�”}”(hj h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ†`Chrome OS USB camera HAL.
`”h]”hŒ„Chrome OS USB camera HAL.
”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj’ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hju ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´Mhjr ubj´ )�”}”(hX ``V4L2_CID_UVC_REGION_OF_INTEREST_AUTO (bitmask)``
This determines which, if any, on-board features should track to the
Region of Interest specified by the current value of
``V4L2_CID_UVD__REGION_OF_INTEREST_RECT``.
Max value is a mask indicating all supported Auto Controls.
”h]”(jº )�”}”(hŒ2``V4L2_CID_UVC_REGION_OF_INTEREST_AUTO (bitmask)``”h]”j~ )�”}”(hjL h]”hŒ.V4L2_CID_UVC_REGION_OF_INTEREST_AUTO (bitmask)”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹ h³hÇh´M$hjF ubjÊ )�”}”(hhh]”(hÞ)�”}”(hŒ¤This determines which, if any, on-board features should track to the
Region of Interest specified by the current value of
``V4L2_CID_UVD__REGION_OF_INTEREST_RECT``.”h]”(hŒzThis determines which, if any, on-board features should track to the
Region of Interest specified by the current value of
”…”�”}”(hjd h²hh³Nh´Nubj~ )�”}”(hŒ)``V4L2_CID_UVD__REGION_OF_INTEREST_RECT``”h]”hŒ%V4L2_CID_UVD__REGION_OF_INTEREST_RECT”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjd ubhŒ.”…”�”}”(hjd h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hja ubhÞ)�”}”(hŒ;Max value is a mask indicating all supported Auto Controls.”h]”hŒ;Max value is a mask indicating all supported Auto Controls.”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M$hja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³hÇh´M$hjr h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hjS h²hh³hÇh´NubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1j® hj« ubj¯ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1j® hj« ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒ-``V4L2_UVC_REGION_OF_INTEREST_AUTO_EXPOSURE``”h]”j~ )�”}”(hjÕ h]”hŒ)V4L2_UVC_REGION_OF_INTEREST_AUTO_EXPOSURE”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M*hjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjË ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒfSetting this bit causes automatic exposure to track the region of
interest instead of the whole image.”h]”hŒfSetting this bit causes automatic exposure to track the region of
interest instead of the whole image.”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M+hjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjË ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ)``V4L2_UVC_REGION_OF_INTEREST_AUTO_IRIS``”h]”j~ )�”}”(hj
h]”hŒ%V4L2_UVC_REGION_OF_INTEREST_AUTO_IRIS”…”�”}”(hj
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj
ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M-hj
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj
ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒbSetting this bit causes automatic iris to track the region of interest
instead of the whole image.”h]”hŒbSetting this bit causes automatic iris to track the region of interest
instead of the whole image.”…”�”}”(hj3
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M.hj0
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj
ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ2``V4L2_UVC_REGION_OF_INTEREST_AUTO_WHITE_BALANCE``”h]”j~ )�”}”(hjU
h]”hŒ.V4L2_UVC_REGION_OF_INTEREST_AUTO_WHITE_BALANCE”…”�”}”(hjW
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjS
ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M0hjP
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjM
ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒkSetting this bit causes automatic white balance to track the region
of interest instead of the whole image.”h]”hŒkSetting this bit causes automatic white balance to track the region
of interest instead of the whole image.”…”�”}”(hjs
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M1hjp
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjM
ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ*``V4L2_UVC_REGION_OF_INTEREST_AUTO_FOCUS``”h]”j~ )�”}”(hj•
h]”hŒ&V4L2_UVC_REGION_OF_INTEREST_AUTO_FOCUS”…”�”}”(hj—
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj“
ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M3hj�
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj�
ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒnSetting this bit causes automatic focus adjustment to track the region
of interest instead of the whole image.”h]”hŒnSetting this bit causes automatic focus adjustment to track the region
of interest instead of the whole image.”…”�”}”(hj³
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M4hj°
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj�
ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ0``V4L2_UVC_REGION_OF_INTEREST_AUTO_FACE_DETECT``”h]”j~ )�”}”(hjÕ
h]”hŒ,V4L2_UVC_REGION_OF_INTEREST_AUTO_FACE_DETECT”…”�”}”(hj×
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hjÓ
ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M6hjÐ
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjÍ
ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒlSetting this bit causes automatic face detection to track the region of
interest instead of the whole image.”h]”hŒlSetting this bit causes automatic face detection to track the region of
interest instead of the whole image.”…”�”}”(hjó
h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M7hjð
ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hjÍ
ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ5``V4L2_UVC_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK``”h]”j~ )�”}”(hj h]”hŒ1V4L2_UVC_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M9hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj
ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒ—Setting this bit enables automatic face detection and tracking. The
current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
the driver.”h]”(hŒUSetting this bit enables automatic face detection and tracking. The
current value of ”…”�”}”(hj3 h²hh³Nh´Nubj~ )�”}”(hŒ$``V4L2_CID_REGION_OF_INTEREST_RECT``”h]”hŒ V4L2_CID_REGION_OF_INTEREST_RECT”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj3 ubhŒ may be updated by
the driver.”…”�”}”(hj3 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M:hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj
ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ8``V4L2_UVC_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION``”h]”j~ )�”}”(hjg h]”hŒ4V4L2_UVC_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hje ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M=hjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj_ ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒ�Setting this bit enables automatic image stabilization. The
current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
the driver.”h]”(hŒMSetting this bit enables automatic image stabilization. The
current value of ”…”�”}”(hj… h²hh³Nh´Nubj~ )�”}”(hŒ$``V4L2_CID_REGION_OF_INTEREST_RECT``”h]”hŒ V4L2_CID_REGION_OF_INTEREST_RECT”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj… ubhŒ may be updated by
the driver.”…”�”}”(hj… h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M>hj‚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj_ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubjÊ )�”}”(hhh]”(jÏ )�”}”(hhh]”hÞ)�”}”(hŒ3``V4L2_UVC_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY``”h]”j~ )�”}”(hj¹ h]”hŒ/V4L2_UVC_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j} hj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MAhj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj± ubjÏ )�”}”(hhh]”hÞ)�”}”(hŒdSetting this bit enables automatically capture the specified region
with higher quality if possible.”h]”hŒdSetting this bit enables automatically capture the specified region
with higher quality if possible.”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MBhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎ hj± ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉ hjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄ hj« ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j© hj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤ hjS h²hh³Nh´Nubeh}”(h]”Œdriver-specific-v4l2-controls”ah ]”h"]”Œdriver-specific v4l2 controls”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Mubeh}”(h]”Œ$the-linux-usb-video-class-uvc-driver”ah ]”h"]”Œ&the linux usb video class (uvc) driver”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒcurrent_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒsource_link”NŒ
source_url”NŒ
toc_backlinks”jÎ Œfootnote_backlinks”KŒ
sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ
strip_classes”NŒreport_level”KŒ
halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j6 Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ
language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ
dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ_destination”NŒ
_config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒraw_enabled”KŒline_length_limit”M'Œpep_references”NŒpep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒrfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œsmart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ
docinfo_xform”KŒsectsubtitle_xform”‰Œ
image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j j jP jM jº j· jz jw j¯ j¬ jÖ jÓ jH jE jæ jã j@ j= j j uŒ nametypes”}”(j ‰jP ‰jº ‰jz ‰j¯ ‰jÖ ‰jH ‰jæ ‰j@ ‰j ‰uh}”(j hÊjM j j· j" jw j½ j¬ j} jÓ j² jE jÙ jã jê j= jé j jS uŒ
footnote_refs”}”Œ
citation_refs”}”Œ
autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”K Œ
id_counter”Œcollections”ŒCounter”“”}”…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hŒ:Enumerated list start value not ordinal-1: "3" (ordinal 3)”h]”hŒ>Enumerated list start value not ordinal-1: “3â€� (ordinal 3)”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjš ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j˜ hj½ h²hh³hÇh´K9ubaŒtransform_messages”]”Œtransformer”NŒinclude_log”]”Œ
decoration”Nh²hub.