summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/libcamera/camera_manager.h7
-rw-r--r--include/libcamera/event_dispatcher.h33
-rw-r--r--include/libcamera/event_notifier.h42
-rw-r--r--include/libcamera/libcamera.h1
-rw-r--r--include/libcamera/meson.build3
-rw-r--r--include/libcamera/timer.h37
6 files changed, 123 insertions, 0 deletions
diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
index e14da0f8..15e7c162 100644
--- a/include/libcamera/camera_manager.h
+++ b/include/libcamera/camera_manager.h
@@ -14,6 +14,7 @@ namespace libcamera {
class Camera;
class DeviceEnumerator;
+class EventDispatcher;
class PipelineHandler;
class CameraManager
@@ -27,13 +28,19 @@ public:
static CameraManager *instance();
+ void setEventDispatcher(EventDispatcher *dispatcher);
+ EventDispatcher *eventDispatcher();
+
private:
CameraManager();
CameraManager(const CameraManager &) = delete;
void operator=(const CameraManager &) = delete;
+ ~CameraManager();
DeviceEnumerator *enumerator_;
std::vector<PipelineHandler *> pipes_;
+
+ EventDispatcher *dispatcher_;
};
} /* namespace libcamera */
diff --git a/include/libcamera/event_dispatcher.h b/include/libcamera/event_dispatcher.h
new file mode 100644
index 00000000..c20518c6
--- /dev/null
+++ b/include/libcamera/event_dispatcher.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * event_dispatcher.h - Event dispatcher
+ */
+#ifndef __LIBCAMERA_EVENT_DISPATCHER_H__
+#define __LIBCAMERA_EVENT_DISPATCHER_H__
+
+#include <vector>
+
+namespace libcamera {
+
+class EventNotifier;
+class Timer;
+
+class EventDispatcher
+{
+public:
+ virtual ~EventDispatcher();
+
+ virtual void registerEventNotifier(EventNotifier *notifier) = 0;
+ virtual void unregisterEventNotifier(EventNotifier *notifier) = 0;
+
+ virtual void registerTimer(Timer *timer) = 0;
+ virtual void unregisterTimer(Timer *timer) = 0;
+
+ virtual void processEvents() = 0;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_EVENT_DISPATCHER_H__ */
diff --git a/include/libcamera/event_notifier.h b/include/libcamera/event_notifier.h
new file mode 100644
index 00000000..1e9b6da1
--- /dev/null
+++ b/include/libcamera/event_notifier.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * event_notifier.h - File descriptor event notifier
+ */
+#ifndef __LIBCAMERA_EVENT_NOTIFIER_H__
+#define __LIBCAMERA_EVENT_NOTIFIER_H__
+
+#include <libcamera/signal.h>
+
+namespace libcamera {
+
+class EventNotifier
+{
+public:
+ enum Type {
+ Read,
+ Write,
+ Exception,
+ };
+
+ EventNotifier(int fd, Type type);
+ virtual ~EventNotifier();
+
+ Type type() const { return type_; }
+ int fd() const { return fd_; }
+
+ bool enabled() const { return enabled_; }
+ void setEnabled(bool enable);
+
+ Signal<EventNotifier *> activated;
+
+private:
+ int fd_;
+ Type type_;
+ bool enabled_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_EVENT_NOTIFIER_H__ */
diff --git a/include/libcamera/libcamera.h b/include/libcamera/libcamera.h
index f9556a8b..785babef 100644
--- a/include/libcamera/libcamera.h
+++ b/include/libcamera/libcamera.h
@@ -9,5 +9,6 @@
#include <libcamera/camera.h>
#include <libcamera/camera_manager.h>
+#include <libcamera/event_dispatcher.h>
#endif /* __LIBCAMERA_LIBCAMERA_H__ */
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index 6f87689e..d7cb55ba 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -1,8 +1,11 @@
libcamera_api = files([
'camera.h',
'camera_manager.h',
+ 'event_dispatcher.h',
+ 'event_notifier.h',
'libcamera.h',
'signal.h',
+ 'timer.h',
])
install_headers(libcamera_api,
diff --git a/include/libcamera/timer.h b/include/libcamera/timer.h
new file mode 100644
index 00000000..97dcc01f
--- /dev/null
+++ b/include/libcamera/timer.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * timer.h - Generic timer
+ */
+#ifndef __LIBCAMERA_TIMER_H__
+#define __LIBCAMERA_TIMER_H__
+
+#include <cstdint>
+
+#include <libcamera/signal.h>
+
+namespace libcamera {
+
+class Timer
+{
+public:
+ Timer();
+
+ void start(unsigned int msec);
+ void stop();
+ bool isRunning() const;
+
+ unsigned int interval() const { return interval_; }
+ uint64_t deadline() const { return deadline_; }
+
+ Signal<Timer *> timeout;
+
+private:
+ unsigned int interval_;
+ uint64_t deadline_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_TIMER_H__ */