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