Blame view
include/media/v4l2-event.h
5.79 KB
1802d0bee
|
1 |
/* SPDX-License-Identifier: GPL-2.0-only */ |
c3b5b0241
|
2 3 4 5 6 7 8 |
/* * v4l2-event.h * * V4L2 events. * * Copyright (C) 2009--2010 Nokia Corporation. * |
8c5dff905
|
9 |
* Contact: Sakari Ailus <sakari.ailus@iki.fi> |
c3b5b0241
|
10 11 12 13 14 15 16 17 18 19 |
*/ #ifndef V4L2_EVENT_H #define V4L2_EVENT_H #include <linux/types.h> #include <linux/videodev2.h> #include <linux/wait.h> struct v4l2_fh; |
4f4d14b70
|
20 |
struct v4l2_subdev; |
f1e393de3
|
21 |
struct v4l2_subscribed_event; |
c3b5b0241
|
22 |
struct video_device; |
b6fce850d
|
23 24 25 26 27 |
/** * struct v4l2_kevent - Internal kernel event struct. * @list: List node for the v4l2_fh->available list. * @sev: Pointer to parent v4l2_subscribed_event. * @event: The event itself. |
63635b54e
|
28 |
* @ts: The timestamp of the event. |
9d4ee1ad9
|
29 |
*/ |
c3b5b0241
|
30 31 |
struct v4l2_kevent { struct list_head list; |
f1e393de3
|
32 |
struct v4l2_subscribed_event *sev; |
c3b5b0241
|
33 |
struct v4l2_event event; |
63635b54e
|
34 |
u64 ts; |
c3b5b0241
|
35 |
}; |
9d4ee1ad9
|
36 37 |
/** * struct v4l2_subscribed_event_ops - Subscribed event operations. |
b6fce850d
|
38 39 40 41 42 43 |
* * @add: Optional callback, called when a new listener is added * @del: Optional callback, called when a listener stops listening * @replace: Optional callback that can replace event 'old' with event 'new'. * @merge: Optional callback that can merge event 'old' into event 'new'. */ |
c53c25493
|
44 |
struct v4l2_subscribed_event_ops { |
9d4ee1ad9
|
45 |
int (*add)(struct v4l2_subscribed_event *sev, unsigned int elems); |
c53c25493
|
46 47 48 49 |
void (*del)(struct v4l2_subscribed_event *sev); void (*replace)(struct v4l2_event *old, const struct v4l2_event *new); void (*merge)(const struct v4l2_event *old, struct v4l2_event *new); }; |
b6fce850d
|
50 |
/** |
9d4ee1ad9
|
51 52 53 |
* struct v4l2_subscribed_event - Internal struct representing a subscribed * event. * |
b6fce850d
|
54 55 56 57 58 |
* @list: List node for the v4l2_fh->subscribed list. * @type: Event type. * @id: Associated object ID (e.g. control ID). 0 if there isn't any. * @flags: Copy of v4l2_event_subscription->flags. * @fh: Filehandle that subscribed to this event. |
9d4ee1ad9
|
59 60 |
* @node: List node that hooks into the object's event list * (if there is one). |
b6fce850d
|
61 62 63 64 65 66 |
* @ops: v4l2_subscribed_event_ops * @elems: The number of elements in the events array. * @first: The index of the events containing the oldest available event. * @in_use: The number of queued events. * @events: An array of @elems events. */ |
c3b5b0241
|
67 68 69 |
struct v4l2_subscribed_event { struct list_head list; u32 type; |
6e239399e
|
70 |
u32 id; |
77068d36d
|
71 |
u32 flags; |
77068d36d
|
72 |
struct v4l2_fh *fh; |
77068d36d
|
73 |
struct list_head node; |
c53c25493
|
74 |
const struct v4l2_subscribed_event_ops *ops; |
9d4ee1ad9
|
75 76 77 |
unsigned int elems; unsigned int first; unsigned int in_use; |
f1e393de3
|
78 |
struct v4l2_kevent events[]; |
c3b5b0241
|
79 |
}; |
9d4ee1ad9
|
80 81 82 83 84 85 86 |
/** * v4l2_event_dequeue - Dequeue events from video device. * * @fh: pointer to struct v4l2_fh * @event: pointer to struct v4l2_event * @nonblocking: if not zero, waits for an event to arrive */ |
c3b5b0241
|
87 88 |
int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event, int nonblocking); |
9d4ee1ad9
|
89 90 91 92 93 94 95 96 97 98 99 100 101 |
/** * v4l2_event_queue - Queue events to video device. * * @vdev: pointer to &struct video_device * @ev: pointer to &struct v4l2_event * * The event will be queued for all &struct v4l2_fh file handlers. * * .. note:: * The driver's only responsibility is to fill in the type and the data * fields.The other fields will be filled in by V4L2. */ |
c3b5b0241
|
102 |
void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev); |
9d4ee1ad9
|
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/** * v4l2_event_queue_fh - Queue events to video device. * * @fh: pointer to &struct v4l2_fh * @ev: pointer to &struct v4l2_event * * * The event will be queued only for the specified &struct v4l2_fh file handler. * * .. note:: * The driver's only responsibility is to fill in the type and the data * fields.The other fields will be filled in by V4L2. */ |
6e239399e
|
117 |
void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev); |
9d4ee1ad9
|
118 119 120 121 122 123 124 125 |
/** * v4l2_event_pending - Check if an event is available * * @fh: pointer to &struct v4l2_fh * * Returns the number of pending events. */ |
c3b5b0241
|
126 |
int v4l2_event_pending(struct v4l2_fh *fh); |
9d4ee1ad9
|
127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
/** * v4l2_event_subscribe - Subscribes to an event * * @fh: pointer to &struct v4l2_fh * @sub: pointer to &struct v4l2_event_subscription * @elems: size of the events queue * @ops: pointer to &v4l2_subscribed_event_ops * * .. note:: * * if @elems is zero, the framework will fill in a default value, * with is currently 1 element. */ |
c3b5b0241
|
141 |
int v4l2_event_subscribe(struct v4l2_fh *fh, |
9d4ee1ad9
|
142 143 |
const struct v4l2_event_subscription *sub, unsigned int elems, |
c53c25493
|
144 |
const struct v4l2_subscribed_event_ops *ops); |
9d4ee1ad9
|
145 146 147 148 149 150 |
/** * v4l2_event_unsubscribe - Unsubscribes to an event * * @fh: pointer to &struct v4l2_fh * @sub: pointer to &struct v4l2_event_subscription */ |
c3b5b0241
|
151 |
int v4l2_event_unsubscribe(struct v4l2_fh *fh, |
85f5fe396
|
152 |
const struct v4l2_event_subscription *sub); |
9d4ee1ad9
|
153 154 155 156 157 |
/** * v4l2_event_unsubscribe_all - Unsubscribes to all events * * @fh: pointer to &struct v4l2_fh */ |
f1e393de3
|
158 |
void v4l2_event_unsubscribe_all(struct v4l2_fh *fh); |
9d4ee1ad9
|
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
/** * v4l2_event_subdev_unsubscribe - Subdev variant of v4l2_event_unsubscribe() * * @sd: pointer to &struct v4l2_subdev * @fh: pointer to &struct v4l2_fh * @sub: pointer to &struct v4l2_event_subscription * * .. note:: * * This function should be used for the &struct v4l2_subdev_core_ops * %unsubscribe_event field. */ int v4l2_event_subdev_unsubscribe(struct v4l2_subdev *sd, struct v4l2_fh *fh, |
4f4d14b70
|
174 |
struct v4l2_event_subscription *sub); |
9d4ee1ad9
|
175 |
/** |
e383ce073
|
176 |
* v4l2_src_change_event_subscribe - helper function that calls |
4a3fad709
|
177 |
* v4l2_event_subscribe() if the event is %V4L2_EVENT_SOURCE_CHANGE. |
9d4ee1ad9
|
178 179 180 181 |
* * @fh: pointer to struct v4l2_fh * @sub: pointer to &struct v4l2_event_subscription */ |
3cbe6e5bc
|
182 |
int v4l2_src_change_event_subscribe(struct v4l2_fh *fh, |
9d4ee1ad9
|
183 184 185 186 187 188 189 190 191 |
const struct v4l2_event_subscription *sub); /** * v4l2_src_change_event_subdev_subscribe - Variant of v4l2_event_subscribe(), * meant to subscribe only events of the type %V4L2_EVENT_SOURCE_CHANGE. * * @sd: pointer to &struct v4l2_subdev * @fh: pointer to &struct v4l2_fh * @sub: pointer to &struct v4l2_event_subscription */ |
3cbe6e5bc
|
192 |
int v4l2_src_change_event_subdev_subscribe(struct v4l2_subdev *sd, |
9d4ee1ad9
|
193 194 |
struct v4l2_fh *fh, struct v4l2_event_subscription *sub); |
c3b5b0241
|
195 |
#endif /* V4L2_EVENT_H */ |