Implement org.open_power.OCC.PassThrough

This d-bus interface is implemented by the
open_power::occ::pass_through::PassThrough class.

Change-Id: I6bce9e609b7b977418bcfee15e97432cb7d9e6b3
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/occ_pass_through.hpp b/occ_pass_through.hpp
new file mode 100644
index 0000000..835241f
--- /dev/null
+++ b/occ_pass_through.hpp
@@ -0,0 +1,69 @@
+#pragma once
+
+#include <string>
+#include <vector>
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+#include "org/open_power/OCC/PassThrough/server.hpp"
+#include "config.h"
+
+namespace open_power
+{
+namespace occ
+{
+namespace pass_through
+{
+
+/** @brief Make occ pass-through d-bus object pathname
+ *  @param[in] occ - occ name
+ *  @returns occ pass-through path
+ */
+inline auto object(const std::string& occ)
+{
+    return std::string(OCC_PASS_THROUGH_ROOT) +
+           '/' +
+           occ;
+}
+
+/** @brief Put occ pass through objects on the bus
+ */
+void run();
+
+using Iface = sdbusplus::server::object::object<
+    sdbusplus::org::open_power::OCC::server::PassThrough>;
+
+/** @class PassThrough
+ *  @brief Implements org.open_power.OCC.PassThrough
+ */
+class PassThrough : public Iface
+{
+    public:
+        PassThrough() = delete;
+        PassThrough(const PassThrough&) = delete;
+        PassThrough& operator=(const PassThrough&) = delete;
+        PassThrough(PassThrough&&) = default;
+        PassThrough& operator=(PassThrough&&) = default;
+        ~PassThrough() = default;
+
+        /** @brief Ctor to put pass-through d-bus object on the bus
+         *  @param[in] bus - Bus to attach to
+         *  @param[in] path - Path to attach at
+         */
+        PassThrough(sdbusplus::bus::bus& bus,
+                    const char* path);
+
+        /** @brief Pass through command to OCC
+         *  @param[in] command - command to pass-through
+         *  @returns OCC response as an array
+         */
+        std::vector<std::int32_t>
+            send(std::vector<std::int32_t> command) override;
+
+    private:
+        /** @brief Pass-through occ path on the bus */
+        std::string path;
+};
+
+} // namespace pass_through
+} // namespace occ
+} // namespace open_power