blob: b4709eb85c1fb0116220037843b3fcf61624fc3d [file] [log] [blame]
#pragma once
#include <exception>
#include <fstream>
#include <string>
namespace sysfs {
/**
* @class DeviceBusyException
*
* An internal exception which will be thrown when
* readSysfsWithCallout() hits an EAGAIN. Will never bubble
* up to terminate the application, nor does it need to be
* reported.
*/
class DeviceBusyException : public std::runtime_error
{
public:
DeviceBusyException(const std::string& path) :
std::runtime_error(path + " busy")
{
}
};
inline std::string make_sysfs_path(const std::string& path,
const std::string& type,
const std::string& id,
const std::string& entry)
{
using namespace std::literals;
return path + "/"s + type + id + "_"s + entry;
}
/** @brief Find hwmon instances
*
* Look for a matching hwmon instance given an
* open firmware device path.
*
* @param[in] ofNode- The open firmware device path.
*
* @returns[in] - The hwmon instance path or an empty
* string if no match is found.
*/
std::string findHwmon(const std::string& ofNode);
/** @brief Read an hwmon sysfs value.
*
* Calls exit(3) with bad status on failure.
*
* @param[in] root - The hwmon class root.
* @param[in] instance - The hwmon instance (ex. hwmon1).
* @param[in] type - The hwmon type (ex. temp).
* @param[in] id - The hwmon id (ex. 1).
* @param[in] sensor - The hwmon sensor (ex. input).
* @param[in] throwDeviceBusy - will throw a DeviceBusyException
* on an EAGAIN errno instead of an error log exception.
*
* @returns - The read value.
*/
int readSysfsWithCallout(const std::string& root,
const std::string& instance,
const std::string& type,
const std::string& id,
const std::string& sensor,
bool throwDeviceBusy = true);
/** @brief Write a hwmon sysfs value
*
* Calls exit(3) with bad status on failure
*
* @param[in] value - The value to be written
* @param[in] root - The hwmon class root.
* @param[in] instance - The hwmon instance (ex. hwmon1).
* @param[in] type - The hwmon type (ex. fan).
* @param[in] id - The hwmon id (ex. 1).
* @param[in] sensor - The hwmon sensor (ex. target).
*
* @returns - The value written
*/
uint64_t writeSysfsWithCallout(const uint64_t& value,
const std::string& root,
const std::string& instance,
const std::string& type,
const std::string& id,
const std::string& sensor);
}
// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4