1*6b492fbfSDeepak Kodihalli #pragma once
2*6b492fbfSDeepak Kodihalli 
3*6b492fbfSDeepak Kodihalli #include <string>
4*6b492fbfSDeepak Kodihalli #include <vector>
5*6b492fbfSDeepak Kodihalli #include <sdbusplus/bus.hpp>
6*6b492fbfSDeepak Kodihalli #include <sdbusplus/server/object.hpp>
7*6b492fbfSDeepak Kodihalli #include "org/open_power/OCC/PassThrough/server.hpp"
8*6b492fbfSDeepak Kodihalli #include "config.h"
9*6b492fbfSDeepak Kodihalli 
10*6b492fbfSDeepak Kodihalli namespace open_power
11*6b492fbfSDeepak Kodihalli {
12*6b492fbfSDeepak Kodihalli namespace occ
13*6b492fbfSDeepak Kodihalli {
14*6b492fbfSDeepak Kodihalli namespace pass_through
15*6b492fbfSDeepak Kodihalli {
16*6b492fbfSDeepak Kodihalli 
17*6b492fbfSDeepak Kodihalli /** @brief Make occ pass-through d-bus object pathname
18*6b492fbfSDeepak Kodihalli  *  @param[in] occ - occ name
19*6b492fbfSDeepak Kodihalli  *  @returns occ pass-through path
20*6b492fbfSDeepak Kodihalli  */
21*6b492fbfSDeepak Kodihalli inline auto object(const std::string& occ)
22*6b492fbfSDeepak Kodihalli {
23*6b492fbfSDeepak Kodihalli     return std::string(OCC_PASS_THROUGH_ROOT) +
24*6b492fbfSDeepak Kodihalli            '/' +
25*6b492fbfSDeepak Kodihalli            occ;
26*6b492fbfSDeepak Kodihalli }
27*6b492fbfSDeepak Kodihalli 
28*6b492fbfSDeepak Kodihalli /** @brief Put occ pass through objects on the bus
29*6b492fbfSDeepak Kodihalli  */
30*6b492fbfSDeepak Kodihalli void run();
31*6b492fbfSDeepak Kodihalli 
32*6b492fbfSDeepak Kodihalli using Iface = sdbusplus::server::object::object<
33*6b492fbfSDeepak Kodihalli     sdbusplus::org::open_power::OCC::server::PassThrough>;
34*6b492fbfSDeepak Kodihalli 
35*6b492fbfSDeepak Kodihalli /** @class PassThrough
36*6b492fbfSDeepak Kodihalli  *  @brief Implements org.open_power.OCC.PassThrough
37*6b492fbfSDeepak Kodihalli  */
38*6b492fbfSDeepak Kodihalli class PassThrough : public Iface
39*6b492fbfSDeepak Kodihalli {
40*6b492fbfSDeepak Kodihalli     public:
41*6b492fbfSDeepak Kodihalli         PassThrough() = delete;
42*6b492fbfSDeepak Kodihalli         PassThrough(const PassThrough&) = delete;
43*6b492fbfSDeepak Kodihalli         PassThrough& operator=(const PassThrough&) = delete;
44*6b492fbfSDeepak Kodihalli         PassThrough(PassThrough&&) = default;
45*6b492fbfSDeepak Kodihalli         PassThrough& operator=(PassThrough&&) = default;
46*6b492fbfSDeepak Kodihalli         ~PassThrough() = default;
47*6b492fbfSDeepak Kodihalli 
48*6b492fbfSDeepak Kodihalli         /** @brief Ctor to put pass-through d-bus object on the bus
49*6b492fbfSDeepak Kodihalli          *  @param[in] bus - Bus to attach to
50*6b492fbfSDeepak Kodihalli          *  @param[in] path - Path to attach at
51*6b492fbfSDeepak Kodihalli          */
52*6b492fbfSDeepak Kodihalli         PassThrough(sdbusplus::bus::bus& bus,
53*6b492fbfSDeepak Kodihalli                     const char* path);
54*6b492fbfSDeepak Kodihalli 
55*6b492fbfSDeepak Kodihalli         /** @brief Pass through command to OCC
56*6b492fbfSDeepak Kodihalli          *  @param[in] command - command to pass-through
57*6b492fbfSDeepak Kodihalli          *  @returns OCC response as an array
58*6b492fbfSDeepak Kodihalli          */
59*6b492fbfSDeepak Kodihalli         std::vector<std::int32_t>
60*6b492fbfSDeepak Kodihalli             send(std::vector<std::int32_t> command) override;
61*6b492fbfSDeepak Kodihalli 
62*6b492fbfSDeepak Kodihalli     private:
63*6b492fbfSDeepak Kodihalli         /** @brief Pass-through occ path on the bus */
64*6b492fbfSDeepak Kodihalli         std::string path;
65*6b492fbfSDeepak Kodihalli };
66*6b492fbfSDeepak Kodihalli 
67*6b492fbfSDeepak Kodihalli } // namespace pass_through
68*6b492fbfSDeepak Kodihalli } // namespace occ
69*6b492fbfSDeepak Kodihalli } // namespace open_power
70