libcamera  v0.3.1+12-19bbca3c
Supporting cameras in Linux since 2019
event_dispatcher_poll.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2019, Google Inc.
4  *
5  * Poll-based event dispatcher
6  */
7 
8 #pragma once
9 
10 #include <list>
11 #include <map>
12 #include <vector>
13 
14 #include <libcamera/base/private.h>
15 
18 
19 struct pollfd;
20 
21 namespace libcamera {
22 
23 class EventNotifier;
24 class Timer;
25 
27 {
28 public:
31 
32  void registerEventNotifier(EventNotifier *notifier);
33  void unregisterEventNotifier(EventNotifier *notifier);
34 
35  void registerTimer(Timer *timer);
36  void unregisterTimer(Timer *timer);
37 
38  void processEvents();
39  void interrupt();
40 
41 private:
42  struct EventNotifierSetPoll {
43  short events() const;
44  EventNotifier *notifiers[3];
45  };
46 
47  int poll(std::vector<struct pollfd> *pollfds);
48  void processInterrupt(const struct pollfd &pfd);
49  void processNotifiers(const std::vector<struct pollfd> &pollfds);
50  void processTimers();
51 
52  std::map<int, EventNotifierSetPoll> notifiers_;
53  std::list<Timer *> timers_;
54  UniqueFD eventfd_;
55 
56  bool processingEvents_;
57 };
58 
59 } /* namespace libcamera */
File descriptor wrapper that owns a file descriptor.
A poll-based event dispatcher.
Definition: event_dispatcher_poll.h:26
Top-level libcamera namespace.
Definition: backtrace.h:17
void unregisterEventNotifier(EventNotifier *notifier)
Unregister an event notifier.
Definition: event_dispatcher_poll.cpp:81
Interface to manage the libcamera events and timers.
Definition: event_dispatcher.h:19
void unregisterTimer(Timer *timer)
Unregister a timer.
Definition: event_dispatcher_poll.cpp:126
Single-shot timer interface.
Definition: timer.h:22
void interrupt()
Interrupt any running processEvents() call as soon as possible.
Definition: event_dispatcher_poll.cpp:175
void registerEventNotifier(EventNotifier *notifier)
Register an event notifier.
Definition: event_dispatcher_poll.cpp:66
unique_ptr-like wrapper for a file descriptor
Definition: unique_fd.h:17
Notify of activity on a file descriptor.
Definition: event_notifier.h:19
void registerTimer(Timer *timer)
Register a timer.
Definition: event_dispatcher_poll.cpp:114
void processEvents()
Wait for and process pending events.
Definition: event_dispatcher_poll.cpp:143