xref: /openbmc/phosphor-modbus/rtu/modbus/modbus.hpp (revision a32d241b08af236b5ea1d4e18a390bdc561b435b)
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