1 #pragma once 2 3 #include <sdbusplus/async.hpp> 4 5 namespace phosphor::modbus::rtu 6 { 7 8 class Message; 9 10 enum class Parity 11 { 12 odd, 13 even, 14 none, 15 unknown 16 }; 17 18 class Modbus 19 { 20 public: 21 explicit Modbus(sdbusplus::async::context& ctx, int fd, uint32_t baudRate, 22 uint16_t rtsDelay); 23 24 auto setProperties(uint32_t inBaudRate, Parity inParity) -> bool; 25 26 auto readHoldingRegisters(uint8_t deviceAddress, uint16_t registerOffset, 27 std::vector<uint16_t>& registers) 28 -> sdbusplus::async::task<bool>; 29 30 private: 31 auto writeRequest(uint8_t deviceAddress, Message& request) 32 -> sdbusplus::async::task<bool>; 33 34 auto readResponse(uint8_t deviceAddress, Message& response, 35 uint8_t expectedResponseCode) 36 -> sdbusplus::async::task<bool>; 37 38 sdbusplus::async::context& ctx; 39 int fd; 40 uint16_t rtsDelay; 41 uint32_t baudRate = 0; 42 Parity parity = Parity::odd; 43 sdbusplus::async::fdio fdioInstance; 44 }; 45 46 } // namespace phosphor::modbus::rtu 47