blob: d26bed93399da86fc03749d4b856e70e4bc60850 [file] [log] [blame]
#pragma once
#include <sdbusplus/async.hpp>
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<uint16_t>& registers)
-> sdbusplus::async::task<bool>;
private:
auto writeRequest(uint8_t deviceAddress, Message& request)
-> sdbusplus::async::task<bool>;
auto readResponse(uint8_t deviceAddress, Message& response,
uint8_t expectedResponseCode)
-> sdbusplus::async::task<bool>;
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