1*e92aba45SJagpal Singh Gill #pragma once 2*e92aba45SJagpal Singh Gill 3*e92aba45SJagpal Singh Gill #include "modbus/modbus.hpp" 4*e92aba45SJagpal Singh Gill 5*e92aba45SJagpal Singh Gill #include <xyz/openbmc_project/Sensor/Value/client.hpp> 6*e92aba45SJagpal Singh Gill 7*e92aba45SJagpal Singh Gill namespace phosphor::modbus::rtu::device 8*e92aba45SJagpal Singh Gill { 9*e92aba45SJagpal Singh Gill 10*e92aba45SJagpal Singh Gill namespace ModbusIntf = phosphor::modbus::rtu; 11*e92aba45SJagpal Singh Gill 12*e92aba45SJagpal Singh Gill namespace config 13*e92aba45SJagpal Singh Gill { 14*e92aba45SJagpal Singh Gill 15*e92aba45SJagpal Singh Gill using SensorValueIntf = 16*e92aba45SJagpal Singh Gill sdbusplus::client::xyz::openbmc_project::sensor::Value<>; 17*e92aba45SJagpal Singh Gill 18*e92aba45SJagpal Singh Gill enum class SensorFormat 19*e92aba45SJagpal Singh Gill { 20*e92aba45SJagpal Singh Gill floatingPoint, 21*e92aba45SJagpal Singh Gill integer, 22*e92aba45SJagpal Singh Gill unknown 23*e92aba45SJagpal Singh Gill }; 24*e92aba45SJagpal Singh Gill 25*e92aba45SJagpal Singh Gill struct SensorRegister 26*e92aba45SJagpal Singh Gill { 27*e92aba45SJagpal Singh Gill std::string name = "unknown"; 28*e92aba45SJagpal Singh Gill std::string pathSuffix = "unknown"; 29*e92aba45SJagpal Singh Gill SensorValueIntf::Unit unit; 30*e92aba45SJagpal Singh Gill uint16_t offset = 0; 31*e92aba45SJagpal Singh Gill uint8_t size = 0; 32*e92aba45SJagpal Singh Gill uint8_t precision = 0; 33*e92aba45SJagpal Singh Gill double scale = 1.0; 34*e92aba45SJagpal Singh Gill double shift = 0.0; 35*e92aba45SJagpal Singh Gill bool isSigned = false; 36*e92aba45SJagpal Singh Gill SensorFormat format = SensorFormat::unknown; 37*e92aba45SJagpal Singh Gill }; 38*e92aba45SJagpal Singh Gill 39*e92aba45SJagpal Singh Gill enum class StatusType 40*e92aba45SJagpal Singh Gill { 41*e92aba45SJagpal Singh Gill controllerFailure, 42*e92aba45SJagpal Singh Gill fanFailure, 43*e92aba45SJagpal Singh Gill filterFailure, 44*e92aba45SJagpal Singh Gill powerFault, 45*e92aba45SJagpal Singh Gill pumpFailure, 46*e92aba45SJagpal Singh Gill leakDetectedCritical, 47*e92aba45SJagpal Singh Gill leakDetectedWarning, 48*e92aba45SJagpal Singh Gill sensorFailure, 49*e92aba45SJagpal Singh Gill sensorReadingCritical, 50*e92aba45SJagpal Singh Gill sensorReadingWarning, 51*e92aba45SJagpal Singh Gill unknown 52*e92aba45SJagpal Singh Gill }; 53*e92aba45SJagpal Singh Gill 54*e92aba45SJagpal Singh Gill struct StatusBit 55*e92aba45SJagpal Singh Gill { 56*e92aba45SJagpal Singh Gill std::string name = "unknown"; 57*e92aba45SJagpal Singh Gill StatusType type = StatusType::unknown; 58*e92aba45SJagpal Singh Gill uint8_t bitPosition = 0; 59*e92aba45SJagpal Singh Gill bool value = false; 60*e92aba45SJagpal Singh Gill }; 61*e92aba45SJagpal Singh Gill 62*e92aba45SJagpal Singh Gill enum class FirmwareRegisterType 63*e92aba45SJagpal Singh Gill { 64*e92aba45SJagpal Singh Gill version, 65*e92aba45SJagpal Singh Gill update, 66*e92aba45SJagpal Singh Gill unknown 67*e92aba45SJagpal Singh Gill }; 68*e92aba45SJagpal Singh Gill 69*e92aba45SJagpal Singh Gill struct FirmwareRegister 70*e92aba45SJagpal Singh Gill { 71*e92aba45SJagpal Singh Gill std::string name = "unknown"; 72*e92aba45SJagpal Singh Gill FirmwareRegisterType type = FirmwareRegisterType::unknown; 73*e92aba45SJagpal Singh Gill uint16_t offset = 0; 74*e92aba45SJagpal Singh Gill uint8_t size = 0; 75*e92aba45SJagpal Singh Gill }; 76*e92aba45SJagpal Singh Gill 77*e92aba45SJagpal Singh Gill struct Config 78*e92aba45SJagpal Singh Gill { 79*e92aba45SJagpal Singh Gill using sensor_registers_t = std::vector<SensorRegister>; 80*e92aba45SJagpal Singh Gill using status_registers_t = 81*e92aba45SJagpal Singh Gill std::unordered_map<uint16_t, std::vector<StatusBit>>; 82*e92aba45SJagpal Singh Gill using firmware_registers_t = std::vector<FirmwareRegister>; 83*e92aba45SJagpal Singh Gill 84*e92aba45SJagpal Singh Gill uint8_t address = 0; 85*e92aba45SJagpal Singh Gill ModbusIntf::Parity parity = ModbusIntf::Parity::unknown; 86*e92aba45SJagpal Singh Gill uint32_t baudRate = 0; 87*e92aba45SJagpal Singh Gill std::string name = "unknown"; 88*e92aba45SJagpal Singh Gill std::string portName = "unknown"; 89*e92aba45SJagpal Singh Gill sdbusplus::message::object_path inventoryPath; 90*e92aba45SJagpal Singh Gill sensor_registers_t sensorRegisters; 91*e92aba45SJagpal Singh Gill status_registers_t statusRegisters; 92*e92aba45SJagpal Singh Gill firmware_registers_t firmwareRegisters; 93*e92aba45SJagpal Singh Gill }; 94*e92aba45SJagpal Singh Gill 95*e92aba45SJagpal Singh Gill auto updateBaseConfig(sdbusplus::async::context& ctx, 96*e92aba45SJagpal Singh Gill const sdbusplus::message::object_path& objectPath, 97*e92aba45SJagpal Singh Gill const std::string& interfaceName, Config& config) 98*e92aba45SJagpal Singh Gill -> sdbusplus::async::task<bool>; 99*e92aba45SJagpal Singh Gill 100*e92aba45SJagpal Singh Gill } // namespace config 101*e92aba45SJagpal Singh Gill 102*e92aba45SJagpal Singh Gill } // namespace phosphor::modbus::rtu::device 103