~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/media/v4l2-event.h

Version: ~ [ linux-5.2-rc1 ] ~ [ linux-5.1.2 ] ~ [ linux-5.0.16 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.43 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.119 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.176 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.179 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.139 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.67 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * v4l2-event.h
  3  *
  4  * V4L2 events.
  5  *
  6  * Copyright (C) 2009--2010 Nokia Corporation.
  7  *
  8  * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
  9  *
 10  * This program is free software; you can redistribute it and/or
 11  * modify it under the terms of the GNU General Public License
 12  * version 2 as published by the Free Software Foundation.
 13  *
 14  * This program is distributed in the hope that it will be useful, but
 15  * WITHOUT ANY WARRANTY; without even the implied warranty of
 16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 17  * General Public License for more details.
 18  *
 19  * You should have received a copy of the GNU General Public License
 20  * along with this program; if not, write to the Free Software
 21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 22  * 02110-1301 USA
 23  */
 24 
 25 #ifndef V4L2_EVENT_H
 26 #define V4L2_EVENT_H
 27 
 28 #include <linux/types.h>
 29 #include <linux/videodev2.h>
 30 #include <linux/wait.h>
 31 
 32 /*
 33  * Overview:
 34  *
 35  * Events are subscribed per-filehandle. An event specification consists of a
 36  * type and is optionally associated with an object identified through the
 37  * 'id' field. So an event is uniquely identified by the (type, id) tuple.
 38  *
 39  * The v4l2-fh struct has a list of subscribed events. The v4l2_subscribed_event
 40  * struct is added to that list, one for every subscribed event.
 41  *
 42  * Each v4l2_subscribed_event struct ends with an array of v4l2_kevent structs.
 43  * This array (ringbuffer, really) is used to store any events raised by the
 44  * driver. The v4l2_kevent struct links into the 'available' list of the
 45  * v4l2_fh struct so VIDIOC_DQEVENT will know which event to dequeue first.
 46  *
 47  * Finally, if the event subscription is associated with a particular object
 48  * such as a V4L2 control, then that object needs to know about that as well
 49  * so that an event can be raised by that object. So the 'node' field can
 50  * be used to link the v4l2_subscribed_event struct into a list of that
 51  * object.
 52  *
 53  * So to summarize:
 54  *
 55  * struct v4l2_fh has two lists: one of the subscribed events, and one of the
 56  * pending events.
 57  *
 58  * struct v4l2_subscribed_event has a ringbuffer of raised (pending) events of
 59  * that particular type.
 60  *
 61  * If struct v4l2_subscribed_event is associated with a specific object, then
 62  * that object will have an internal list of struct v4l2_subscribed_event so
 63  * it knows who subscribed an event to that object.
 64  */
 65 
 66 struct v4l2_fh;
 67 struct v4l2_subscribed_event;
 68 struct video_device;
 69 
 70 /** struct v4l2_kevent - Internal kernel event struct.
 71   * @list:      List node for the v4l2_fh->available list.
 72   * @sev:       Pointer to parent v4l2_subscribed_event.
 73   * @event:     The event itself.
 74   */
 75 struct v4l2_kevent {
 76         struct list_head        list;
 77         struct v4l2_subscribed_event *sev;
 78         struct v4l2_event       event;
 79 };
 80 
 81 /** struct v4l2_subscribed_event_ops - Subscribed event operations.
 82   * @add:       Optional callback, called when a new listener is added
 83   * @del:       Optional callback, called when a listener stops listening
 84   * @replace:   Optional callback that can replace event 'old' with event 'new'.
 85   * @merge:     Optional callback that can merge event 'old' into event 'new'.
 86   */
 87 struct v4l2_subscribed_event_ops {
 88         int  (*add)(struct v4l2_subscribed_event *sev, unsigned elems);
 89         void (*del)(struct v4l2_subscribed_event *sev);
 90         void (*replace)(struct v4l2_event *old, const struct v4l2_event *new);
 91         void (*merge)(const struct v4l2_event *old, struct v4l2_event *new);
 92 };
 93 
 94 /** struct v4l2_subscribed_event - Internal struct representing a subscribed event.
 95   * @list:      List node for the v4l2_fh->subscribed list.
 96   * @type:      Event type.
 97   * @id:        Associated object ID (e.g. control ID). 0 if there isn't any.
 98   * @flags:     Copy of v4l2_event_subscription->flags.
 99   * @fh:        Filehandle that subscribed to this event.
100   * @node:      List node that hooks into the object's event list (if there is one).
101   * @ops:       v4l2_subscribed_event_ops
102   * @elems:     The number of elements in the events array.
103   * @first:     The index of the events containing the oldest available event.
104   * @in_use:    The number of queued events.
105   * @events:    An array of @elems events.
106   */
107 struct v4l2_subscribed_event {
108         struct list_head        list;
109         u32                     type;
110         u32                     id;
111         u32                     flags;
112         struct v4l2_fh          *fh;
113         struct list_head        node;
114         const struct v4l2_subscribed_event_ops *ops;
115         unsigned                elems;
116         unsigned                first;
117         unsigned                in_use;
118         struct v4l2_kevent      events[];
119 };
120 
121 int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event,
122                        int nonblocking);
123 void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev);
124 void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev);
125 int v4l2_event_pending(struct v4l2_fh *fh);
126 int v4l2_event_subscribe(struct v4l2_fh *fh,
127                          struct v4l2_event_subscription *sub, unsigned elems,
128                          const struct v4l2_subscribed_event_ops *ops);
129 int v4l2_event_unsubscribe(struct v4l2_fh *fh,
130                            struct v4l2_event_subscription *sub);
131 void v4l2_event_unsubscribe_all(struct v4l2_fh *fh);
132 
133 #endif /* V4L2_EVENT_H */
134 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp