blob: 117408b1130d1d0d64f978d7f92c0fc1d36f61c8 [file] [log] [blame]
Jagpal Singh Gill9695bd22025-10-01 14:38:17 -07001#pragma once
2
3#include "modbus_message.hpp"
4
5#include <vector>
6
7namespace phosphor::modbus::rtu
8{
9
10static constexpr uint8_t ReadHoldingRegistersFunctionCode = 0x03;
11
12class ReadHoldingRegistersRequest : public Message
13{
14 public:
15 ReadHoldingRegistersRequest() = delete;
16 ReadHoldingRegistersRequest(const ReadHoldingRegistersRequest&) = delete;
17 ReadHoldingRegistersRequest& operator=(const ReadHoldingRegistersRequest&) =
18 delete;
19 ReadHoldingRegistersRequest(ReadHoldingRegistersRequest&&) = delete;
20 ReadHoldingRegistersRequest& operator=(ReadHoldingRegistersRequest&&) =
21 delete;
22
23 explicit ReadHoldingRegistersRequest(
24 uint8_t deviceAddress, uint16_t registerOffset, uint16_t registerCount);
25
26 auto encode() -> void;
27
28 private:
29 static constexpr uint8_t commandCode = ReadHoldingRegistersFunctionCode;
30 const uint8_t deviceAddress;
31 const uint16_t registerOffset;
32 const uint16_t registerCount;
33};
34
35class Response : public Message
36{
37 public:
38 auto decode() -> void;
39};
40
41class ReadHoldingRegistersResponse : public Response
42{
43 public:
44 ReadHoldingRegistersResponse() = delete;
45 ReadHoldingRegistersResponse(const ReadHoldingRegistersResponse&) = delete;
46 ReadHoldingRegistersResponse& operator=(
47 const ReadHoldingRegistersResponse&) = delete;
48 ReadHoldingRegistersResponse(ReadHoldingRegistersResponse&&) = delete;
49 ReadHoldingRegistersResponse& operator=(ReadHoldingRegistersResponse&&) =
50 delete;
51
52 explicit ReadHoldingRegistersResponse(uint8_t deviceAddress,
53 std::vector<uint16_t>& registers);
54
55 auto decode() -> void;
56
57 private:
58 static constexpr uint8_t expectedCommandCode =
59 ReadHoldingRegistersFunctionCode;
60 const uint8_t expectedDeviceAddress;
61 // The returned response is stored in the registers vector
62 std::vector<uint16_t>& registers;
63};
64
65} // namespace phosphor::modbus::rtu