v4l2-event.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. #ifndef V4L2_EVENT_H
  25. #define V4L2_EVENT_H
  26. #include <linux/types.h>
  27. #include <linux/videodev2.h>
  28. #include <linux/wait.h>
  29. struct v4l2_fh;
  30. struct v4l2_subscribed_event;
  31. struct video_device;
  32. struct v4l2_kevent {
  33. /* list node for the v4l2_fh->available list */
  34. struct list_head list;
  35. /* pointer to parent v4l2_subscribed_event */
  36. struct v4l2_subscribed_event *sev;
  37. /* event itself */
  38. struct v4l2_event event;
  39. };
  40. struct v4l2_subscribed_event {
  41. /* list node for the v4l2_fh->subscribed list */
  42. struct list_head list;
  43. /* event type */
  44. u32 type;
  45. /* associated object ID (e.g. control ID) */
  46. u32 id;
  47. /* copy of v4l2_event_subscription->flags */
  48. u32 flags;
  49. /* filehandle that subscribed to this event */
  50. struct v4l2_fh *fh;
  51. /* list node that hooks into the object's event list (if there is one) */
  52. struct list_head node;
  53. /* Optional callback that can replace event 'old' with event 'new'. */
  54. void (*replace)(struct v4l2_event *old,
  55. const struct v4l2_event *new);
  56. /* Optional callback that can merge event 'old' into event 'new'. */
  57. void (*merge)(const struct v4l2_event *old,
  58. struct v4l2_event *new);
  59. /* the number of elements in the events array */
  60. unsigned elems;
  61. /* the index of the events containing the oldest available event */
  62. unsigned first;
  63. /* the number of queued events */
  64. unsigned in_use;
  65. /* an array of elems events */
  66. struct v4l2_kevent events[];
  67. };
  68. int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event,
  69. int nonblocking);
  70. void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev);
  71. void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev);
  72. int v4l2_event_pending(struct v4l2_fh *fh);
  73. int v4l2_event_subscribe(struct v4l2_fh *fh,
  74. struct v4l2_event_subscription *sub, unsigned elems);
  75. int v4l2_event_unsubscribe(struct v4l2_fh *fh,
  76. struct v4l2_event_subscription *sub);
  77. void v4l2_event_unsubscribe_all(struct v4l2_fh *fh);
  78. #endif /* V4L2_EVENT_H */