Loading...
Searching...
No Matches
event_dispatcher_poll.h
Go to the documentation of this file.
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* Poll-based event dispatcher
*/
#pragma once
#include <list>
#include <map>
#include <vector>
#include <libcamera/base/private.h>
#include <libcamera/base/event_dispatcher.h>
#include <libcamera/base/unique_fd.h>
struct pollfd;
namespace libcamera {
class EventNotifier;
class Timer;
class EventDispatcherPoll final : public EventDispatcher
{
public:
EventDispatcherPoll();
~EventDispatcherPoll();
void registerEventNotifier(EventNotifier *notifier);
void unregisterEventNotifier(EventNotifier *notifier);
void registerTimer(Timer *timer);
void unregisterTimer(Timer *timer);
void processEvents();
void interrupt();
private:
struct EventNotifierSetPoll {
short events() const;
EventNotifier *notifiers[3];
};
int poll(std::vector<struct pollfd> *pollfds);
void processInterrupt(const struct pollfd &pfd);
void processNotifiers(const std::vector<struct pollfd> &pollfds);
void processTimers();
std::map<int, EventNotifierSetPoll> notifiers_;
std::list<Timer *> timers_;
UniqueFD eventfd_;
bool processingEvents_;
};
} /* namespace libcamera */
libcamera::EventDispatcherPoll::registerTimer
void registerTimer(Timer *timer)
Register a timer.
Definition event_dispatcher_poll.cpp:113
libcamera::EventDispatcherPoll::unregisterEventNotifier
void unregisterEventNotifier(EventNotifier *notifier)
Unregister an event notifier.
Definition event_dispatcher_poll.cpp:80
libcamera::EventDispatcherPoll::unregisterTimer
void unregisterTimer(Timer *timer)
Unregister a timer.
Definition event_dispatcher_poll.cpp:125
libcamera::EventDispatcherPoll::interrupt
void interrupt()
Interrupt any running processEvents() call as soon as possible.
Definition event_dispatcher_poll.cpp:174
libcamera::EventDispatcherPoll::registerEventNotifier
void registerEventNotifier(EventNotifier *notifier)
Register an event notifier.
Definition event_dispatcher_poll.cpp:65
libcamera::EventDispatcherPoll::processEvents
void processEvents()
Wait for and process pending events.
Definition event_dispatcher_poll.cpp:142
libcamera::EventDispatcher
Interface to manage the libcamera events and timers.
Definition event_dispatcher.h:18
libcamera::EventNotifier
Notify of activity on a file descriptor.
Definition event_notifier.h:20
libcamera::Timer
Single-shot timer interface.
Definition timer.h:22
libcamera::UniqueFD
unique_ptr-like wrapper for a file descriptor
Definition unique_fd.h:17
event_dispatcher.h
libcamera
Top-level libcamera namespace.
Definition backtrace.h:17
unique_fd.h
File descriptor wrapper that owns a file descriptor.