#pragma once #include #include #include "config.h" namespace open_power { namespace occ { namespace fs = std::experimental::filesystem; /** @class Device * @brief Binds and unbinds the OCC driver upon request */ class Device { public: Device() = delete; ~Device() = default; Device(const Device&) = delete; Device& operator=(const Device&) = delete; Device(Device&&) = default; Device& operator=(Device&&) = default; /** @brief Constructs the Device object * * @param[in] name - OCC instance name */ Device(const std::string& name) : config(name + '-' + "dev0") { // Nothing to do here } /** @brief Binds device to the OCC driver */ inline void bind() { return write(bindPath, config); } /** @brief Un-binds device from the OCC driver */ inline void unBind() { return write(unBindPath, config); } private: /** @brief Config value to be used to do bind and unbind */ const std::string config; /** @brief To bind the device to the OCC driver, do: * Write occ<#>-dev0 to: /sys/bus/platform/drivers/occ-hwmon/bind */ static fs::path bindPath; /** @brief To un-bind the device from the OCC driver, do: * Write occ<#>-dev0 to: /sys/bus/platform/drivers/occ-hwmon/unbind */ static fs::path unBindPath; /** @brief file writer to achieve bind and unbind * * @param[in] filename - Name of file to be written * @param[in] data - Data to be written to * @return - None */ void write(const fs::path& fileName, const std::string& data) { // If there is an error, move the exception all the way up std::ofstream file(fileName, std::ios::out); file << data; file.close(); return; } }; } // namespace occ } // namespace open_power