#pragma once #include namespace phosphor::modbus::rtu { class Message; enum class Parity { odd, even, none, unknown }; class Modbus { public: explicit Modbus(sdbusplus::async::context& ctx, int fd, uint32_t baudRate, uint16_t rtsDelay); auto setProperties(uint32_t inBaudRate, Parity inParity) -> bool; auto readHoldingRegisters(uint8_t deviceAddress, uint16_t registerOffset, std::vector& registers) -> sdbusplus::async::task; private: auto writeRequest(uint8_t deviceAddress, Message& request) -> sdbusplus::async::task; auto readResponse(uint8_t deviceAddress, Message& response, uint8_t expectedResponseCode) -> sdbusplus::async::task; sdbusplus::async::context& ctx; int fd; uint16_t rtsDelay; uint32_t baudRate = 0; Parity parity = Parity::odd; sdbusplus::async::fdio fdioInstance; }; } // namespace phosphor::modbus::rtu