diff options
Diffstat (limited to 'Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml')
-rw-r--r-- | Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml b/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml new file mode 100644 index 000000000000..3aa7f8f9ff0c --- /dev/null +++ b/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml | |||
@@ -0,0 +1,307 @@ | |||
1 | <refentry id="vidioc-g-ext-ctrls"> | ||
2 | <refmeta> | ||
3 | <refentrytitle>ioctl VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, | ||
4 | VIDIOC_TRY_EXT_CTRLS</refentrytitle> | ||
5 | &manvol; | ||
6 | </refmeta> | ||
7 | |||
8 | <refnamediv> | ||
9 | <refname>VIDIOC_G_EXT_CTRLS</refname> | ||
10 | <refname>VIDIOC_S_EXT_CTRLS</refname> | ||
11 | <refname>VIDIOC_TRY_EXT_CTRLS</refname> | ||
12 | <refpurpose>Get or set the value of several controls, try control | ||
13 | values</refpurpose> | ||
14 | </refnamediv> | ||
15 | |||
16 | <refsynopsisdiv> | ||
17 | <funcsynopsis> | ||
18 | <funcprototype> | ||
19 | <funcdef>int <function>ioctl</function></funcdef> | ||
20 | <paramdef>int <parameter>fd</parameter></paramdef> | ||
21 | <paramdef>int <parameter>request</parameter></paramdef> | ||
22 | <paramdef>struct v4l2_ext_controls | ||
23 | *<parameter>argp</parameter></paramdef> | ||
24 | </funcprototype> | ||
25 | </funcsynopsis> | ||
26 | </refsynopsisdiv> | ||
27 | |||
28 | <refsect1> | ||
29 | <title>Arguments</title> | ||
30 | |||
31 | <variablelist> | ||
32 | <varlistentry> | ||
33 | <term><parameter>fd</parameter></term> | ||
34 | <listitem> | ||
35 | <para>&fd;</para> | ||
36 | </listitem> | ||
37 | </varlistentry> | ||
38 | <varlistentry> | ||
39 | <term><parameter>request</parameter></term> | ||
40 | <listitem> | ||
41 | <para>VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, | ||
42 | VIDIOC_TRY_EXT_CTRLS</para> | ||
43 | </listitem> | ||
44 | </varlistentry> | ||
45 | <varlistentry> | ||
46 | <term><parameter>argp</parameter></term> | ||
47 | <listitem> | ||
48 | <para></para> | ||
49 | </listitem> | ||
50 | </varlistentry> | ||
51 | </variablelist> | ||
52 | </refsect1> | ||
53 | |||
54 | <refsect1> | ||
55 | <title>Description</title> | ||
56 | |||
57 | <para>These ioctls allow the caller to get or set multiple | ||
58 | controls atomically. Control IDs are grouped into control classes (see | ||
59 | <xref linkend="ctrl-class" />) and all controls in the control array | ||
60 | must belong to the same control class.</para> | ||
61 | |||
62 | <para>Applications must always fill in the | ||
63 | <structfield>count</structfield>, | ||
64 | <structfield>ctrl_class</structfield>, | ||
65 | <structfield>controls</structfield> and | ||
66 | <structfield>reserved</structfield> fields of &v4l2-ext-controls;, and | ||
67 | initialize the &v4l2-ext-control; array pointed to by the | ||
68 | <structfield>controls</structfield> fields.</para> | ||
69 | |||
70 | <para>To get the current value of a set of controls applications | ||
71 | initialize the <structfield>id</structfield>, | ||
72 | <structfield>size</structfield> and <structfield>reserved2</structfield> fields | ||
73 | of each &v4l2-ext-control; and call the | ||
74 | <constant>VIDIOC_G_EXT_CTRLS</constant> ioctl. String controls controls | ||
75 | must also set the <structfield>string</structfield> field.</para> | ||
76 | |||
77 | <para>If the <structfield>size</structfield> is too small to | ||
78 | receive the control result (only relevant for pointer-type controls | ||
79 | like strings), then the driver will set <structfield>size</structfield> | ||
80 | to a valid value and return an &ENOSPC;. You should re-allocate the | ||
81 | string memory to this new size and try again. It is possible that the | ||
82 | same issue occurs again if the string has grown in the meantime. It is | ||
83 | recommended to call &VIDIOC-QUERYCTRL; first and use | ||
84 | <structfield>maximum</structfield>+1 as the new <structfield>size</structfield> | ||
85 | value. It is guaranteed that that is sufficient memory. | ||
86 | </para> | ||
87 | |||
88 | <para>To change the value of a set of controls applications | ||
89 | initialize the <structfield>id</structfield>, <structfield>size</structfield>, | ||
90 | <structfield>reserved2</structfield> and | ||
91 | <structfield>value/string</structfield> fields of each &v4l2-ext-control; and | ||
92 | call the <constant>VIDIOC_S_EXT_CTRLS</constant> ioctl. The controls | ||
93 | will only be set if <emphasis>all</emphasis> control values are | ||
94 | valid.</para> | ||
95 | |||
96 | <para>To check if a set of controls have correct values applications | ||
97 | initialize the <structfield>id</structfield>, <structfield>size</structfield>, | ||
98 | <structfield>reserved2</structfield> and | ||
99 | <structfield>value/string</structfield> fields of each &v4l2-ext-control; and | ||
100 | call the <constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctl. It is up to | ||
101 | the driver whether wrong values are automatically adjusted to a valid | ||
102 | value or if an error is returned.</para> | ||
103 | |||
104 | <para>When the <structfield>id</structfield> or | ||
105 | <structfield>ctrl_class</structfield> is invalid drivers return an | ||
106 | &EINVAL;. When the value is out of bounds drivers can choose to take | ||
107 | the closest valid value or return an &ERANGE;, whatever seems more | ||
108 | appropriate. In the first case the new value is set in | ||
109 | &v4l2-ext-control;.</para> | ||
110 | |||
111 | <para>The driver will only set/get these controls if all control | ||
112 | values are correct. This prevents the situation where only some of the | ||
113 | controls were set/get. Only low-level errors (⪚ a failed i2c | ||
114 | command) can still cause this situation.</para> | ||
115 | |||
116 | <table pgwide="1" frame="none" id="v4l2-ext-control"> | ||
117 | <title>struct <structname>v4l2_ext_control</structname></title> | ||
118 | <tgroup cols="4"> | ||
119 | &cs-ustr; | ||
120 | <tbody valign="top"> | ||
121 | <row> | ||
122 | <entry>__u32</entry> | ||
123 | <entry><structfield>id</structfield></entry> | ||
124 | <entry></entry> | ||
125 | <entry>Identifies the control, set by the | ||
126 | application.</entry> | ||
127 | </row> | ||
128 | <row> | ||
129 | <entry>__u32</entry> | ||
130 | <entry><structfield>size</structfield></entry> | ||
131 | <entry></entry> | ||
132 | <entry>The total size in bytes of the payload of this | ||
133 | control. This is normally 0, but for pointer controls this should be | ||
134 | set to the size of the memory containing the payload, or that will | ||
135 | receive the payload. If <constant>VIDIOC_G_EXT_CTRLS</constant> finds | ||
136 | that this value is less than is required to store | ||
137 | the payload result, then it is set to a value large enough to store the | ||
138 | payload result and ENOSPC is returned. Note that for string controls | ||
139 | this <structfield>size</structfield> field should not be confused with the length of the string. | ||
140 | This field refers to the size of the memory that contains the string. | ||
141 | The actual <emphasis>length</emphasis> of the string may well be much smaller. | ||
142 | </entry> | ||
143 | </row> | ||
144 | <row> | ||
145 | <entry>__u32</entry> | ||
146 | <entry><structfield>reserved2</structfield>[1]</entry> | ||
147 | <entry></entry> | ||
148 | <entry>Reserved for future extensions. Drivers and | ||
149 | applications must set the array to zero.</entry> | ||
150 | </row> | ||
151 | <row> | ||
152 | <entry>union</entry> | ||
153 | <entry>(anonymous)</entry> | ||
154 | </row> | ||
155 | <row> | ||
156 | <entry></entry> | ||
157 | <entry>__s32</entry> | ||
158 | <entry><structfield>value</structfield></entry> | ||
159 | <entry>New value or current value.</entry> | ||
160 | </row> | ||
161 | <row> | ||
162 | <entry></entry> | ||
163 | <entry>__s64</entry> | ||
164 | <entry><structfield>value64</structfield></entry> | ||
165 | <entry>New value or current value.</entry> | ||
166 | </row> | ||
167 | <row> | ||
168 | <entry></entry> | ||
169 | <entry>char *</entry> | ||
170 | <entry><structfield>string</structfield></entry> | ||
171 | <entry>A pointer to a string.</entry> | ||
172 | </row> | ||
173 | </tbody> | ||
174 | </tgroup> | ||
175 | </table> | ||
176 | |||
177 | <table pgwide="1" frame="none" id="v4l2-ext-controls"> | ||
178 | <title>struct <structname>v4l2_ext_controls</structname></title> | ||
179 | <tgroup cols="3"> | ||
180 | &cs-str; | ||
181 | <tbody valign="top"> | ||
182 | <row> | ||
183 | <entry>__u32</entry> | ||
184 | <entry><structfield>ctrl_class</structfield></entry> | ||
185 | <entry>The control class to which all controls belong, see | ||
186 | <xref linkend="ctrl-class" />.</entry> | ||
187 | </row> | ||
188 | <row> | ||
189 | <entry>__u32</entry> | ||
190 | <entry><structfield>count</structfield></entry> | ||
191 | <entry>The number of controls in the controls array. May | ||
192 | also be zero.</entry> | ||
193 | </row> | ||
194 | <row> | ||
195 | <entry>__u32</entry> | ||
196 | <entry><structfield>error_idx</structfield></entry> | ||
197 | <entry>Set by the driver in case of an error. It is the | ||
198 | index of the control causing the error or equal to 'count' when the | ||
199 | error is not associated with a particular control. Undefined when the | ||
200 | ioctl returns 0 (success).</entry> | ||
201 | </row> | ||
202 | <row> | ||
203 | <entry>__u32</entry> | ||
204 | <entry><structfield>reserved</structfield>[2]</entry> | ||
205 | <entry>Reserved for future extensions. Drivers and | ||
206 | applications must set the array to zero.</entry> | ||
207 | </row> | ||
208 | <row> | ||
209 | <entry>&v4l2-ext-control; *</entry> | ||
210 | <entry><structfield>controls</structfield></entry> | ||
211 | <entry>Pointer to an array of | ||
212 | <structfield>count</structfield> v4l2_ext_control structures. Ignored | ||
213 | if <structfield>count</structfield> equals zero.</entry> | ||
214 | </row> | ||
215 | </tbody> | ||
216 | </tgroup> | ||
217 | </table> | ||
218 | |||
219 | <table pgwide="1" frame="none" id="ctrl-class"> | ||
220 | <title>Control classes</title> | ||
221 | <tgroup cols="3"> | ||
222 | &cs-def; | ||
223 | <tbody valign="top"> | ||
224 | <row> | ||
225 | <entry><constant>V4L2_CTRL_CLASS_USER</constant></entry> | ||
226 | <entry>0x980000</entry> | ||
227 | <entry>The class containing user controls. These controls | ||
228 | are described in <xref linkend="control" />. All controls that can be set | ||
229 | using the &VIDIOC-S-CTRL; and &VIDIOC-G-CTRL; ioctl belong to this | ||
230 | class.</entry> | ||
231 | </row> | ||
232 | <row> | ||
233 | <entry><constant>V4L2_CTRL_CLASS_MPEG</constant></entry> | ||
234 | <entry>0x990000</entry> | ||
235 | <entry>The class containing MPEG compression controls. | ||
236 | These controls are described in <xref | ||
237 | linkend="mpeg-controls" />.</entry> | ||
238 | </row> | ||
239 | <row> | ||
240 | <entry><constant>V4L2_CTRL_CLASS_CAMERA</constant></entry> | ||
241 | <entry>0x9a0000</entry> | ||
242 | <entry>The class containing camera controls. | ||
243 | These controls are described in <xref | ||
244 | linkend="camera-controls" />.</entry> | ||
245 | </row> | ||
246 | <row> | ||
247 | <entry><constant>V4L2_CTRL_CLASS_FM_TX</constant></entry> | ||
248 | <entry>0x9b0000</entry> | ||
249 | <entry>The class containing FM Transmitter (FM TX) controls. | ||
250 | These controls are described in <xref | ||
251 | linkend="fm-tx-controls" />.</entry> | ||
252 | </row> | ||
253 | </tbody> | ||
254 | </tgroup> | ||
255 | </table> | ||
256 | |||
257 | </refsect1> | ||
258 | |||
259 | <refsect1> | ||
260 | &return-value; | ||
261 | |||
262 | <variablelist> | ||
263 | <varlistentry> | ||
264 | <term><errorcode>EINVAL</errorcode></term> | ||
265 | <listitem> | ||
266 | <para>The &v4l2-ext-control; <structfield>id</structfield> | ||
267 | is invalid or the &v4l2-ext-controls; | ||
268 | <structfield>ctrl_class</structfield> is invalid. This error code is | ||
269 | also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and | ||
270 | <constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctls if two or more | ||
271 | control values are in conflict.</para> | ||
272 | </listitem> | ||
273 | </varlistentry> | ||
274 | <varlistentry> | ||
275 | <term><errorcode>ERANGE</errorcode></term> | ||
276 | <listitem> | ||
277 | <para>The &v4l2-ext-control; <structfield>value</structfield> | ||
278 | is out of bounds.</para> | ||
279 | </listitem> | ||
280 | </varlistentry> | ||
281 | <varlistentry> | ||
282 | <term><errorcode>EBUSY</errorcode></term> | ||
283 | <listitem> | ||
284 | <para>The control is temporarily not changeable, possibly | ||
285 | because another applications took over control of the device function | ||
286 | this control belongs to.</para> | ||
287 | </listitem> | ||
288 | </varlistentry> | ||
289 | <varlistentry> | ||
290 | <term><errorcode>ENOSPC</errorcode></term> | ||
291 | <listitem> | ||
292 | <para>The space reserved for the control's payload is insufficient. | ||
293 | The field <structfield>size</structfield> is set to a value that is enough | ||
294 | to store the payload and this error code is returned.</para> | ||
295 | </listitem> | ||
296 | </varlistentry> | ||
297 | </variablelist> | ||
298 | </refsect1> | ||
299 | </refentry> | ||
300 | |||
301 | <!-- | ||
302 | Local Variables: | ||
303 | mode: sgml | ||
304 | sgml-parent-document: "v4l2.sgml" | ||
305 | indent-tabs-mode: nil | ||
306 | End: | ||
307 | --> | ||