summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-10-03 17:20:37 +0200
committerJacopo Mondi <jacopo@jmondi.org>2019-10-08 15:37:15 +0200
commitc86dc5e00e825b9ff0e8c656661516172cc30ec4 (patch)
tree6aa78d2438bf409583fe3cf40beca0b9e3eb76c7
parentecbe309b06b68ebf217c7aeead77ad8a7a056e89 (diff)
ipa: vimc: Add support for tracing operations
Add support to the dummy VIMC IPA for tracing operation by using a FIFO channel that will be used by the IPA Interface test to verify communications with the IPA. At the moment only add support for the init() operation as it's the only defined one. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/ipa/ipa_vimc.h22
-rw-r--r--src/ipa/ipa_vimc.cpp68
2 files changed, 89 insertions, 1 deletions
diff --git a/include/ipa/ipa_vimc.h b/include/ipa/ipa_vimc.h
new file mode 100644
index 00000000..05b561d8
--- /dev/null
+++ b/include/ipa/ipa_vimc.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * ipa_vimc.h - Vimc Image Processing Algorithm module
+ */
+
+#ifndef __LIBCAMERA_IPA_VIMC_H__
+#define __LIBCAMERA_IPA_VIMC_H__
+
+namespace libcamera {
+
+#define VIMC_IPA_FIFO_PATH "/tmp/libcamera_ipa_vimc_fifo"
+
+enum IPAOperationCode {
+ IPAOperationNone,
+ IPAOperationInit,
+};
+
+}; /* namespace libcamera */
+
+#endif /* __LIBCAMERA_IPA_VIMC_H__ */
diff --git a/src/ipa/ipa_vimc.cpp b/src/ipa/ipa_vimc.cpp
index abc06e7f..70d28fe2 100644
--- a/src/ipa/ipa_vimc.cpp
+++ b/src/ipa/ipa_vimc.cpp
@@ -5,25 +5,91 @@
* ipa_vimc.cpp - Vimc Image Processing Algorithm module
*/
+#include <ipa/ipa_vimc.h>
+
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
#include <iostream>
#include <ipa/ipa_interface.h>
#include <ipa/ipa_module_info.h>
+#include "log.h"
+
namespace libcamera {
+LOG_DEFINE_CATEGORY(IPAVimc)
+
class IPAVimc : public IPAInterface
{
public:
+ IPAVimc();
+ ~IPAVimc();
+
int init();
+
+private:
+ void initTrace();
+ void trace(enum IPAOperationCode operation);
+
+ int fd_;
};
+IPAVimc::IPAVimc()
+ : fd_(-1)
+{
+ initTrace();
+}
+
+IPAVimc::~IPAVimc()
+{
+ if (fd_)
+ ::close(fd_);
+}
+
int IPAVimc::init()
{
- std::cout << "initializing vimc IPA!" << std::endl;
+ trace(IPAOperationInit);
+
+ LOG(IPAVimc, Debug) << "initializing vimc IPA!";
+
return 0;
}
+void IPAVimc::initTrace()
+{
+ struct stat fifoStat;
+ int ret = stat(VIMC_IPA_FIFO_PATH, &fifoStat);
+ if (ret)
+ return;
+
+ ret = ::open(VIMC_IPA_FIFO_PATH, O_WRONLY);
+ if (ret < 0) {
+ ret = errno;
+ LOG(IPAVimc, Error) << "Failed to open vimc IPA test FIFO: "
+ << strerror(ret);
+ return;
+ }
+
+ fd_ = ret;
+}
+
+void IPAVimc::trace(enum IPAOperationCode operation)
+{
+ if (fd_ < 0)
+ return;
+
+ int ret = ::write(fd_, &operation, sizeof(operation));
+ if (ret < 0) {
+ ret = errno;
+ LOG(IPAVimc, Error) << "Failed to write to vimc IPA test FIFO: "
+ << strerror(ret);
+ }
+}
+
/*
* External IPA module interface
*/