blob: 595c0df8943da74390f409c79b8266d594c134eb [file] [log] [blame]
Jagpal Singh Gille92aba42025-10-16 00:00:13 -07001#pragma once
2
3#include "modbus/modbus.hpp"
4
5#include <xyz/openbmc_project/Sensor/Value/client.hpp>
6
7namespace phosphor::modbus::rtu::device
8{
9
10namespace ModbusIntf = phosphor::modbus::rtu;
11
12namespace config
13{
14
15using SensorValueIntf =
16 sdbusplus::client::xyz::openbmc_project::sensor::Value<>;
17
18enum class SensorFormat
19{
20 floatingPoint,
21 integer,
22 unknown
23};
24
25struct 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
39enum 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
54struct StatusBit
55{
56 std::string name = "unknown";
57 StatusType type = StatusType::unknown;
58 uint8_t bitPosition = 0;
59 bool value = false;
60};
61
62enum class FirmwareRegisterType
63{
64 version,
65 update,
66 unknown
67};
68
69struct FirmwareRegister
70{
71 std::string name = "unknown";
72 FirmwareRegisterType type = FirmwareRegisterType::unknown;
73 uint16_t offset = 0;
74 uint8_t size = 0;
75};
76
77struct 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
95auto 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