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