blob: cd3f62b73cc05629d71d32a72b4814d5503094e6 [file] [log] [blame]
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -07001#pragma once
2
3#include "modbus/modbus_message.hpp"
4
5#include <sdbusplus/async.hpp>
6
7using MessageBase = phosphor::modbus::rtu::Message;
8
9namespace phosphor::modbus::test
10{
11
12class MessageIntf : public MessageBase
13{
14 friend class ServerTester;
15};
16
Jagpal Singh Gillcad9ecf2025-10-22 19:53:16 -070017// Read Holding Registers Testing Constants
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -070018static constexpr uint8_t testDeviceAddress = 0xa;
19constexpr uint16_t testSuccessReadHoldingRegisterOffset = 0x0102;
20constexpr uint16_t testSuccessReadHoldingRegisterCount = 0x2;
21constexpr uint16_t testSuccessReadHoldingRegisterSegmentedOffset = 0x0103;
Jagpal Singh Gille92aba42025-10-16 00:00:13 -070022const std::vector<uint16_t> testSuccessReadHoldingRegisterResponse = {
23 0x1234, 0x5678};
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -070024constexpr uint16_t testFailureReadHoldingRegister = 0x0105;
25
Jagpal Singh Gillcad9ecf2025-10-22 19:53:16 -070026// Device Inventory Testing Constants
27constexpr uint16_t testReadHoldingRegisterModelOffset = 0x0112;
28constexpr uint16_t testReadHoldingRegisterModelCount = 0x8;
Jagpal Singh Gille92aba42025-10-16 00:00:13 -070029const std::vector<uint16_t> testReadHoldingRegisterModel = {
30 0x5244, 0x4630, 0x3430, 0x4453, 0x5335, 0x3139, 0x0000, 0x3000};
Jagpal Singh Gillcad9ecf2025-10-22 19:53:16 -070031constexpr std::string testReadHoldingRegisterModelStr = "RDF040DSS519";
32
Jagpal Singh Gille92aba42025-10-16 00:00:13 -070033// Device Sensors Testing Constants
34constexpr uint16_t testReadHoldingRegisterTempCount = 0x1;
35constexpr uint16_t testReadHoldingRegisterTempUnsignedOffset = 0x0113;
36const std::vector<uint16_t> testReadHoldingRegisterTempUnsigned = {
37 0x0050}; // 80.0
38constexpr uint16_t testReadHoldingRegisterTempSignedOffset = 0x0114;
39const std::vector<uint16_t> testReadHoldingRegisterTempSigned = {
40 0xFFB0}; // -80.0
41
Jagpal Singh Gillcf77ef52025-09-02 15:19:29 -070042// Device Firmware Testing Constants
43constexpr uint16_t testReadHoldingRegisterFirmwareVersionOffset = 0x0115;
44constexpr uint16_t testReadHoldingRegisterFirmwareVersionCount = 0x2;
45const std::vector<uint16_t> testReadHoldingRegisterFirmwareVersion = {
46 0x5244, 0x4630};
47constexpr std::string testReadHoldingRegisterFirmwareVersionStr = "RDF0";
48
Jagpal Singh Gille92aba42025-10-16 00:00:13 -070049static const std::map<uint16_t, std::tuple<uint16_t, std::vector<uint16_t>>>
50 testReadHoldingRegisterMap = {
51 {testSuccessReadHoldingRegisterOffset,
52 {testSuccessReadHoldingRegisterCount,
53 testSuccessReadHoldingRegisterResponse}},
54 {testSuccessReadHoldingRegisterSegmentedOffset,
55 {testSuccessReadHoldingRegisterCount,
56 testSuccessReadHoldingRegisterResponse}},
57 {testReadHoldingRegisterModelOffset,
58 {testReadHoldingRegisterModelCount, testReadHoldingRegisterModel}},
59 {testReadHoldingRegisterTempUnsignedOffset,
60 {testReadHoldingRegisterTempCount,
61 testReadHoldingRegisterTempUnsigned}},
62 {testReadHoldingRegisterTempSignedOffset,
63 {testReadHoldingRegisterTempCount, testReadHoldingRegisterTempSigned}},
Jagpal Singh Gillcf77ef52025-09-02 15:19:29 -070064 {testReadHoldingRegisterFirmwareVersionOffset,
65 {testReadHoldingRegisterFirmwareVersionCount,
66 testReadHoldingRegisterFirmwareVersion}},
Jagpal Singh Gille92aba42025-10-16 00:00:13 -070067};
68
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -070069class ServerTester
70{
71 public:
72 explicit ServerTester(sdbusplus::async::context& ctx, int fd);
73
74 auto processRequests() -> sdbusplus::async::task<void>;
75
76 private:
77 void processMessage(MessageIntf& request, size_t requestSize,
78 MessageIntf& response, bool& segmentedResponse);
79
80 void processReadHoldingRegisters(MessageIntf& request, size_t requestSize,
81 MessageIntf& response,
82 bool& segmentedResponse);
83
84 int fd;
85 sdbusplus::async::fdio fdioInstance;
Jagpal Singh Gillcad9ecf2025-10-22 19:53:16 -070086 sdbusplus::async::mutex mutex;
Jagpal Singh Gilla32d2412025-10-01 14:55:05 -070087};
88} // namespace phosphor::modbus::test