blob: d26bed93399da86fc03749d4b856e70e4bc60850 [file] [log] [blame]
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -07001#pragma once
2
3#include <sdbusplus/async.hpp>
4
5namespace phosphor::modbus::rtu
6{
7
8class Message;
9
10enum class Parity
11{
12 odd,
13 even,
14 none,
15 unknown
16};
17
18class 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