[libcamera-devel] [PATCH 3/3] libcamera: message: Add user message types
Jacopo Mondi
jacopo at jmondi.org
Mon Jul 15 07:59:35 CEST 2019
Add an operation to the Message class to create unique message type to
be used by derived classes to uniquely identify the messages they
handle.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
src/libcamera/include/message.h | 8 ++++++++
src/libcamera/message.cpp | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/src/libcamera/include/message.h b/src/libcamera/include/message.h
index db17d647c280..e7dd85a606a3 100644
--- a/src/libcamera/include/message.h
+++ b/src/libcamera/include/message.h
@@ -7,6 +7,8 @@
#ifndef __LIBCAMERA_MESSAGE_H__
#define __LIBCAMERA_MESSAGE_H__
+#include <mutex>
+
namespace libcamera {
class Object;
@@ -19,6 +21,7 @@ public:
enum Type {
None = 0,
SignalMessage = 1,
+ UserMessage = 1000,
};
Message(Type type);
@@ -27,11 +30,16 @@ public:
Type type() const { return type_; }
Object *receiver() const { return receiver_; }
+ static Type registerUserMessageType();
+
private:
friend class Thread;
Type type_;
Object *receiver_;
+
+ static std::mutex mutex_;
+ static Type nextUserType_;
};
class SignalMessage : public Message
diff --git a/src/libcamera/message.cpp b/src/libcamera/message.cpp
index 0580c1051622..f82a3115595d 100644
--- a/src/libcamera/message.cpp
+++ b/src/libcamera/message.cpp
@@ -6,6 +6,7 @@
*/
#include "message.h"
+#include "thread.h"
#include "log.h"
@@ -31,6 +32,9 @@ namespace libcamera {
LOG_DEFINE_CATEGORY(Message)
+std::mutex Message::mutex_;
+Message::Type Message::nextUserType_ = Message::UserMessage;
+
/**
* \class Message
* \brief A message that can be posted to a Thread
@@ -68,6 +72,22 @@ Message::~Message()
* \return The message receiver
*/
+/**
+ * \brief Retrieve a unique identifier for user defined message types
+ *
+ * Derived classes can define their own message types and this method provides
+ * them a unique identifier to use for that purpose.
+ *
+ * \return A new unique message type
+ */
+Message::Type Message::registerUserMessageType()
+{
+ MutexLocker locker(mutex_);
+
+ return nextUserType_ = static_cast<Type>
+ (static_cast<unsigned int>(nextUserType_) + 1);
+}
+
/**
* \class SignalMessage
* \brief A message carrying a Signal across threads
--
2.21.0
More information about the libcamera-devel
mailing list