~ubuntu-branches/ubuntu/saucy/linux-n900/saucy

« back to all changes in this revision

Viewing changes to Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Poirier
  • Date: 2011-02-18 09:43:31 UTC
  • Revision ID: james.westby@ubuntu.com-20110218094331-eyubsja4f9k0yhmq
Tags: 2.6.35-1.1
Initial release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 (&eg; 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
-->