xref: /openbmc/phosphor-power/phosphor-power-supply/util_base.hpp (revision f54021972b91be5058b50e9046bb0dd5a3b22a80)
13f1242f3SBrandon Wyman #pragma once
23f1242f3SBrandon Wyman 
33f1242f3SBrandon Wyman #include "types.hpp"
43f1242f3SBrandon Wyman 
53f1242f3SBrandon Wyman #include <sdbusplus/bus/match.hpp>
63f1242f3SBrandon Wyman 
752245b69SAdriana Kobylak #include <bitset>
818a24d92SBrandon Wyman #include <chrono>
952245b69SAdriana Kobylak 
103f1242f3SBrandon Wyman namespace phosphor::power::psu
113f1242f3SBrandon Wyman {
123f1242f3SBrandon Wyman 
133f1242f3SBrandon Wyman /**
143f1242f3SBrandon Wyman  * @class UtilBase
153f1242f3SBrandon Wyman  * A base class to allow for mocking certain utility functions.
163f1242f3SBrandon Wyman  */
173f1242f3SBrandon Wyman class UtilBase
183f1242f3SBrandon Wyman {
193f1242f3SBrandon Wyman   public:
203f1242f3SBrandon Wyman     virtual ~UtilBase() = default;
213f1242f3SBrandon Wyman 
227354ce62SPatrick Williams     virtual bool getPresence(sdbusplus::bus_t& bus,
233f1242f3SBrandon Wyman                              const std::string& invpath) const = 0;
24681b2a36SB. J. Wyman 
257354ce62SPatrick Williams     virtual void setPresence(sdbusplus::bus_t& bus, const std::string& invpath,
267354ce62SPatrick Williams                              bool present, const std::string& name) const = 0;
270975eaf4SMatt Spinler 
287354ce62SPatrick Williams     virtual void setAvailable(sdbusplus::bus_t& bus, const std::string& invpath,
290975eaf4SMatt Spinler                               bool available) const = 0;
30ca1e9ea1SMatt Spinler 
317354ce62SPatrick Williams     virtual void handleChassisHealthRollup(sdbusplus::bus_t& bus,
32ca1e9ea1SMatt Spinler                                            const std::string& invpath,
33ca1e9ea1SMatt Spinler                                            bool addRollup) const = 0;
34592bd27cSMatt Spinler 
35592bd27cSMatt Spinler     virtual std::string getChassis(sdbusplus::bus_t& /*bus*/,
36592bd27cSMatt Spinler                                    const std::string& /*invpath*/) const = 0;
373f1242f3SBrandon Wyman };
383f1242f3SBrandon Wyman 
393f1242f3SBrandon Wyman const UtilBase& getUtils();
403f1242f3SBrandon Wyman 
getPresence(sdbusplus::bus_t & bus,const std::string & invpath)417354ce62SPatrick Williams inline bool getPresence(sdbusplus::bus_t& bus, const std::string& invpath)
423f1242f3SBrandon Wyman {
433f1242f3SBrandon Wyman     return getUtils().getPresence(bus, invpath);
443f1242f3SBrandon Wyman }
453f1242f3SBrandon Wyman 
setPresence(sdbusplus::bus_t & bus,const std::string & invpath,bool present,const std::string & name)467354ce62SPatrick Williams inline void setPresence(sdbusplus::bus_t& bus, const std::string& invpath,
47681b2a36SB. J. Wyman                         bool present, const std::string& name)
48681b2a36SB. J. Wyman {
49681b2a36SB. J. Wyman     return getUtils().setPresence(bus, invpath, present, name);
50681b2a36SB. J. Wyman }
51681b2a36SB. J. Wyman 
setAvailable(sdbusplus::bus_t & bus,const std::string & invpath,bool available)527354ce62SPatrick Williams inline void setAvailable(sdbusplus::bus_t& bus, const std::string& invpath,
530975eaf4SMatt Spinler                          bool available)
540975eaf4SMatt Spinler {
550975eaf4SMatt Spinler     getUtils().setAvailable(bus, invpath, available);
560975eaf4SMatt Spinler }
570975eaf4SMatt Spinler 
handleChassisHealthRollup(sdbusplus::bus_t & bus,const std::string & invpath,bool addRollup)58*f5402197SPatrick Williams inline void handleChassisHealthRollup(
59*f5402197SPatrick Williams     sdbusplus::bus_t& bus, const std::string& invpath, bool addRollup)
60ca1e9ea1SMatt Spinler {
61ca1e9ea1SMatt Spinler     getUtils().handleChassisHealthRollup(bus, invpath, addRollup);
62ca1e9ea1SMatt Spinler }
63ca1e9ea1SMatt Spinler 
getChassis(sdbusplus::bus_t & bus,const std::string & invpath)64592bd27cSMatt Spinler inline std::string getChassis(sdbusplus::bus_t& bus, const std::string& invpath)
65592bd27cSMatt Spinler {
66592bd27cSMatt Spinler     return getUtils().getChassis(bus, invpath);
67592bd27cSMatt Spinler }
68592bd27cSMatt Spinler 
693ca062aeSAdriana Kobylak class GPIOInterfaceBase
70681b2a36SB. J. Wyman {
71681b2a36SB. J. Wyman   public:
723ca062aeSAdriana Kobylak     virtual ~GPIOInterfaceBase() = default;
73681b2a36SB. J. Wyman 
74681b2a36SB. J. Wyman     virtual int read() = 0;
7552245b69SAdriana Kobylak     virtual void write(int value, std::bitset<32> flags) = 0;
7618a24d92SBrandon Wyman     virtual void toggleLowHigh(const std::chrono::milliseconds& delay) = 0;
77d8b8cb15SB. J. Wyman     virtual std::string getName() const = 0;
78681b2a36SB. J. Wyman };
79681b2a36SB. J. Wyman 
803f1242f3SBrandon Wyman } // namespace phosphor::power::psu
81