117 lines
3.2 KiB
ReStructuredText
117 lines
3.2 KiB
ReStructuredText
|
.. -*- coding: utf-8; mode: rst -*-
|
||
|
|
||
|
.. _VIDIOC_SUBSCRIBE_EVENT:
|
||
|
.. _VIDIOC_UNSUBSCRIBE_EVENT:
|
||
|
|
||
|
******************************************************
|
||
|
ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT
|
||
|
******************************************************
|
||
|
|
||
|
Name
|
||
|
====
|
||
|
|
||
|
VIDIOC_SUBSCRIBE_EVENT - VIDIOC_UNSUBSCRIBE_EVENT - Subscribe or unsubscribe event
|
||
|
|
||
|
|
||
|
Synopsis
|
||
|
========
|
||
|
|
||
|
.. c:function:: int ioctl( int fd, VIDIOC_SUBSCRIBE_EVENT, struct v4l2_event_subscription *argp )
|
||
|
:name: VIDIOC_SUBSCRIBE_EVENT
|
||
|
|
||
|
.. c:function:: int ioctl( int fd, VIDIOC_UNSUBSCRIBE_EVENT, struct v4l2_event_subscription *argp )
|
||
|
:name: VIDIOC_UNSUBSCRIBE_EVENT
|
||
|
|
||
|
|
||
|
Arguments
|
||
|
=========
|
||
|
|
||
|
``fd``
|
||
|
File descriptor returned by :ref:`open() <func-open>`.
|
||
|
|
||
|
``argp``
|
||
|
Pointer to struct :c:type:`v4l2_event_subscription`.
|
||
|
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
|
||
|
Subscribe or unsubscribe V4L2 event. Subscribed events are dequeued by
|
||
|
using the :ref:`VIDIOC_DQEVENT` ioctl.
|
||
|
|
||
|
|
||
|
.. tabularcolumns:: |p{4.6cm}|p{4.4cm}|p{8.7cm}|
|
||
|
|
||
|
.. c:type:: v4l2_event_subscription
|
||
|
|
||
|
.. flat-table:: struct v4l2_event_subscription
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 1 1 2
|
||
|
|
||
|
* - __u32
|
||
|
- ``type``
|
||
|
- Type of the event, see :ref:`event-type`.
|
||
|
|
||
|
.. note::
|
||
|
|
||
|
``V4L2_EVENT_ALL`` can be used with
|
||
|
:ref:`VIDIOC_UNSUBSCRIBE_EVENT <VIDIOC_SUBSCRIBE_EVENT>` for
|
||
|
unsubscribing all events at once.
|
||
|
* - __u32
|
||
|
- ``id``
|
||
|
- ID of the event source. If there is no ID associated with the
|
||
|
event source, then set this to 0. Whether or not an event needs an
|
||
|
ID depends on the event type.
|
||
|
* - __u32
|
||
|
- ``flags``
|
||
|
- Event flags, see :ref:`event-flags`.
|
||
|
* - __u32
|
||
|
- ``reserved``\ [5]
|
||
|
- Reserved for future extensions. Drivers and applications must set
|
||
|
the array to zero.
|
||
|
|
||
|
|
||
|
|
||
|
.. tabularcolumns:: |p{6.8cm}|p{2.2cm}|p{8.5cm}|
|
||
|
|
||
|
.. _event-flags:
|
||
|
|
||
|
.. flat-table:: Event Flags
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 3 1 4
|
||
|
|
||
|
* - ``V4L2_EVENT_SUB_FL_SEND_INITIAL``
|
||
|
- 0x0001
|
||
|
- When this event is subscribed an initial event will be sent
|
||
|
containing the current status. This only makes sense for events
|
||
|
that are triggered by a status change such as ``V4L2_EVENT_CTRL``.
|
||
|
Other events will ignore this flag.
|
||
|
* - ``V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK``
|
||
|
- 0x0002
|
||
|
- If set, then events directly caused by an ioctl will also be sent
|
||
|
to the filehandle that called that ioctl. For example, changing a
|
||
|
control using :ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` will cause
|
||
|
a V4L2_EVENT_CTRL to be sent back to that same filehandle.
|
||
|
Normally such events are suppressed to prevent feedback loops
|
||
|
where an application changes a control to a one value and then
|
||
|
another, and then receives an event telling it that that control
|
||
|
has changed to the first value.
|
||
|
|
||
|
Since it can't tell whether that event was caused by another
|
||
|
application or by the :ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>`
|
||
|
call it is hard to decide whether to set the control to the value
|
||
|
in the event, or ignore it.
|
||
|
|
||
|
Think carefully when you set this flag so you won't get into
|
||
|
situations like that.
|
||
|
|
||
|
|
||
|
Return Value
|
||
|
============
|
||
|
|
||
|
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||
|
appropriately. The generic error codes are described at the
|
||
|
:ref:`Generic Error Codes <gen-errors>` chapter.
|