diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2021-06-15 16:15:12 +0100 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2021-06-25 16:11:08 +0100 |
commit | 27aff949fbc1b9aabfc594bbfd6f94be55a086ec (patch) | |
tree | 9ddbc2462a685a6db3ed33f09ed7a493376439d6 /include/libcamera/base/timer.h | |
parent | 6410d1d37c1ea9d1d168840a7ba063facb0bc9d6 (diff) |
libcamera/base: Move extended base functionality
Move the functionality for the following components to the new
base support library:
- BoundMethod
- EventDispatcher
- EventDispatcherPoll
- Log
- Message
- Object
- Signal
- Semaphore
- Thread
- Timer
While it would be preferable to see these split to move one component
per commit, these components are all interdependent upon each other,
which leaves us with one big change performing the move for all of them.
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'include/libcamera/base/timer.h')
-rw-r--r-- | include/libcamera/base/timer.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/libcamera/base/timer.h b/include/libcamera/base/timer.h new file mode 100644 index 00000000..e79e85f1 --- /dev/null +++ b/include/libcamera/base/timer.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * timer.h - Generic timer + */ +#ifndef __LIBCAMERA_BASE_TIMER_H__ +#define __LIBCAMERA_BASE_TIMER_H__ + +#include <chrono> +#include <stdint.h> + +#include <libcamera/base/object.h> +#include <libcamera/base/signal.h> + +namespace libcamera { + +class Message; + +class Timer : public Object +{ +public: + Timer(Object *parent = nullptr); + ~Timer(); + + void start(unsigned int msec) { start(std::chrono::milliseconds(msec)); } + void start(std::chrono::milliseconds duration); + void start(std::chrono::steady_clock::time_point deadline); + void stop(); + bool isRunning() const; + + std::chrono::steady_clock::time_point deadline() const { return deadline_; } + + Signal<Timer *> timeout; + +protected: + void message(Message *msg) override; + +private: + void registerTimer(); + void unregisterTimer(); + + bool running_; + std::chrono::steady_clock::time_point deadline_; +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_BASE_TIMER_H__ */ |