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