xref: /openbmc/phosphor-modbus/rtu/device/base_config.hpp (revision e92aba4516471f5a01d4ab1f93eb9919ec05c21f)
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