#pragma once #include "modbus/modbus.hpp" #include namespace phosphor::modbus::rtu::device { namespace ModbusIntf = phosphor::modbus::rtu; namespace config { using SensorValueIntf = sdbusplus::client::xyz::openbmc_project::sensor::Value<>; enum class SensorFormat { floatingPoint, integer, unknown }; struct SensorRegister { std::string name = "unknown"; std::string pathSuffix = "unknown"; SensorValueIntf::Unit unit; uint16_t offset = 0; uint8_t size = 0; uint8_t precision = 0; double scale = 1.0; double shift = 0.0; bool isSigned = false; SensorFormat format = SensorFormat::unknown; }; enum class StatusType { controllerFailure, fanFailure, filterFailure, powerFault, pumpFailure, leakDetectedCritical, leakDetectedWarning, sensorFailure, sensorReadingCritical, sensorReadingWarning, unknown }; struct StatusBit { std::string name = "unknown"; StatusType type = StatusType::unknown; uint8_t bitPosition = 0; bool value = false; }; enum class FirmwareRegisterType { version, update, unknown }; struct FirmwareRegister { std::string name = "unknown"; FirmwareRegisterType type = FirmwareRegisterType::unknown; uint16_t offset = 0; uint8_t size = 0; }; struct Config { using sensor_registers_t = std::vector; using status_registers_t = std::unordered_map>; using firmware_registers_t = std::vector; uint8_t address = 0; ModbusIntf::Parity parity = ModbusIntf::Parity::unknown; uint32_t baudRate = 0; std::string name = "unknown"; std::string portName = "unknown"; sdbusplus::message::object_path inventoryPath; sensor_registers_t sensorRegisters; status_registers_t statusRegisters; firmware_registers_t firmwareRegisters; }; auto updateBaseConfig(sdbusplus::async::context& ctx, const sdbusplus::message::object_path& objectPath, const std::string& interfaceName, Config& config) -> sdbusplus::async::task; } // namespace config } // namespace phosphor::modbus::rtu::device