1<refentry id="func-poll"> 2 <refmeta> 3 <refentrytitle>V4L2 poll()</refentrytitle> 4 &manvol; 5 </refmeta> 6 7 <refnamediv> 8 <refname>v4l2-poll</refname> 9 <refpurpose>Wait for some event on a file descriptor</refpurpose> 10 </refnamediv> 11 12 <refsynopsisdiv> 13 <funcsynopsis> 14 <funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo> 15 <funcprototype> 16 <funcdef>int <function>poll</function></funcdef> 17 <paramdef>struct pollfd *<parameter>ufds</parameter></paramdef> 18 <paramdef>unsigned int <parameter>nfds</parameter></paramdef> 19 <paramdef>int <parameter>timeout</parameter></paramdef> 20 </funcprototype> 21 </funcsynopsis> 22 </refsynopsisdiv> 23 24 <refsect1> 25 <title>Description</title> 26 27 <para>With the <function>poll()</function> function applications 28can suspend execution until the driver has captured data or is ready 29to accept data for output.</para> 30 31 <para>When streaming I/O has been negotiated this function waits 32until a buffer has been filled by the capture device and can be dequeued 33with the &VIDIOC-DQBUF; ioctl. For output devices this function waits 34until the device is ready to accept a new buffer to be queued up with 35the &VIDIOC-QBUF; ioctl for display. When buffers are already in the outgoing 36queue of the driver (capture) or the incoming queue isn't full (display) 37the function returns immediately.</para> 38 39 <para>On success <function>poll()</function> returns the number of 40file descriptors that have been selected (that is, file descriptors 41for which the <structfield>revents</structfield> field of the 42respective <structname>pollfd</structname> structure is non-zero). 43Capture devices set the <constant>POLLIN</constant> and 44<constant>POLLRDNORM</constant> flags in the 45<structfield>revents</structfield> field, output devices the 46<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant> 47flags. When the function timed out it returns a value of zero, on 48failure it returns <returnvalue>-1</returnvalue> and the 49<varname>errno</varname> variable is set appropriately. When the 50application did not call &VIDIOC-STREAMON; the 51<function>poll()</function> function succeeds, but sets the 52<constant>POLLERR</constant> flag in the 53<structfield>revents</structfield> field. When the 54application has called &VIDIOC-STREAMON; for a capture device but hasn't 55yet called &VIDIOC-QBUF;, the <function>poll()</function> function 56succeeds and sets the <constant>POLLERR</constant> flag in the 57<structfield>revents</structfield> field. For output devices this 58same situation will cause <function>poll()</function> to succeed 59as well, but it sets the <constant>POLLOUT</constant> and 60<constant>POLLWRNORM</constant> flags in the <structfield>revents</structfield> 61field.</para> 62 63 <para>If an event occurred (see &VIDIOC-DQEVENT;) then 64<constant>POLLPRI</constant> will be set in the <structfield>revents</structfield> 65field and <function>poll()</function> will return.</para> 66 67 <para>When use of the <function>read()</function> function has 68been negotiated and the driver does not capture yet, the 69<function>poll</function> function starts capturing. When that fails 70it returns a <constant>POLLERR</constant> as above. Otherwise it waits 71until data has been captured and can be read. When the driver captures 72continuously (as opposed to, for example, still images) the function 73may return immediately.</para> 74 75 <para>When use of the <function>write()</function> function has 76been negotiated and the driver does not stream yet, the 77<function>poll</function> function starts streaming. When that fails 78it returns a <constant>POLLERR</constant> as above. Otherwise it waits 79until the driver is ready for a non-blocking 80<function>write()</function> call.</para> 81 82 <para>If the caller is only interested in events (just 83<constant>POLLPRI</constant> is set in the <structfield>events</structfield> 84field), then <function>poll()</function> will <emphasis>not</emphasis> 85start streaming if the driver does not stream yet. This makes it 86possible to just poll for events and not for buffers.</para> 87 88 <para>All drivers implementing the <function>read()</function> or 89<function>write()</function> function or streaming I/O must also 90support the <function>poll()</function> function.</para> 91 92 <para>For more details see the 93<function>poll()</function> manual page.</para> 94 </refsect1> 95 96 <refsect1> 97 <title>Return Value</title> 98 99 <para>On success, <function>poll()</function> returns the number 100structures which have non-zero <structfield>revents</structfield> 101fields, or zero if the call timed out. On error 102<returnvalue>-1</returnvalue> is returned, and the 103<varname>errno</varname> variable is set appropriately:</para> 104 105 <variablelist> 106 <varlistentry> 107 <term><errorcode>EBADF</errorcode></term> 108 <listitem> 109 <para>One or more of the <parameter>ufds</parameter> members 110specify an invalid file descriptor.</para> 111 </listitem> 112 </varlistentry> 113 <varlistentry> 114 <term><errorcode>EBUSY</errorcode></term> 115 <listitem> 116 <para>The driver does not support multiple read or write 117streams and the device is already in use.</para> 118 </listitem> 119 </varlistentry> 120 <varlistentry> 121 <term><errorcode>EFAULT</errorcode></term> 122 <listitem> 123 <para><parameter>ufds</parameter> references an inaccessible 124memory area.</para> 125 </listitem> 126 </varlistentry> 127 <varlistentry> 128 <term><errorcode>EINTR</errorcode></term> 129 <listitem> 130 <para>The call was interrupted by a signal.</para> 131 </listitem> 132 </varlistentry> 133 <varlistentry> 134 <term><errorcode>EINVAL</errorcode></term> 135 <listitem> 136 <para>The <parameter>nfds</parameter> argument is greater 137than <constant>OPEN_MAX</constant>.</para> 138 </listitem> 139 </varlistentry> 140 </variablelist> 141 </refsect1> 142</refentry> 143